更換 Kubernetes Storage Class 所使用的 NAS


最近我們在 kubernetes 集群上部署 rabbitmq 時遇到一個場景,需要將 rabbitmq 使用的 persistent volume 從阿里雲性能型 nas 切換為極速型 nas,因為只有極速型 nas 才支持快照與備份功能。

Persistent volume 是基於 kubernets dynamic volume provisioning 創建的,這篇博文分享一下我們的操作步驟。

修改 StorageClass

需要修改的參數是 server,但 kubernetes 不允許直接通過 kubectl edit 命令修改,會報錯"Forbidden: updates to parameters are forbidden",只能通過資源清單文件強制替換。

資源清單:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-nas-production-pvs
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath
  server: xxxxxx.cn-hangzhou.extreme.nas.aliyuncs.com:/production/k8s-pvs/
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain

強制替換 StorageClass 的命令:

 kubectl replace -f nas-production-pvs.yaml --force

修改 PersistentVolumeClaim

PersistentVolumeClaim 也不讓直接修改,會報錯"Forbidden: spec.persistentvolumesource is immutable after creation",也需要采用資源清單文件強制替換的方式。

導出已有 pvc 的資源清單

kubectl get pvc data-rabbitmq-0 -o yaml > data-rabbitmq-0.yaml

刪除 data-rabbitmq-0.yaml 中的 status、volumeMode、volumeName 部分,得到下面的資源清單文件

piVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
    volume.beta.kubernetes.io/storage-provisioner: nasplugin.csi.alibabacloud.com
  labels:
    app.kubernetes.io/instance: rabbitmq
    app.kubernetes.io/name: rabbitmq
  name: data-rabbitmq-0
  namespace: production
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
  storageClassName: sc-nas-production-pvs

然后用這個 yaml 文件強制替換已有的 pvc

kubectl replace -f data-rabbitmq-0.yaml --force

Dynamic volume provisioning 會自動基於新的 nas 創建 PersistentVolume

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                                    STORAGECLASS            REASON   AGE
nas-d0c28e12-39b5-4b4f-b893-03dd28d1cef8   8Gi        RWO            Retain           Bound      production/redis-data-redis-master-0     sc-nas-production-pvs            174d

注:在此期間需要重啟 rabbitmq 的 pods

kubectl rollout restart statefulset/rabbitmq
遷移數據文件
  • 將原 nas 中的 rabbitmq 數據文件復制到新 nas 中
cp -r /nas/k8s-pvs/nas-f17c6bb8-5848-46a7-97bb-80c1fa52a619/* /nas-k8s/production/k8s-pvs/nas-e4324c56-af56-440b-a530-6671b3bfe879

重啟 rabbitmq 的 pods 以使用新的數據文件

kubectl rollout restart statefulset/rabbitmq

注:遷移數據文件這一步由於操作時 rabbitmq 中沒有實際數據,所以不能確定這樣遷移是否切實可行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM