Ketika kontainer dalam layanan stateful gagal, datanya dapat hilang. Penyimpanan persisten mencegah kehilangan data tersebut. Topik ini menjelaskan cara menggunakan volume cloud disk yang disediakan secara statis untuk penyimpanan persisten.
Prasyarat
Selesaikan tugas-tugas berikut:
Informasi latar belakang
Kasus penggunaan umum untuk cloud disk meliputi:
-
Layanan penyimpanan data yang memerlukan I/O disk tinggi dan tidak memerlukan berbagi data, seperti MySQL dan Redis.
-
Penulisan log berkecepatan tinggi.
-
Mempertahankan data melebihi siklus hidup Pod.
Jika Anda memiliki cloud disk yang sudah ada, gunakan volume yang disediakan secara statis.
Untuk menggunakan volume cloud disk yang disediakan secara statis, Anda harus membuat Persistent Volume (PV) dan Persistent Volume Claim (PVC) secara manual. Untuk informasi selengkapnya, lihat Gunakan volume cloud disk yang disediakan secara statis.
Batasan
-
Cloud disk tidak dapat dibagikan dan hanya dapat dipasang ke satu Pod dalam satu waktu.
-
Cloud disk hanya dapat dipasang ke node yang berada di zona yang sama.
Buat PV
-
Buat file bernama pv-static.yaml.
apiVersion: v1 kind: PersistentVolume metadata: name: <your-disk-id> labels: alicloud-pvname: <your-disk-id> failure-domain.beta.kubernetes.io/zone: <your-zone> failure-domain.beta.kubernetes.io/region: <your-region> spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce flexVolume: driver: "alicloud/disk" fsType: "ext4" options: volumeId: "<your-disk-id>"Catatan-
alicloud-pvname: <your-disk-id>: Nama PV, yang harus sama dengan ID cloud disk Anda. -
failure-domain.beta.kubernetes.io/zone: <your-zone>: Zona tempat cloud disk berada. Contohnya, cn-hangzhou-b. -
failure-domain.beta.kubernetes.io/region: <your-region>: Wilayah tempat cloud disk berada. Contohnya, cn-hangzhou.
Jika kluster Anda mencakup beberapa zona, Anda harus menentukan
failure-domain.beta.kubernetes.io/zonedanfailure-domain.beta.kubernetes.io/region. Hal ini memastikan Pod dijadwalkan ke zona yang sama dengan cloud disk. -
-
Jalankan perintah berikut untuk membuat PV.
kubectl create -f pv-static.yamlVerification Result
Masuk ke Container Service Management Console.
-
Di panel navigasi sebelah kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster target, atau klik Details di kolom Actions.
-
Di panel navigasi sebelah kiri halaman manajemen kluster, pilih . Anda dapat melihat PV yang baru dibuat dalam daftar. Kapasitasnya adalah 20Gi, mode aksesnya adalah ReadWriteOnce, kebijakan reclaim-nya adalah Retain, dan statusnya adalah Available. PV akan diikat ke Persistent Volume Claim pvc-disk di namespace default. Kolom Actions menyediakan opsi untuk Manage Tags, View YAML, dan Delete.
Buat PVC
-
Buat file bernama pvc-static.yaml.
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi selector: matchLabels: alicloud-pvname: <your-disk-id> -
Jalankan perintah berikut untuk membuat PVC.
kubectl create -f pvc-static.yamlVerification Result
Masuk ke Container Service Management Console.
-
Di panel navigasi sebelah kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster target, atau klik Details di kolom Actions.
-
Di panel navigasi sebelah kiri halaman manajemen kluster, pilih .
-
Pada halaman Persistent Volume Claims, Anda dapat melihat PVC yang telah Anda buat.
Buat aplikasi
-
Buat file bernama static.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-static 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: pvc-disk -
Jalankan perintah berikut untuk membuat aplikasi.
kubectl create -f static.yamlVerification Result
Masuk ke Container Service Management Console.
-
Di panel navigasi sebelah kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster target, atau klik Details di kolom Actions.
-
Di panel navigasi sebelah kiri halaman manajemen kluster, pilih .
-
Pada halaman Deployments, Anda dapat melihat aplikasi yang telah Anda buat.
Verifikasi persistensi data
-
Jalankan perintah berikut untuk mendapatkan nama Pod aplikasi.
kubectl get pod | grep staticOutput yang diharapkan:
nginx-static-78c7dcb9d7-g**** 2/2 Running 0 32s -
Jalankan perintah berikut untuk memverifikasi bahwa cloud disk dipasang ke path /data.
kubectl exec nginx-static-78c7dcb9d7-g**** -- df | grep dataOutput yang diharapkan:
/dev/vdf 20511312 45080 20449848 1% /data -
Jalankan perintah berikut untuk menampilkan daftar file di path /data.
kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /dataOutput yang diharapkan:
lost+found -
Jalankan perintah berikut untuk membuat file bernama static di path /data.
kubectl exec nginx-static-78c7dcb9d7-g**** -- touch /data/static -
Jalankan perintah berikut untuk menampilkan daftar file di path /data.
kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /dataOutput yang diharapkan:
static lost+found -
Jalankan perintah berikut untuk menghapus Pod bernama
nginx-static-78c7dcb9d7-g****.kubectl delete pod nginx-static-78c7dcb9d7-g****Output yang diharapkan:
pod "nginx-static-78c7dcb9d7-g****" deleted -
Di jendela terminal terpisah, jalankan perintah berikut untuk memantau Kubernetes saat menghapus dan membuat ulang Pod.
kubectl get pod -w -l app=nginxOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-g**** 2/2 Running 0 50s nginx-static-78c7dcb9d7-g**** 2/2 Terminating 0 72s nginx-static-78c7dcb9d7-h**** 0/2 Pending 0 0s nginx-static-78c7dcb9d7-h**** 0/2 Pending 0 0s nginx-static-78c7dcb9d7-h**** 0/2 Init:0/1 0 0s nginx-static-78c7dcb9d7-g**** 0/2 Terminating 0 73s nginx-static-78c7dcb9d7-h**** 0/2 Init:0/1 0 5s nginx-static-78c7dcb9d7-g**** 0/2 Terminating 0 78s nginx-static-78c7dcb9d7-g**** 0/2 Terminating 0 78s nginx-static-78c7dcb9d7-h**** 0/2 PodInitializing 0 6s nginx-static-78c7dcb9d7-h**** 2/2 Running 0 8s -
Jalankan perintah berikut untuk mendapatkan nama Pod yang dibuat ulang.
kubectl get podOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-h**** 2/2 Running 0 14s -
Jalankan perintah berikut untuk menampilkan daftar file di path /data. File static yang Anda buat masih ada, yang membuktikan bahwa data pada cloud disk yang disediakan secara statis bersifat persisten.
kubectl exec nginx-static-78c7dcb9d7-h**** -- ls /dataOutput yang diharapkan:
static lost+found