ACK One GitOps托管并完全兼容ArgoCD相关能力,支持持续迭代,可通过使用Git部署模板代替模板化分发能力。本文介绍如何通过ACK One GitOps控制台或CLI的方式部署应用。
前提条件
已开启舰队管理功能。具体操作,请参见开启舰队管理功能。
舰队的Fleet实例已添加多个关联集群。具体操作,请参见添加关联集群。
已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
已安装最新版阿里云CLI并配置凭证。请参见安装阿里云CLI和配置凭证。如果是RAM用户操作,请确保RAM用户已授予AliyunAdcpFullAccess权限。具体操作,请参见为RAM用户授权。
已通过ArgoCD下载安装最新版本的ArgoCD CLI。
已登录GitOps系统。具体操作,请参见登录GitOps系统。
通过ACK One GitOps部署应用
开启ACK One GitOps后,您可以通过ACK One GitOps(ArgoCD)控制台和ArgoCD CLI两种方式部署管理应用。
通过ACK One GitOps(ArgoCD)控制台部署应用
步骤一:在ArgoCD控制台添加Git Repo并同步至目标集群
在浏览器中输入已获取到的ArgoCD Server域名,访问ArgoCD控制台。关于如何获取域名,请参见登录GitOps系统。
在ArgoCD首页,单击LOGIN VIA ALIYUN,登录ArgoCD控制台。
添加发布源Git Repo。
在左侧导航栏,选择Settings > Repositories,然后单击+ CONNECT REPO。
在弹出面板中配置如下信息,然后单击CONNECT。
添加成功后,该页面会显示Git的CONNECTION STATUS为Successful。
创建ArgoCD Application,并发布应用到目标集群。
在Applications页面,单击+ NEW APP,配置如下信息。 Application将拉取Git Repo中的Helm Chart并部署到目标集群的default命名空间。
配置完成,单击页面上方的CREATE。
创建完成后,在ArgoCD的Applications页面,即可查看echo-server-app的应用状态。
单击目标应用下方的SYNC,将应用同步部署至目标集群。
同步完成后,echo-server-app 应用的Status右侧出现Healthy和Synced,表示应用已同步。单击echo-server,即可查看该应用详情,ArgoCD将展示应用相关Kubernetes资源的拓扑结构及相应的状态。
步骤二:查看应用的实际部署情况
连接Fleet实例的KubeConfig,在Fleet实例中执行命令查看应用的实际部署情况。
执行以下命令,查看Fleet实例已关联的关联集群。
kubectl amc get managedcluster
预期输出:
Name Alias HubAccepted cd**** ackpro-cluster2 true ce**** ackpro-cluster1 true // GitOps部署的目标集群。
执行以下命令,通过
amc -m
参数指定集群,查看default命令空间下的Deployment、Service和Pod资源。kubectl amc get all -n default -m ce****
预期输出:
Run on ManagedCluster ce**** (ackpro-cluster1) NAME READY STATUS RESTARTS AGE pod/echo-server-5cf54bdbcb-jv58k 1/1 Running 0 59m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/echo-server LoadBalancer 192.XX.XX.XX 39.XX.XX.XX 8080:31769/TCP 59m 21d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/echo-server 1/1 1 1 59m
执行以下命令,访问Loadbalancer Service的External-IP,验证应用执行情况。
curl http://39.XX.XX.XX:8080/version
预期输出:
"Hello Echo Server v1.0"
预期输出表明,当前应用版本为v1.0。
步骤三:升级应用版本
将Git中的Image Tag版本v1.0修改为v2.0。
由于Git Repo发生变化,ArgoCD Application会显示OutOfSync。
单击黄色的OutOfSync图标,可以查看详细的区别。
区别如下图所示。
单击SYNC,发起同步,同步完成后,Pod Image Tag变成v2.0,与预期一致。
执行以下命令,访问Service,查看实际版本。
curl http://39.XX.XX.XX:8080/version
预期输出:
"Hello Echo Server v2.0"
预期输出表明,应用版本已升级为v2.0版本。
步骤四:回滚应用版本
版本升级为v2.0后,ArgoCD会保留之前的ReplicaSet,便于快速回滚之前的版本。
在ACK one Fleet实例上执行以下命令,通过
amc -m
参数,查看指定的关联集群的资源状态。kubectl amc get replicaset -n default -m ce****
预期输出:
Run on ManagedCluster ce**** (ackpro-cluster1) NAME DESIRED CURRENT READY AGE echo-server-55664c4677 1 1 1 26m // 版本v2.0。 echo-server-5cf54bdbcb 0 0 0 109m // 版本v1.0。
如需回滚到版本v1.0,可在应用页面,单击HISTORY AND ROLLBACK,查看应用的所有历史版本。
选择对应的v1.0版本进行回滚,然后单击Rollback。
此时,Pod Image Tag已经回滚到v1.0,由于ArgoCD和Git Repo相比出现差异,因此应用状态变为OutOfSync,在问题修复后,单击SYNC发起同步。
说明ArgoCD也支持自动同步Git Repo信息。
通过ArgoCD CLI部署应用
执行以下命令,通过ArgoCD Server域名登录ArgoCD,CLI将打开浏览器完成SSO登录。
argocd login argocd.<ackone cluster id>.<region>.alicontainer.com --sso Opening browser for authentication Performing authorization_code flow login: https://signin.aliyun.com/oauth2/v1/auth?xxx Authentication successful 'root' logged in successfully Context 'argocd.<ackone cluster id>.<region>.alicontainer.com' update
执行以下命令,增加Git Repo。
argocd repo add https://github.com/AliyunContainerService/gitops-demo.git --name echo-server
预期输出:
Repository 'https://github.com/AliyunContainerService/gitops-demo.git' added
执行以下命令,查看Git Repo列表。
argocd repo list
预期输出:
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT git https://github.com/AliyunContainerService/gitops-demo.git false false false false Successful default
执行以下命令,查看集群。
argocd cluster list
预期输出:
SERVER NAME VERSION STATUS MESSAGE PROJECT https://10.XX.XX.XX:XX ce****-ackpro-cluster1 Unknown Cluster has no applications and is not being monitored. https://10.XX.XX.XX:XX cd****-ackpro-cluster2 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 Fleet实例,添加新的关联集群,ACK One将自动同步集群到ArgoCD中。
执行以下命令,创建应用。
argocd app create echo-server --repo https://github.com/AliyunContainerService/gitops-demo.git --path manifests/helm --revision one-demo --dest-namespace default --dest-server https://10.0.XX.XX:6443
预期输出:
application 'echo-server' created
执行以下命令,从Git中拉取同步应用,并部署到目标集群中。
argocd app sync echo-server
通过ArgoCD ApplicationSet实现多集群GitOps部署
关于实现多集群GitOps部署的具体操作,请参见使用ApplicationSet创建多个应用。
通过ArgoCD Application部署OCI Helm Chart
关于部署OCI Helm Chart的具体操作,请参见使用ACK One GitOps部署ACR EE OCI Helm Chart。