资源更新适配
镜像更新适配
由于本例使用的Wordpress和MySQL镜像均可从SWR正常拉取,因此不会出现镜像拉取失败(ErrImagePull)问题。如迁移应用为私有镜像,请执行以下步骤完成镜像更新适配。
- 将镜像资源迁移至容器镜像服务(SWR),具体步骤请参考客户端上传镜像。
- 登录SWR控制台查看获取迁移后的镜像地址。
镜像地址格式如下:
'swr.{区域}.myhuaweicloud.com/{所属组织名称}/{镜像名称}:{版本名称}'
- 使用如下命令对工作负载进行修改,并将YAML文件中的image字段替换成迁移后的镜像地址。
kubectl edit deploy wordpress
- 查看应用实例运行情况。
访问服务更新适配
集群迁移后,原有集群的访问服务可能无法生效,可执行如下步骤更新服务。如原集群中设置了Ingress资源,迁移后需重新对接ELB,您可参考添加Ingress-对接已有ELB。
- 通过kubectl连接集群。
- 编辑对应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地址
- 浏览器访问查看服务是否可用。
StorageClass更新适配
由于集群的存储基础设施不同,迁移后的集群将无法正常挂载存储卷,您可执行以下方法的任意一种来完成存储卷的更新适配。
两种StorageClass的适配方法均需在目标集群中于恢复应用前完成,否则可能出现PV数据资源无法恢复的情况,此时在完成StorageClass适配后使用Velero重新恢复应用即可,请参考目标集群应用恢复。
方式一:创建ConfigMap映射
- 在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}
- 执行以下命令,应用上述的 ConfigMap 配置。
$ kubectl create -f change-storage-class.yaml configmap/change-storageclass-plugin-config created
方式二:创建同名StorageClass
- 查询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
极速文件存储
- 通过如下命令将所需的StorageClass详细信息输出为YAML格式。
kubectl get sc <storageclass-name> -o=yaml
- 复制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。
- 参考目标集群应用恢复进行集群应用恢复,检查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所在安全组入方向规则已对集群放通,否则将连接失败。
- 登录RDS控制台,在该实例的“基本信息”页面获取其“内网地址”及端口。
- 使用如下命令对Wordpress工作负载进行修改。
kubectl edit deploy wordpress
设置env字段下的环境变量:
- WORDPRESS_DB_HOST:数据库的访问地址和端口,即上一步中获取的内网地址及端口。
- WORDPRESS_DB_USER:访问数据库的用户名。
- WORDPRESS_DB_PASSWORD:访问数据库的密码。
- WORDPRESS_DB_NAME:需要连接的数据库名。
- 检查RDS数据库是否正常连接。