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 中没有实际数据,所以不能确定这样迁移是否切实可行。

  • 相关阅读:
    (三)Web模块:【1】Web3.0 新特性之使用注解开发
    (三)Web模块:【7】SpringMVC异步请求
    第四章:(1)Web 开发简介
    (三)Web模块:【2】Web3.0 新特性之异步处理
    (三)Web模块:【5】Servlet3.0 与 SpringMVC 整合
    第三章:(2)SpringBoot 日志使用配置
    第三章:(1)日志框架与SLF4j 使用
    (三)Web模块:【6】定制与接管 SpringMVC
    (三)Web模块:【3】Servlet3.0 新特性之 ServletContainerInitializer
    每日日报8月19日
  • 原文地址:https://www.cnblogs.com/dudu/p/15637344.html
Copyright © 2011-2022 走看看