更新时间:2023-11-20 GMT+08:00

资源更新适配

镜像更新适配

由于本例使用的Wordpress和MySQL镜像均可从SWR正常拉取,因此不会出现镜像拉取失败(ErrImagePull)问题。如迁移应用为私有镜像,请执行以下步骤完成镜像更新适配。

  1. 将镜像资源迁移至容器镜像服务(SWR),具体步骤请参考客户端上传镜像
  2. 登录SWR控制台查看获取迁移后的镜像地址。

    镜像地址格式如下:
    'swr.{区域}.myhuaweicloud.com/{所属组织名称}/{镜像名称}:{版本名称}'

  3. 使用如下命令对工作负载进行修改,并将YAML文件中的image字段替换成迁移后的镜像地址。

    kubectl edit deploy wordpress

  4. 查看应用实例运行情况。

访问服务更新适配

集群迁移后,原有集群的访问服务可能无法生效,可执行如下步骤更新服务。如原集群中设置了Ingress资源,迁移后需重新对接ELB,您可参考添加Ingress-对接已有ELB

  1. 通过kubectl连接集群。
  2. 编辑对应Service的YAML文件,修改服务类型及端口。

    kubectl edit svc wordpress
    LoadBanlancer资源进行更新时,需要重新对接ELB。请参考通过kubectl命令行创建-使用已有ELB,添加如下Annotation:
    annotations: 
      kubernetes.io/elb.class: union   #共享型ELB
      kubernetes.io/elb.id: 9d06a39d-xxxx-xxxx-xxxx-c204397498a3    #ELB的ID,可前往ELB控制台查询
      kubernetes.io/elb.subnet-id: f86ba71c-xxxx-xxxx-xxxx-39c8a7d4bb36    #集群所在子网的ID
      kubernetes.io/session-affinity-mode: SOURCE_IP    #开启会话保持,基于源IP地址

  3. 浏览器访问查看服务是否可用。

StorageClass更新适配

由于集群的存储基础设施不同,迁移后的集群将无法正常挂载存储卷,您可执行以下方法的任意一种来完成存储卷的更新适配。

两种StorageClass的适配方法均需在目标集群中于恢复应用前完成,否则可能出现PV数据资源无法恢复的情况,此时在完成StorageClass适配后使用Velero重新恢复应用即可,请参考目标集群应用恢复

方式一:创建ConfigMap映射

  1. 在CCE集群中创建如下所示的ConfigMap,将原集群使用的StorageClass映射到CCE集群默认的StorageClass。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: change-storageclass-plugin-config
      namespace: velero
      labels:
        app.kubernetes.io/name: velero
        velero.io/plugin-config: "true"
        velero.io/change-storage-class: RestoreItemAction
    data:
      {原集群StorageClass name01}: {目标集群StorageClass name01}
      {原集群StorageClass name02}: {目标集群StorageClass name02}

  2. 执行以下命令,应用上述的 ConfigMap 配置。

    $ kubectl create -f change-storage-class.yaml
    configmap/change-storageclass-plugin-config created

方式二:创建同名StorageClass

  1. 查询CCE支持的默认StorageClass。

    kubectl get sc
    回显如下:
    NAME                PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    csi-disk            everest-csi-provisioner         Delete          Immediate              true                   3d23h
    csi-disk-topology   everest-csi-provisioner         Delete          WaitForFirstConsumer   true                   3d23h
    csi-nas             everest-csi-provisioner         Delete          Immediate              true                   3d23h
    csi-obs             everest-csi-provisioner         Delete          Immediate              false                  3d23h
    csi-sfsturbo        everest-csi-provisioner         Delete          Immediate              true                   3d23h
    表1 StorageClass

    StorageClass名称

    对应的存储资源

    csi-disk

    云硬盘

    csi-disk-topology

    延迟绑定的云硬盘

    csi-nas

    文件存储

    csi-obs

    对象存储

    csi-sfsturbo

    极速文件存储

  2. 通过如下命令将所需的StorageClass详细信息输出为YAML格式。

    kubectl get sc <storageclass-name> -o=yaml

  3. 复制YAML文件并创建一个新的StorageClass。

    编辑StorageClass名称,将其命名为原有集群中使用的名称,用于调用云上基础存储资源。

    以csi-obs的YAML文件为例。请删除metadata字段下如斜体部分所示的不必要信息,并修改加粗部分,其余参数不建议修改。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      creationTimestamp: "2021-10-18T06:41:36Z"
      name: <your_storageclass_name>     #命名为原有集群中使用的StorageClass名称
      resourceVersion: "747"
      selfLink: /apis/storage.k8s.io/v1/storageclasses/csi-obs
      uid: 4dbbe557-ddd1-4ce8-bb7b-7fa15459aac7
    parameters:
      csi.storage.k8s.io/csi-driver-name: obs.csi.everest.io
      csi.storage.k8s.io/fstype: obsfs
      everest.io/obs-volume-type: STANDARD
    provisioner: everest-csi-provisioner
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    • 极速文件存储无法通过StorageClass直接创建,您需要前往SFS Turbo控制台创建相同VPC子网下且安全组开放入方向端口(111、445、2049、2051、2052、20048)的极速文件存储。
    • CCE不支持ReadWriteMany的云硬盘存储,在原集群中存在该类型资源时,需要先修改为ReadWriteOnce。

  4. 参考目标集群应用恢复进行集群应用恢复,检查PVC是否创建成功。

    kubectl get pvc
    回显如下,其中VOLUME列为通过StorageClass自动创建的PV名称。
    NAME   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc    Bound    pvc-4c8e655a-1dbc-4897-ae6c-446b502f5e77   5Gi        RWX            local          13s

数据库更新适配

本例中数据库为本地MySQL数据库,迁移后无需重新配置。若您通过数据复制服务DRS将本地数据库迁移至云数据库RDS,则在迁移后需重新配置数据库的访问,请您根据实际情况进行配置。

  • 若云数据库RDS实例与CCE集群处于同一VPC下,则可通过内网地址访问,否则只能通过绑定EIP的方式进行公网访问。建议使用内网访问方式,安全性高,并且可实现RDS的较好性能。
  • 请确认RDS所在安全组入方向规则已对集群放通,否则将连接失败。
  1. 登录RDS控制台,在该实例的“基本信息”页面获取其“内网地址”及端口。
  2. 使用如下命令对Wordpress工作负载进行修改。

    kubectl edit deploy wordpress

    设置env字段下的环境变量:

    • WORDPRESS_DB_HOST:数据库的访问地址和端口,即上一步中获取的内网地址及端口。
    • WORDPRESS_DB_USER:访问数据库的用户名。
    • WORDPRESS_DB_PASSWORD:访问数据库的密码。
    • WORDPRESS_DB_NAME:需要连接的数据库名。

  3. 检查RDS数据库是否正常连接。