zoukankan      html  css  js  c++  java
  • 更换 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 中没有实际数据,所以不能确定这样迁移是否切实可行。

  • 相关阅读:
    58:二叉树的下一个节点
    57:删除链表中重复的结点
    56:链表中环的入口结点
    55:字符流中第一个不重复的字符
    54:表示数值的字符串
    53:正则表达式匹配
    52:构建成绩数组
    51:数组中重复的数字
    每个努力奋斗过的人,被不公正的际遇砸了满头包的时候,都有那么一瞬间的代入感。出生就是hard模式的人,早已经历了太多的劳其筋骨饿其体肤,再多的人为考验只会摧毁人对美好的向往。
    ClientValidationEnabled
  • 原文地址:https://www.cnblogs.com/dudu/p/15637344.html
Copyright © 2011-2022 走看看