GitOps使用快速入门
您可以在ACK One主控实例中开启GitOps,通过Git repository对应用编排、Helm编排等实现版本管理,同时支持应用一次编排的多集群持续发布。它完全兼容社区ArgoCD的使用方式,并提供了高可用的控制面。本文介绍如何在ACK One主控实例中开启GitOps实现多集群应用发布的流程,帮助您快速上手GitOps。
前提条件
- 已开启多集群管理功能,具体操作,请参见开启多集群管理。
- 主控实例已添加多个关联集群。具体操作,请参见添加关联集群。
- 已在ACK One控制台获取主控实例的KubeConfig,并通过kubectl连接至主控实例。
- 已安装最新版本阿里云CLI。具体操作,请参见在Linux上安装阿里云CLI。
开通地域
已开通ACK One多集群管理服务的地域均可使用。更多信息,请参见使用限制。
步骤一:在ACK One主控实例中开启GitOps
- 确保阿里云CLI为最新版本后,执行以下命令,开启GitOps。替换以下
<your_clusterid>
为您的主控实例ID。aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled true
- 可选:如果您使用的是RAM用户的AK,则需要为RAM用户授予以下权限。具体操作,请参见为RAM用户授权。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "adcp:UpdateHubClusterFeature" ], "Resource": "*" } ] }
开启GitOps后,ACK One会默认创建以下资源,有关资源计费信息,请参见多集群管理云产品资源计费。- 一个SLB,通过此SLB暴漏ArgoCD的API和UI访问端点。
- 一个按量计费的2核 4 GB的ECI实例,用于运行ArgoCD服务。
步骤二:通过ArgoCD CLI方式访问ArgoCD
- 访问ArgoCD,下载安装最新的ArgoCD CLI。
- 在ACK One主控实例中执行以下命令,获取ArgoCD系统的初始密码。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
- 在ACK One主控实例中执行以下命令,通过port-forward的方式登录ArgoCD,默认用户名为
admin
。export ARGOCD_OPTS='--port-forward-namespace argocd --port-forward' argocd login Username: admin Password:
预期输出:
'admin:login' logged in successfully Context 'port-forward' updated
- 在ACK One主控实例中执行以下命令,更新默认用户
admin
的密码。argocd account update-password *** Enter password of currently logged in user (admin): *** Enter new password for user admin: *** Confirm new password for user admin:
预期输出:
Password updated Context 'port-forward' updated
步骤三:创建和发布多集群应用
方式一:通过ArgoCD CLI方式创建和发布多集群应用
- 执行以下命令,添加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
- 执行以下命令,查看Clusters列表。
argocd cluster list
预期输出:
SERVER NAME VERSION STATUS MESSAGE PROJECT https://47.97.XX.XX:6443 c83f3cbc90a****-temp02 1.22+ Successful https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.
在ArgoCD Clusters列表中,会看到ACK One主控实例关联的所有关联集群。
- 创建应用并发布应用到目标集群。
- 方式一:使用Application方式
- 执行以下命令,创建应用。
argocd app create echo-server --repo https://github.com/AliyunContainerService/gitops-demo.git --path manifests/helm --dest-namespace echo-server-cli --dest-server https://47.97.XX.XX:6443
预期输出:
application 'echo-server' created
- 执行以下命令,同步应用到目标集群。
argocd app sync echo-server
预期输出:
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE 2022-09-22T14:32:45+08:00 Service echo-server-cli echo-server OutOfSync Missing 2022-09-22T14:32:45+08:00 apps Deployment echo-server-cli echo-server OutOfSync Missing 2022-09-22T14:32:45+08:00 Service echo-server-cli echo-server Synced Progressing 2022-09-22T14:32:45+08:00 Service echo-server-cli echo-server Synced Progressing service/echo-server created 2022-09-22T14:32:45+08:00 apps Deployment echo-server-cli echo-server OutOfSync Missing deployment.apps/echo-server created 2022-09-22T14:32:45+08:00 apps Deployment echo-server-cli echo-server Synced Progressing deployment.apps/echo-server created Name: echo-server Project: default Server: https://47.97.XX.XX:6443 Namespace: echo-server-cli URL: https://127.0.0.1:52742/applications/echo-server Repo: https://github.com/AliyunContainerService/gitops-demo.git Target: Path: manifests/helm SyncWindow: Sync Allowed Sync Policy: <none> Sync Status: Synced to (e5c2618) Health Status: Progressing Operation: Sync Sync Revision: e5c261880a4072cdbfa5173add2be426f7f3**** Phase: Succeeded Start: 2022-09-22 14:32:44 +0800 CST Finished: 2022-09-22 14:32:45 +0800 CST Duration: 1s Message: successfully synced (all tasks run) GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service echo-server-cli echo-server Synced Progressing service/echo-server created apps Deployment echo-server-cli echo-server Synced Progressing deployment.apps/echo-server created
- 执行以下命令,查看应用列表。
argocd app list
预期输出:
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET echo-server https://47.97.XX.XX:6443 echo-server-cli default Synced Healthy <none> <none> https://github.com/AliyunContainerService/gitops-demo.git manifests/helm
- 执行以下命令,创建应用。
- 方式二:使用ApplicationSet方式
- 使用以下内容,创建applicationset.yaml。
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: echo-server spec: generators: - list: elements: - cluster: production url: https://47.97.xx.xx:6443 - cluster: staging url: https://47.97.xx.xx:6443 template: metadata: name: '{{cluster}}-echo-server' spec: project: default source: repoURL: https://github.com/AliyunContainerService/gitops-demo.git targetRevision: main path: manifests/directory/{{cluster}} destination: server: '{{url}}' namespace: multi-echo-server
- 执行以下命令,部署applicationset。
kubectl -n argocd apply -f applicationset.yaml
- 执行以下命令,查看applicationset状态。
kubectl -n argocd get applicationset
预期输出:
NAME AGE echo-server 40s
- 执行以下命令,查看应用列表。
argocd app list
预期输出:
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET production-echo-server https://47.97.xx.xx:6443 multi-echo-server default OutOfSync Missing <none> <none> https://github.com/AliyunContainerService/gitops-demo.git manifests/directory/ack main staging-echo-server https://47.97.xx.xx:6443 multi-echo-server default OutOfSync Missing <none> <none> https://github.com/AliyunContainerService/gitops-demo.git manifests/directory/idc main
- 执行以下命令,同步应用到目标集群。
argocd app sync production-echo-server staging-echo-server
- 使用以下内容,创建applicationset.yaml。
- 方式一:使用Application方式
方式二:通过ArgoCD UI页面创建和发布多集群应用
- 执行以下命令,在本地使用ACK One主控实例的KubeConfig进行port-forward代理,通过代理访问ArgoCD UI页面。
kubectl port-forward -n argocd service/argocd-server 8080:https
- 在浏览器输入
https://127.0.0.1:8080
访问ArgoCD UI页面。使用默认用户admin
登录,可以查看应用信息。 - 添加Git Repo。
- 在ArgoCD的 页面中,单击+ CONNECT REPO USING HTTPS。
- 在弹出面板中配置相应信息,然后单击CONNECT。添加成功后,该页面会显示Git的CONNECTION STATUS为Successful。
- 创建应用并同步至集群。
- 在ArgoCD的Applications页面中,单击+ NEW APP,进行如下配置。
区域 参数 设置值 GENERAL Application Name echo-server-app Project Name default SYNC POLICY 在下拉列表中选择Manual,取值: - Manual:当Git端有变更时,需要用户手动执行同步动作将其部署至目标集群。
- Automatic:ArgoCD Server每隔3mins自动检测Git端的变更并将其自动部署至目标集群。
SOURCE Repository URL 在下拉列表选择已有Git Repo,此处选择 https://github.com/AliyunContainerService/gitops-demo.git
。Revision main Path manifests/helm DESTINATION Cluster Name 在下拉列表中选择目标集群。 Namespace echo-server - 配置完成,单击页面上方的CREATE。创建完成后,在ArgoCD的Applications页面,即可查看echo-server-app的应用状态。
- 单击目标应用下方的SYNC,将应用同步部署至目标集群。同步完成后,echo-server-app应用的Status右侧出现Healthy和Synced,表示应用已同步。单击echo-server-app,即可查看该应用详情。
- 在ArgoCD的Applications页面中,单击+ NEW APP,进行如下配置。
步骤四:在ACK One主控实例中关闭GitOps
确保阿里云CLI为最新版本后,执行以下命令,关闭GitOps。
aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled false
说明 如需删除ACK One主控实例,请先关闭GitOps。