K8S中手动扩容云盘数据卷
介紹:
云盤(pán)數(shù)據(jù)卷擴(kuò)容包括以下幾個(gè)部分:
云盤(pán)物理空間擴(kuò)容,需要在云盤(pán)控制臺(tái)操作;
文件系統(tǒng)擴(kuò)容,需要掛載云盤(pán)到一個(gè)物理節(jié)點(diǎn)手動(dòng)操作;
PV、PVC Size更新,需要更新StorageClass、PVC;
注意:擴(kuò)容云盤(pán)前需要為云盤(pán)打快照,以預(yù)防升級(jí)失敗導(dǎo)致數(shù)據(jù)丟失;
云盤(pán)目前無(wú)法做到在線擴(kuò)容,需要重啟應(yīng)用才可以實(shí)現(xiàn),可以通過(guò)兩種方法實(shí)現(xiàn)云盤(pán)擴(kuò)容。下面以集群中部署Zookeeper為例介紹兩種擴(kuò)容方式,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暫停應(yīng)用方式:
如果應(yīng)用可以暫停服務(wù),可以先停掉應(yīng)用(刪除),手動(dòng)對(duì)每個(gè)依賴數(shù)據(jù)盤(pán)進(jìn)行擴(kuò)容,然后再啟動(dòng)應(yīng)用。缺點(diǎn)是:應(yīng)用會(huì)暫停一定時(shí)間;
上面應(yīng)用使用了3個(gè)20Gi的云盤(pán),分別掛載在3個(gè)pod上。目標(biāo)為把三個(gè)云盤(pán)擴(kuò)容到30Gi,主要步驟:
1. 刪除應(yīng)用:
刪除zookeeper statefulset對(duì)象;
# 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. 云盤(pán)擴(kuò)容:
根據(jù)云盤(pán)文檔,分別對(duì)3塊云盤(pán)進(jìn)行擴(kuò)容:
https://help.aliyun.com/document_detail/113316.html
https://help.aliyun.com/document_detail/25452.html
注意:擴(kuò)容云盤(pán)的同時(shí)也要完成對(duì)文件系統(tǒng)的擴(kuò)容。
4. 擴(kuò)容PV、PVC
編輯pvc、pv所使用的StorageClass,配置allowVolumeExpansion: true標(biāo)簽;
# 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可見(jiàn)pv的大小已經(jīng)更新為30Gi,pvc的大小會(huì)在Pod啟動(dòng)后自動(dòng)更新;
5. 重新創(chuàng)建應(yīng)用:
# 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上面輸出日志可以看出,文件系統(tǒng)已經(jīng)擴(kuò)容到30G,pv pvc的size也擴(kuò)容到30G;
逐個(gè)Pod升級(jí)方式:
由多個(gè)Pod運(yùn)行的服務(wù),可以通過(guò)一個(gè)一個(gè)pod升級(jí)的方式實(shí)現(xiàn)業(yè)務(wù)不中斷,而只是Running pod數(shù)量暫時(shí)減少。
還是以zookeeper為例,使用3個(gè)20Gi的云盤(pán),分別掛載在3個(gè)pod上。目標(biāo)為把三個(gè)云盤(pán)擴(kuò)容到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,對(duì)應(yīng)的PV為d-8vbhscszlr47tgn0eheb;
更新PV Label,
如果pv中已經(jīng)有如下label,則把zone對(duì)應(yīng)的值改為”原來(lái)value -none“,即配置一個(gè)不存在的zone,讓pod無(wú)法調(diào)度成功;
如果pv中沒(méi)有如下label,則添加這些lables到pv;
刪除Pod:zookeeper-default-zookeeper-0
# kubectl delete pod zookeeper-default-zookeeper-0這時(shí)刪除的pod一直處于Pending狀態(tài):
# 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. 云盤(pán)擴(kuò)容:
根據(jù)云盤(pán)文檔,分別對(duì)3塊云盤(pán)進(jìn)行庫(kù)容:
https://help.aliyun.com/document_detail/113316.html
https://help.aliyun.com/document_detail/25452.html
注意:擴(kuò)容云盤(pán)的同時(shí)也要完成對(duì)文件系統(tǒng)的擴(kuò)容。
4. 擴(kuò)容PV、PVC
編輯pvc、pv所使用的StorageClass,配置allowVolumeExpansion: true標(biāo)簽;
# 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可見(jiàn)pv的大小已經(jīng)更新為40Gi,pvc的大小會(huì)在Pod啟動(dòng)后自動(dòng)更新;
恢復(fù)PV的Lable,把zoneId的值恢復(fù)之前的value,刪除相應(yīng)labels(若之前沒(méi)有這些labels):
labels:failure-domain.beta.kubernetes.io/region: cn-zhangjiakoufailure-domain.beta.kubernetes.io/zone: cn-zhangjiakou-a檢查容器掛載文件系統(tǒng)大小,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可見(jiàn)文件系統(tǒng)、pv、pvc都已經(jīng)實(shí)現(xiàn)了擴(kuò)容;
5. 對(duì)其他pod所對(duì)應(yīng)的pvc、pv、云盤(pán)進(jìn)行上述擴(kuò)容
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的K8S中手动扩容云盘数据卷的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5G的7大用途,你知道几个?
- 下一篇: K8S从懵圈到熟练 - 我们为什么会删除