ACK One GitOps基于开源社区ArgoCD构建,不支持通过编排模板创建应用。为了迁移通过编排模板创建的应用,您需要首先将编排模板提交到Git仓库中,之后创建GitOps应用,然后从Git仓库中获取编排模板,将GitOps应用下发到关联集群中。后续应用变更时,您可以在Git仓库中更新编排模板,GitOps应用将通过自动或者手动的方式更新下发到关联集群中。本文通过示例介绍如何将通过编排模板创建的应用迁移至ACK One GitOps。
索引
前提条件
已开启多集群管理功能。具体操作,请参见开启多集群管理。
已从ACK One控制台获取主控实例的KubeConfig,并通过kubectl连接至主控实例。
已在主控实例中开启GitOps功能,并通过ArgoCD CLI登录系统。具体操作,请参见在ACK One主控实例中开启GitOps。
已从容器服务管理控制台的应用中心页面获取待迁移的应用中心主控集群,并获取集群的KubeConfig,通过kubectl连接至应用中心主控集群。
步骤一:从应用中心获取待迁移应用的信息
登录容器服务管理控制台,在左侧导航栏选择 。
在应用中心页面,获取待迁移应用的信息。
在主控集群下拉列表中,选择应用所在的主控集群。
找到待迁移的应用,单击左侧箭头,展开应用详情。
获取应用的目标集群的名称,在目标集群右侧,单击查看YAML,获取集群的编排模板。
此处需要获取所有目标集群的编排模板。
步骤二:在ACK One主控实例中添加关联集群
步骤三:将编排模板添加到Git仓库中
建议您创建新的Git仓库用于存储编排模板,也支持自行选择已有的Git仓库。
步骤四:迁移应用
通过ArgoCD CLI访问应用中心主控集群。
在应用中心主控集群中执行以下命令,导入环境变量。
export ARGOCD_OPTS='--port-forward-namespace appcenter --plaintext'
在应用中心主控集群中执行以下命令,查看应用列表。
argocd app list | grep application1
预期输出:
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET application1-451a02 https://8.217.XX.XX:6443 default default Synced Healthy <none> <none> aliyun.com HEAD application1-46b9bb https://172.17.XX.XX:6443 default default Synced Healthy <none> <none> aliyun.com HEAD
预期输出表明,应用application1对应了2个ArgoCD Application,每个ArgoCD Application对应一个目标集群,同时获取每个目标集群的API Server地址。
在ACK One主控实例中执行以下命令,获取ACK One主控实例中关联集群的API Server地址。
argocd cluster list
预期输出:
SERVER NAME VERSION STATUS MESSAGE PROJECT https://172.17.XX.XX:6443 c03a223407a044cc7b0a9cc1c0a45****-cluster-hk 1.24+ Successful https://172.17.XX.XX:6443 c3f218b3af71b44c189485abd4846****-cluster-hk-1 Unknown Cluster has no applications and is not being monitored. https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.
在ACK One主控实例中执行以下命令,导出其中一个名为
application1-451a02
的ArgoCD Application的Manifests,应用的目标集群为cluster-hk
。kubectl -n appcenter get application application1-451a02 -oyaml > application1-cluster-hk.yaml
修改上一步导出的application1-cluster-hk.yaml文件。
由于
application1-451a02
的目标集群为cluster-hk
,对应的Server地址为https://8.217.XX.XX:6443
,而与ACK One主控实例中对应的cluster-hk
关联集群的Server地址为https://172.17.XX.XX:6443
,两者不一致,所以需要执行以下命令,将其修改为主控实例的Server地址。sed -i "s/8.217.XX.XX/172.17.XX.XX/g" application1-cluster-hk.yaml
执行以下Shell命令,修改application1-cluster-hk.yaml中的Namespace为argocd。
sed -i "s/namespace: appcenter/namespace: argocd/g" application1-cluster-hk.yaml
执行以下Shell命令,修改application1-cluster-hk.yaml中的应用名称为application1-cluster-hk。
sed -i "s/name: application1-451a02/name: application1-cluster-hk/g" application1-cluster-hk.yaml
修改application1-cluster-hk.yaml中的spec.source字段,将应用源修改为步骤三使用的Git仓库。
修改前YAML示例如下:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: application1-cluster-hk namespace: appcenter spec: destination: namespace: default server: https://172.17.XX.XX:6443 project: default # 当前配置是ACK编排模版,需要修改为Git仓库配置。 source: repoURL: aliyun.com targetRevision: HEAD template: aliUID: "14****01" id: 3e****af
修改后YAML示例如下:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: application1-cluster-hk namespace: appcenter spec: destination: namespace: default server: https://172.17.XX.XX:6443 project: default # 修改后,此处配置为Git仓库。 source: # Git仓库中的目录。 path: application1/cluster-hk # Git仓库地址,可通过argocd repo list查看。 repoURL: https://github.com/AliyunContainerService/gitops-demo # Git仓库的分支名称。 targetRevision: one-demo
删除application1-cluster-hk.yaml中
status
的所有内容。
导入Application Manifests至ACK One主控实例。
在ACK One主控实例中执行以下命令,导入application1-cluster-hk.yaml文件。
kubectl apply -f application1-cluster-hk.yaml
在ACK One主控实例中执行以下命令,查看Application列表并确认应用状态。
argocd app list
预期输出:
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET application1-cluster-hk https://172.17.XX.XX:6443 default default OutOfSync Healthy <none> SharedResourceWarning(2) https://github.com/AliyunContainerService/gitops-demo application1/cluster-hk one-demo
在应用中心主控集群中执行以下命令,移除应用中心的应用。
重要以下命令行中,必须使用参数
--cascade=false
,否则在移除应用时,实际运行在目标集群中的K8s资源会随之被移除。argocd app delete application1-451a02 --cascade=false
在ACK One主控实例中执行以下命令,同步应用并查看确认应用状态为
Synced
。argocd app sync application1-cluster-hk
预期输出:
argocd app list NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET application1-cluster-hk https://172.17.XX.XX:6443 default default Synced Healthy <none> <none> https://github.com/AliyunContainerService/gitops-demo application1/cluster-hk one-demo