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。
选择连接方式为 VIA SSH,并配置以下参数:
Project:填写
defaultRepository URL:填写
https://github.com/AliyunContainerService/gitops-demo.gitSSH private key data:填写对应的 SSH 私钥
添加成功后,该页面会显示Git的CONNECTION STATUS为Successful。
连接成功后,仓库连接列表中显示类型为 git,仓库地址为
https://github.com/AliyunContainerService/gitops-demo.git,CONNECTION STATUS 列显示 Successful。
-
-
创建ArgoCD Application,并发布应用到目标集群。
-
在Applications页面,单击+ NEW APP,配置如下信息。 Application将拉取Git Repo中的Helm Chart并部署到目标集群的default命名空间。
在 ArgoCD 的 NEW APP 表单中配置以下关键参数:
Application Name:填写应用名称,例如
gitOps-demo。Project Name:选择
default。SYNC POLICY:选择 Manual。
Repository URL:填写 Git 仓库地址,例如
https://github.com/AliyunContainerService/gitops-demo.git。Revision:填写分支名,例如
one-demo。Path:填写部署清单路径,例如
manifests/helm。Cluster URL:选择目标集群地址。
Namespace:填写
default。
-
配置完成,单击页面上方的CREATE。
创建完成后,在ArgoCD的Applications页面,即可查看echo-server-app的应用状态。
在 Applications 页面可见 echo-server 应用卡片,卡片底部包含 SYNC 按钮。
-
单击目标应用下方的SYNC,将应用同步部署至目标集群。
-
同步完成后,echo-server-app 应用的Status右侧出现Healthy和Synced,表示应用已同步。单击echo-server,即可查看该应用详情,ArgoCD将展示应用相关Kubernetes资源的拓扑结构及相应的状态。
同步完成后,应用详情页显示 APP HEALTH 为 Healthy,CURRENT SYNC STATUS 为 Synced,表示应用已成功同步且运行健康。资源树展示从 Helm 应用到 Service、Deployment、ReplicaSet、Pod 的完整部署层级关系。
-
步骤二:查看应用的实际部署情况
连接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。
修改
gitops-demo/manifests/helm/values.yaml文件,将镜像tag值更新为"v2.0":image: repository: registry.cn-hangzhou.aliyuncs.com/xxx/echo-server pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: "v2.0" service: type: LoadBalancer #type: NodePort #type: ClusterIP由于Git Repo发生变化,ArgoCD Application会显示OutOfSync。
-
单击黄色的OutOfSync图标,可以查看详细的区别。
在 Argo CD 应用详情页面中,APP HEALTH 显示 Healthy,CURRENT SYNC STATUS 显示 OutOfSync(橙色高亮),来源 Comment 为
update helm chart。DIFF 视图显示容器镜像从
registry.cn-hangzhou.aliyuncs.com/xxx/echo-server:v1.0变更为registry.cn-hangzhou.aliyuncs.com/xxx/echo-server:v2.0,确认差异无误后单击右上角 SYNC 按钮将应用同步至最新版本。 -
单击SYNC,发起同步,同步完成后,Pod Image Tag变成v2.0,与预期一致。
Argo CD 应用详情树视图显示 echo-server 应用同步状态为 Synced,健康状态为 Healthy,Pod 镜像为
registry.cn-hangzhou.aliyuncs.com/haoshuwei24/echo-server: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,查看应用的所有历史版本。
在 Argo CD 应用详情页顶部工具栏中,单击 HISTORY AND ROLLBACK 按钮,打开版本历史面板。
-
选择对应的v1.0版本进行回滚,然后单击Rollback。
选择
image.tag为v1.0的历史版本,单击右侧三点菜单,选择 Rollback 执行回滚。此时,Pod Image Tag已经回滚到v1.0,由于ArgoCD和Git Repo相比出现差异,因此应用状态变为OutOfSync,在问题修复后,单击SYNC发起同步。
说明ArgoCD也支持自动同步Git Repo信息。
通过ArgoCD CLI部署应用
-
登录ArgoCD Server。
-
使用舰队KubeConfig,执行以下命令,获取ArgoCD Server LB IP。
kubectl get svc -nargocd argocd-server -ojsonpath='{.status.loadBalancer.ingress[0].ip}' -
执行以下命令,获取admin密码。
kubectl -nargocd get secret argocd-initial-admin-secret -ojsonpath='{.data.password}' |base64 -d -
登录ArgoCD Server。
argocd login <argocd server lb ip> Username: admin Password: 'admin:login' logged in successfully Context '<argocd server lb ip>' updated
-
-
执行以下命令,增加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。