本部分文档只适用于迁移以Git为源的应用中心应用,编排模板为源的应用迁移问题移步 Q&A部分。
前置条件
(1) 已创建ACK One多集群管理实例, 可参考 开启多集群管理
(2) ACK One多集群管理实例中已接入子集群,可参考 管理关联集群
(3) 已在ACk One多集群管理实例中开启GitOps, 可参考 GitOps使用快速入门
步骤一: 下载argocd CLI并访问应用中心主控实例
(1) 访问ArgoCD,下载安装最新的argocd CLI。
(2) 使用argocd CLI 访问应用中心主控实例
导入环境变量:
$ export ARGOCD_OPTS='--port-forward-namespace appcenter --plaintext'
查看应用列表,示例如下:
$ argocd app list NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET appcenter/gitops-demo https://192.168.0.244:6443 gitops default Synced Healthy <none> <none> git@github.com:haoshuwei/gitops-demo-private.git helm main
获取需要迁移的应用名称为gitops-demo, 使用的repo为git@github.com:haoshuwei/gitops-demo-private.git,应用部署在目标集群 https://192.168.0.244:6443
步骤二: 导出应用Manifest
(1) 导出应用Application CR Manifests,示例如下:
$ kubectl -n appcenter get application gitops-demo -oyaml > gitops-demo.yaml
(2) 导出应用使用的repo secret,示例如下:
查看repo secret列表:
$ kubectl -n appcenter get secret -l argocd.argoproj.io/secret-type=repository NAME TYPE DATA AGE repo-3914117193 Opaque 5 50m
根据步骤一中应用gitops-demo使用的repo url为git@github.com:haoshuwei/gitops-demo-private.git,确认需要导出的repo secret名称,查看repo secret信息如下所示:
$ kubectl -n appcenter get secret repo-3914117193 -o jsonpath="{.data.url}" | base64 -d git@github.com:haoshuwei/gitops-demo-private.git
确认并导出名称为repo-3914117193的repo secret:
$ kubectl -n appcenter get secret repo-3914117193 -oyaml > repo-3914117193.yaml
步骤三: 下载argocd CLI并访问ACK One主控实例
(1) 请参考 通过ArgoCD CLI方式访问ACK One GitOps 。
(2) 查看子集群信息,示例如下:
$ argocd cluster list SERVER NAME VERSION STATUS MESSAGE PROJECT https://<apiserver>:6443 <clusterid>-ack-production-oversea 1.24+ Successful https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.
步骤四: 导入应用Manifest到ACK One主控实例
(1)修改步骤二中导出的gitops-demo.yaml 和repo-3914117193.yaml 文件:
请确认gitops-demo.yaml 中的 {.spec.destination.server} server地址与步骤三ACK One实例中列出的目标集群的server地址是否一致(通常是公网地址或内网地址的区别),若不一致,则执行以下shell命令进行修改,示例如下:
$ sed -i "s/192.168.0.244/<请替换为ACK One实例中集群server ip地址>/g" gitops-demo.yaml
修改 gitops-demo.yaml 中的namespace 为argocd,示例如下:
$ sed -i "s/namespace: appcenter/namespace: argocd/g" gitops-demo.yaml
修改 repo-3914117193.yaml 中的namespace 为argocd,示例如下:
$ sed -i "s/namespace: appcenter/namespace: argocd/g" repo-3914117193.yaml
(2) 导入repo Manifests到ACK One主控实例
导入 repo-3914117193.yaml
$ kubectl apply -f repo-3914117193.yaml
查看repo是否已导入,并确认STATUS为Successful(表示连接repo成功):
$ argocd repo list TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT git gitops-demo-private git@github.com:haoshuwei/gitops-demo-private.git true false false false Successful
(3) 导入application Manifests到ACK One主控实例
导入 gitops-demo.yaml
$ kubectl apply -f gitops-demo.yaml
查看application列表,并确认应用状态是否与应用中心一致:
$ argocd app list NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET gitops-demo https://<apiserver>:6443 gitops default Synced Healthy <none> <none> git@github.com:haoshuwei/gitops-demo-private.git helm main
步骤五:从应用中心移除应用
在应用中心主控实例中,通过以下命令移除Application:
$ argocd app delete gitops-demo --cascade=false
注意: 必须要使用参数--cascade=false,否则会导致实际运行在目标集群中的k8s资源跟随该Application一起被删除。
至此,您已成功完成应用中心迁移应用至ACKOne GitOps实践向导。
Q&A
(1)编排模版源的应用如何迁移?
ACK One GitOps跟随Argocd开源社区进行功能迭代,只支持以Git为源的应用创建和管理。 如果您在应用中心的应用使用编排模板为源,则需要先手动将编排模板迁移为Git源,再使用Git源在ACK One GitOps系统中发布该应用,最后按照步骤五移除应用中心应用。
(2)编排模版源的应用触发器如何替换?
应用中心触发器只支持编排模版源的应用,在ACK One GitOps系统中,Git源的应用则使用image-updater自动更新应用镜像。如何使用image-updater自动更新应用镜像请参考文档:https://developer.aliyun.com/article/1122570?groupCode=kubernetes
(3)应用中心使用image-updater自动更新的应用如何迁移ACK One GitOps?
完成本文步骤一到步骤五的迁移步骤后,还需要在ACK One主控实例中配置访问ACR和Git仓库的凭证:
配置访问ACR的凭证:
$ kubectl -n argocd apply -f - <<EOF apiVersion: v1 kind: Secret metadata: name: acr type: Opaque stringData: acr: <your_username>:<your_password> # 将<your_username>:<your_password>更换为您自己的容器镜像仓库访问凭证。 EOF
配置访问Git仓库的凭证:
$ kubectl -n argocd create secret generic git-creds \ --from-literal=username=<your_username> \ --from-literal=password=<your_password>
更新应用Application中的annotaion argocd-image-updater.argoproj.io/write-back-method,示例:
metadata: annotations: argocd-image-updater.argoproj.io/write-back-method: git:secret:argocd/git-creds
即更新 git:secret:<modify from appcenter to argocd>/git-creds 中的命名空间appcenter为argocd