Jika sebuah container mati, layanan stateful berisiko kehilangan data atau mengalami ketidakandalan data. Penyimpanan persisten mencegah masalah ini. Topik ini menjelaskan cara menggunakan disk cloud yang disediakan secara dinamis untuk menyediakan penyimpanan persisten.
Informasi latar belakang
Kasus penggunaan disk cloud yang disediakan secara dinamis:
Jika Anda tidak memiliki disk cloud, sistem akan secara otomatis menyediakan satu saat Anda melakukan penerapan aplikasi.
Untuk menggunakan disk cloud yang disediakan secara dinamis:
Buat klaim volume persisten (PVC) secara manual dan deklarasikan StorageClass di dalam PVC tersebut.
Lakukan penerapan aplikasi. Sistem kemudian secara otomatis membuat volume persisten (PV) berdasarkan StorageClass tersebut.
Prasyarat
Kluster ACK yang dikelola telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.
Anda telah terhubung ke kluster Kubernetes menggunakan kubectl. Untuk informasi selengkapnya, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Pastikan plugin Provisioner telah diinstal di kluster. Plugin ini secara otomatis membuat disk cloud berdasarkan StorageClass.
Plugin Provisioner
Container Service for Kubernetes (ACK) secara otomatis menginstal plugin Provisioner saat Anda membuat kluster.
Buat StorageClass
Alibaba Cloud Container Service for Kubernetes (ACK) membuat empat StorageClass default selama inisialisasi sistem. StorageClass ini menggunakan parameter default dan hanya berlaku untuk kluster single-zone. Untuk kluster multi-zona, Anda harus membuat StorageClass sendiri. Keempat StorageClass default tersebut adalah:
alicloud-disk-common: secara otomatis membuat disk dasar.
alicloud-disk-efficiency: secara otomatis membuat disk ultra.
alicloud-disk-ssd: secara otomatis membuat SSD standar.
alicloud-disk-available: Ini adalah opsi ketersediaan tinggi (HA). Pertama-tama mencoba membuat SSD standar. Jika sumber daya SSD standar habis di zona tersebut, maka mencoba membuat disk ultra.
Buat file storageclass.yaml.
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: alicloud-disk-ssd-hangzhou-b provisioner: alicloud/disk reclaimPolicy: Retain parameters: type: cloud_ssd regionId: cn-hangzhou zoneId: cn-hangzhou-b fstype: "ext4" readonly: "false"Parameter
Deskripsi
provisionerAtur ke `alicloud/disk` untuk secara otomatis membuat disk Alibaba Cloud menggunakan plugin provisioner.
reclaimPolicyKebijakan reclaim untuk disk mendukung Delete dan Retain, dengan Delete sebagai nilai default.
CatatanJika dikonfigurasi sebagai Delete, menghapus PVC juga akan menghapus disk, dan data pada disk tersebut tidak dapat dipulihkan.
typeTipe disk cloud yang dibuat secara otomatis, mendukung cloud, cloud_efficiency, cloud_ssd, dan available.
regionId(Opsional) ID wilayah tempat disk cloud dibuat secara otomatis. Harus sama dengan wilayah kluster.
zoneId(Opsional) ID zona tempat disk cloud dibuat secara otomatis.
Untuk kluster single-zone, gunakan zona yang sama dengan kluster.
Untuk kluster multi-zona, konfigurasikan beberapa nilai `zoneId`, seperti:
zoneid: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c
fstype(Opsional) Sistem file yang digunakan untuk pembuatan otomatis disk cloud, dengan nilai default ext4.
readonly(Opsional) Apakah disk cloud yang dibuat secara otomatis dipasang dengan izin read-only. Nilai yang valid: true — disk cloud memiliki izin read-only; false — disk cloud memiliki izin read-write. Nilai default: false.
encrypted(Opsional) Apakah disk yang dibuat secara otomatis dienkripsi. Menerima true: dienkripsi, false: tidak dienkripsi. Nilai default: false.
Jalankan perintah berikut untuk membuat StorageClass:
kubectl create -f storageclass.yaml
Buat PVC
Buat file pvc-ssd.yaml.
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: disk-ssd spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-ssd-hangzhou-b resources: requests: storage: 20GiJalankan perintah berikut untuk membuat PVC:
kubectl create -f pvc-ssd.yaml
Pada halaman Cluster, klik di panel navigasi sebelah kiri. Anda dapat melihat PVC yang telah dibuat beserta volume persisten (PV) yang terikat dengannya. StorageClass dari PVC tersebut adalah alicloud-disk-ssd-hangzhou-b.
Buat Aplikasi
Buat file pvc-dynamic.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-dynamic labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: disk-pvc mountPath: "/data" volumes: - name: disk-pvc persistentVolumeClaim: claimName: disk-ssdJalankan perintah berikut untuk membuat deployment:
kubectl create -f nginx-dynamic.yaml
Pada halaman Cluster, di panel navigasi sebelah kiri, klik . Kemudian, lihat deployment yang telah Anda buat.
Penyimpanan persisten untuk disk cloud yang disediakan secara dinamis
Jalankan perintah berikut untuk melihat nama pod dari deployment tersebut:
kubectl get pod | grep dynamicOutput yang diharapkan:
nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 3mJalankan perintah berikut untuk memeriksa apakah disk cloud baru telah dipasang ke path /data:
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- df | grep dataOutput yang diharapkan:
/dev/vdh 20511312 45080 20449848 1% /dataJalankan perintah berikut untuk melihat file-file di path /data:
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /dataOutput yang diharapkan:
lost+foundJalankan perintah berikut untuk membuat file dynamic di path /data:
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- touch /data/dynamicJalankan perintah berikut untuk melihat file-file di path /data:
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /dataOutput yang diharapkan:
dynamic lost+foundJalankan perintah berikut untuk menghapus pod bernama
nginx-dynamic-5c74594ccb-zl9pf:kubectl delete pod nginx-dynamic-5c74594ccb-zl9pfOutput yang diharapkan:
pod "nginx-dynamic-5c74594ccb-zl9pf" deletedDi jendela terminal lain, jalankan perintah berikut untuk memantau proses penghapusan dan pembuatan ulang pod:
kubectl get pod -w -l app=nginxOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 6m48s nginx-dynamic-5c74594ccb-zl9pf 2/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Init:0/1 0 0s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-45sd4 0/2 PodInitializing 0 5s nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 22sJalankan perintah berikut untuk melihat nama pod yang dibuat ulang:
kubectl get podOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 2mJalankan perintah berikut untuk melihat file-file di path /data. File dynamic yang Anda buat tidak dihapus. Hal ini menunjukkan bahwa data pada disk cloud yang disediakan secara dinamis bersifat persisten.
kubectl exec nginx-dynamic-5c74594ccb-45sd4 -- ls /dataOutput yang diharapkan:
dynamic lost+found