K8S中手动扩容云盘数据卷
介紹:
云盤數據卷擴容包括以下幾個部分:
云盤物理空間擴容,需要在云盤控制臺操作;
文件系統擴容,需要掛載云盤到一個物理節點手動操作;
PV、PVC Size更新,需要更新StorageClass、PVC;
注意:擴容云盤前需要為云盤打快照,以預防升級失敗導致數據丟失;
云盤目前無法做到在線擴容,需要重啟應用才可以實現,可以通過兩種方法實現云盤擴容。下面以集群中部署Zookeeper為例介紹兩種擴容方式,Zookeeper集群如下:
# kubectl get pod NAME READY STATUS RESTARTS AGE zookeeper-default-zookeeper-0 1/1 Running 0 2m55s zookeeper-default-zookeeper-1 1/1 Running 0 2m14s zookeeper-default-zookeeper-2 1/1 Running 0 94s# kubectl get pvc| grep zoo datadir-zookeeper-default-zookeeper-0 Bound d-8vb5teafaoa80ia7affg 20Gi RWO alicloud-disk-efficiency 3m12s datadir-zookeeper-default-zookeeper-1 Bound d-8vb60faf6epslbctnzka 20Gi RWO alicloud-disk-efficiency 2m31s datadir-zookeeper-default-zookeeper-2 Bound d-8vbidmq57w4df6k84zem 20Gi RWO alicloud-disk-efficiency 111s# kubectl get pv| grep zoo d-8vb5teafaoa80ia7affg 20Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-0 alicloud-disk-efficiency 3m17s d-8vb60faf6epslbctnzka 20Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-1 alicloud-disk-efficiency 2m33s d-8vbidmq57w4df6k84zem 20Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-2 alicloud-disk-efficiency 107s暫停應用方式:
如果應用可以暫停服務,可以先停掉應用(刪除),手動對每個依賴數據盤進行擴容,然后再啟動應用。缺點是:應用會暫停一定時間;
上面應用使用了3個20Gi的云盤,分別掛載在3個pod上。目標為把三個云盤擴容到30Gi,主要步驟:
1. 刪除應用:
刪除zookeeper statefulset對象;
# kubectl delete sts zookeeper-default-zookeeper# kubectl get pvc | grep zoo datadir-zookeeper-default-zookeeper-0 Bound d-8vb6ie0kwtyynpf4gu4l 20Gi RWO alicloud-disk-efficiency 22m datadir-zookeeper-default-zookeeper-1 Bound d-8vbhscszlr47rbot0boc 20Gi RWO alicloud-disk-efficiency 21m datadir-zookeeper-default-zookeeper-2 Bound d-8vb444t0f8xnicj9c2ov 20Gi RWO alicloud-disk-efficiency 21m# kubectl get pv | grep zoo d-8vb444t0f8xnicj9c2ov 20Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-2 alicloud-disk-efficiency 21m d-8vb6ie0kwtyynpf4gu4l 20Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-0 alicloud-disk-efficiency 22m d-8vbhscszlr47rbot0boc 20Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-1 alicloud-disk-efficiency 21m2.3. 云盤擴容:
根據云盤文檔,分別對3塊云盤進行擴容:
https://help.aliyun.com/document_detail/113316.html
https://help.aliyun.com/document_detail/25452.html
注意:擴容云盤的同時也要完成對文件系統的擴容。
4. 擴容PV、PVC
編輯pvc、pv所使用的StorageClass,配置allowVolumeExpansion: true標簽;
# kubectl edit sc alicloud-disk-efficiency# kubectl get sc alicloud-disk-efficiency -o yaml allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:creationTimestamp: "2019-09-05T12:30:27Z"name: alicloud-disk-efficiencyresourceVersion: "1675896"selfLink: /apis/storage.k8s.io/v1/storageclasses/alicloud-disk-efficiencyuid: f1071bcc-cfd8-11e9-81cd-00163e0804c2 parameters:type: cloud_efficiency provisioner: alicloud/disk reclaimPolicy: Delete volumeBindingMode: Immediate更新PVC的Size為30Gi:
# kubectl patch pvc datadir-zookeeper-default-zookeeper-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}' persistentvolumeclaim/datadir-zookeeper-default-zookeeper-0 patched # kubectl patch pvc datadir-zookeeper-default-zookeeper-1 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}' persistentvolumeclaim/datadir-zookeeper-default-zookeeper-1 patched # kubectl patch pvc datadir-zookeeper-default-zookeeper-2 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}' persistentvolumeclaim/datadir-zookeeper-default-zookeeper-2 patched# kubectl get pvc | grep zoo datadir-zookeeper-default-zookeeper-0 Bound d-8vb6ie0kwtyynpf4gu4l 20Gi RWO alicloud-disk-efficiency 51m datadir-zookeeper-default-zookeeper-1 Bound d-8vbhscszlr47rbot0boc 20Gi RWO alicloud-disk-efficiency 50m datadir-zookeeper-default-zookeeper-2 Bound d-8vb444t0f8xnicj9c2ov 20Gi RWO alicloud-disk-efficiency 49m# kubectl get pv | grep zoo d-8vb444t0f8xnicj9c2ov 30Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-2 alicloud-disk-efficiency 49m d-8vb6ie0kwtyynpf4gu4l 30Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-0 alicloud-disk-efficiency 51m d-8vbhscszlr47rbot0boc 30Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-1 alicloud-disk-efficiency 50m可見pv的大小已經更新為30Gi,pvc的大小會在Pod啟動后自動更新;
5. 重新創建應用:
# kubectl get pod NAME READY STATUS RESTARTS AGE zookeeper-default-zookeeper-0 1/1 Running 0 94s zookeeper-default-zookeeper-1 1/1 Running 0 64s zookeeper-default-zookeeper-2 1/1 Running 0 39s# kubectl exec -ti zookeeper-default-zookeeper-0 sh # df -h |grep zoo /dev/vdb 30G 45M 30G 1% /var/lib/zookeeper# kubectl get pvc | grep zoo datadir-zookeeper-default-zookeeper-0 Bound d-8vb6ie0kwtyynpf4gu4l 30Gi RWO alicloud-disk-efficiency 56m datadir-zookeeper-default-zookeeper-1 Bound d-8vbhscszlr47rbot0boc 30Gi RWO alicloud-disk-efficiency 56m datadir-zookeeper-default-zookeeper-2 Bound d-8vb444t0f8xnicj9c2ov 30Gi RWO alicloud-disk-efficiency 55m# kubectl get pv | grep zoo d-8vb444t0f8xnicj9c2ov 30Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-2 alicloud-disk-efficiency 55m d-8vb6ie0kwtyynpf4gu4l 30Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-0 alicloud-disk-efficiency 56m d-8vbhscszlr47rbot0boc 30Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-1 alicloud-disk-efficiency 56m上面輸出日志可以看出,文件系統已經擴容到30G,pv pvc的size也擴容到30G;
逐個Pod升級方式:
由多個Pod運行的服務,可以通過一個一個pod升級的方式實現業務不中斷,而只是Running pod數量暫時減少。
還是以zookeeper為例,使用3個20Gi的云盤,分別掛載在3個pod上。目標為把三個云盤擴容到40Gi:
主要步驟:
1. 修改PV的ZoneId
# kubectl get pod zookeeper-default-zookeeper-0 -oyaml | grep pers -C 1- name: datadirpersistentVolumeClaim:claimName: datadir-zookeeper-default-zookeeper-0# kubectl get pvc datadir-zookeeper-default-zookeeper-0 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE datadir-zookeeper-default-zookeeper-0 Bound d-8vbhscszlr47tgn0eheb 20Gi RWO alicloud-disk-efficiency 21m上述日志得出zookeeper-default-zookeeper-0 使用的pvc為:datadir-zookeeper-default-zookeeper-0,對應的PV為d-8vbhscszlr47tgn0eheb;
更新PV Label,
如果pv中已經有如下label,則把zone對應的值改為”原來value -none“,即配置一個不存在的zone,讓pod無法調度成功;
如果pv中沒有如下label,則添加這些lables到pv;
刪除Pod:zookeeper-default-zookeeper-0
# kubectl delete pod zookeeper-default-zookeeper-0這時刪除的pod一直處于Pending狀態:
# kubectl get pod NAME READY STATUS RESTARTS AGE zookeeper-default-zookeeper-0 0/1 Pending 0 9s zookeeper-default-zookeeper-1 1/1 Running 0 24m zookeeper-default-zookeeper-2 1/1 Running 0 24m2.3. 云盤擴容:
根據云盤文檔,分別對3塊云盤進行庫容:
https://help.aliyun.com/document_detail/113316.html
https://help.aliyun.com/document_detail/25452.html
注意:擴容云盤的同時也要完成對文件系統的擴容。
4. 擴容PV、PVC
編輯pvc、pv所使用的StorageClass,配置allowVolumeExpansion: true標簽;
# kubectl edit sc alicloud-disk-efficiency# kubectl get sc alicloud-disk-efficiency -o yaml allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:creationTimestamp: "2019-09-05T12:30:27Z"name: alicloud-disk-efficiencyresourceVersion: "1675896"selfLink: /apis/storage.k8s.io/v1/storageclasses/alicloud-disk-efficiencyuid: f1071bcc-cfd8-11e9-81cd-00163e0804c2 parameters:type: cloud_efficiency provisioner: alicloud/disk reclaimPolicy: Delete volumeBindingMode: Immediate更新PVC的Size為40Gi:
# kubectl patch pvc datadir-zookeeper-default-zookeeper-0 -p '{"spec":{"resources":{"requests":{"storage":"40Gi"}}}}' persistentvolumeclaim/datadir-zookeeper-default-zookeeper-0 patched# kubectl get pvc | grep datadir-zookeeper-default-zookeeper-0 datadir-zookeeper-default-zookeeper-0 Bound d-8vbhscszlr47tgn0eheb 20Gi RWO alicloud-disk-efficiency 29m# kubectl get pv | grep datadir-zookeeper-default-zookeeper-0 d-8vbhscszlr47tgn0eheb 40Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-0 alicloud-disk-efficiency 29m可見pv的大小已經更新為40Gi,pvc的大小會在Pod啟動后自動更新;
恢復PV的Lable,把zoneId的值恢復之前的value,刪除相應labels(若之前沒有這些labels):
labels:failure-domain.beta.kubernetes.io/region: cn-zhangjiakoufailure-domain.beta.kubernetes.io/zone: cn-zhangjiakou-a檢查容器掛載文件系統大小,pv、pvc大小:
# kubectl exec -ti zookeeper-default-zookeeper-0 sh # df -h | grep zoo /dev/vdb 40G 48M 40G 1% /var/lib/zookeeper # kubectl get pvc | grep datadir-zookeeper-default-zookeeper-0 datadir-zookeeper-default-zookeeper-0 Bound d-8vbhscszlr47tgn0eheb 40Gi RWO alicloud-disk-efficiency 33m# kubectl get pv | grep datadir-zookeeper-default-zookeeper-0 d-8vbhscszlr47tgn0eheb 40Gi RWO Delete Bound default/datadir-zookeeper-default-zookeeper-0 alicloud-disk-efficiency 33m可見文件系統、pv、pvc都已經實現了擴容;
5. 對其他pod所對應的pvc、pv、云盤進行上述擴容
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的K8S中手动扩容云盘数据卷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G的7大用途,你知道几个?
- 下一篇: K8S从懵圈到熟练 - 我们为什么会删除