首頁
容器服務(wù) Kubernetes 版 ACK
容器服務(wù) Kubernetes 版
操作指南
存儲
【已棄用】存儲-Flexvolume
云盤存儲卷
使用云盤靜態(tài)存儲卷實現(xiàn)持久化存儲-Flexvolume
使用云盤靜態(tài)存儲卷實現(xiàn)持久化存儲-Flexvolume
當(dāng)容器發(fā)生宕機故障時,有狀態(tài)服務(wù)容器存儲的業(yè)務(wù)數(shù)據(jù)存在著丟失和不可靠等風(fēng)險。使用持久化存儲可以解決該問題。本文介紹如何使用云盤靜態(tài)存儲卷實現(xiàn)持久化存儲。
前提條件
請確保您已完成以下操作:
背景信息
云盤的使用場景包括:
- 對磁盤I/O要求高的應(yīng)用,且沒有共享數(shù)據(jù)的需求,如MySQL、Redis等數(shù)據(jù)存儲服務(wù)。
- 高速寫日志。
- 持久化存儲數(shù)據(jù),不因Pod生命周期的結(jié)束而消失。
靜態(tài)云盤的使用場景:已經(jīng)購買了云盤實例的情況。
靜態(tài)云盤使用方式:需手動創(chuàng)建PV及PVC。請參見使用云盤靜態(tài)存儲卷。
使用限制
- 云盤為阿里云存儲團隊提供的非共享存儲,只能同時被一個Pod掛載。
- 集群中只有與云盤在同一個可用區(qū)(Zone)的節(jié)點才可以掛載云盤。
創(chuàng)建PV
- 創(chuàng)建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>"
說明alicloud-pvname: <your-disk-id>
:PV的名稱。需要與云盤ID一致。failure-domain.beta.kubernetes.io/zone: <your-zone>
:云盤所在的可用區(qū)。例如:cn-hangzhou-b。failure-domain.beta.kubernetes.io/region: <your-region>
:云盤所在的地域。例如:cn-hangzhou。
failure-domain.beta.kubernetes.io/zone
和failure-domain.beta.kubernetes.io/region
,在多可用區(qū)的情況下,必須配置,可保證您的Pod調(diào)度到云盤所在的可用區(qū)。 - 執(zhí)行以下命令,創(chuàng)建PV。
kubectl create -f pv-static.yaml
驗證結(jié)果- 登錄容器服務(wù)管理控制臺。
- 在控制臺左側(cè)導(dǎo)航欄中,單擊集群。
- 在集群列表頁面中,單擊目標(biāo)集群名稱或者目標(biāo)集群右側(cè)操作列下的詳情。
- 在集群管理頁左側(cè)導(dǎo)航欄中,單擊 ,可以看到剛剛創(chuàng)建的PV。
創(chuàng)建PVC
- 創(chuàng)建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>
- 執(zhí)行以下命令,創(chuàng)建PVC。
kubectl create -f pvc-static.yaml
驗證結(jié)果- 登錄容器服務(wù)管理控制臺。
- 在控制臺左側(cè)導(dǎo)航欄中,單擊集群。
- 在集群列表頁面中,單擊目標(biāo)集群名稱或者目標(biāo)集群右側(cè)操作列下的詳情。
- 在集群管理頁左側(cè)導(dǎo)航欄中,單擊 。
- 在存儲聲明頁面,可以看到剛剛創(chuàng)建的PVC。
創(chuàng)建應(yīng)用
- 創(chuàng)建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
- 執(zhí)行以下命令,創(chuàng)建靜態(tài)應(yīng)用。
kubectl create -f static.yaml
驗證結(jié)果- 登錄容器服務(wù)管理控制臺。
- 在控制臺左側(cè)導(dǎo)航欄中,單擊集群。
- 在集群列表頁面中,單擊目標(biāo)集群名稱或者目標(biāo)集群右側(cè)操作列下的詳情。
- 在集群管理頁左側(cè)導(dǎo)航欄中,選擇 。
- 在無狀態(tài)頁面,可以看到剛剛創(chuàng)建的靜態(tài)應(yīng)用。
靜態(tài)云盤的持久化存儲
- 執(zhí)行以下命令,查看部署的靜態(tài)應(yīng)用所在Pod的名稱。
kubectl get pod | grep static
預(yù)期輸出:
nginx-static-78c7dcb9d7-g**** 2/2 Running 0 32s
- 執(zhí)行以下命令,查看/data路徑下是否掛載了新的云盤。
kubectl exec nginx-static-78c7dcb9d7-g**** -- df | grep data
預(yù)期輸出:
/dev/vdf 20511312 45080 20449848 1% /data
- 執(zhí)行以下命令,查看/data路徑下的文件。
kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /data
預(yù)期輸出:
lost+found
- 執(zhí)行以下命令,在/data路徑下創(chuàng)建文件static。
kubectl exec nginx-static-78c7dcb9d7-g**** -- touch /data/static
- 執(zhí)行以下命令,查看/data路徑下的文件。
kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /data
預(yù)期輸出:
static lost+found
- 執(zhí)行以下命令,刪除名稱為
nginx-static-78c7dcb9d7-g****
的Pod。kubectl delete pod nginx-static-78c7dcb9d7-g****
預(yù)期輸出:
pod "nginx-static-78c7dcb9d7-g****" deleted
- 同時在另一個窗口中,執(zhí)行以下命令,查看Pod刪除及Kubernetes重建Pod的過程。
kubectl get pod -w -l app=nginx
預(yù)期輸出:
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
- 執(zhí)行以下命令,查看Kubernetes重建的Pod名稱。
kubectl get pod
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-h**** 2/2 Running 0 14s
- 執(zhí)行以下命令,查看/data路徑下的文件,剛剛創(chuàng)建的文件static并沒有被刪除,說明靜態(tài)云盤的數(shù)據(jù)可持久保存。
kubectl exec nginx-static-78c7dcb9d7-h6brd -- ls /data
預(yù)期輸出:
static lost+found
文檔內(nèi)容是否對您有幫助?