GitOps使用快速入门
您可以在ACK One舰队的Fleet实例中开启GitOps,通过Git repository对应用编排、Helm编排等实现版本管理,同时支持应用一次编排的多集群持续发布。它完全兼容社区ArgoCD的使用方式,并提供了高可用的控制面。本文介绍如何在ACK One舰队的Fleet实例中开启GitOps实现多集群应用发布的流程,帮助您快速上手GitOps。
前提条件
已开启舰队管理功能。具体操作,请参见开启舰队管理功能。
舰队的Fleet实例已添加多个关联集群。具体操作,请参见添加关联集群。
已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
开通地域
已开通ACK One舰队管理功能的地域均可使用。更多信息,请参见使用限制。
步骤一:在ACK One Fleet实例中开启GitOps
开启GitOps后,ACK One会默认创建以下资源。关于资源计费信息,请参见舰队管理云产品资源计费。
一个SLB,通过此SLB暴漏ArgoCD的API和UI访问端点。
一个按量计费的2核 4 GB的ECI实例,用于运行ArgoCD服务。
通过CLI方式开启
确保阿里云CLI为最新版本后,执行以下命令,开启GitOps。
替换以下
<your_clusterid>
为您的Fleet实例ID。aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled true
可选:如果您使用的是RAM用户的AK,则需要为RAM用户授予以下权限。
具体操作,请参见为RAM用户授权。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "adcp:UpdateHubClusterFeature" ], "Resource": "*" } ] }
通过控制台开启
登录ACK One控制台,在左侧导航栏选择 。
在GitOps页面,单击开启GitOps。
GitOps开启后,页面上会显示GitOps控制台,您可以单击GitOps控制台进行访问。
步骤二:通过ArgoCD CLI方式访问ArgoCD
访问ArgoCD,下载安装最新的ArgoCD CLI。
在ACK One Fleet实例中执行以下命令,获取ArgoCD系统的初始密码。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
在ACK One Fleet实例中执行以下命令,通过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 Fleet实例中执行以下命令,更新默认用户
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 Fleet实例关联的所有关联集群。
创建应用并发布应用到目标集群。
方式一:使用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
方式二:通过ArgoCD UI页面创建和发布多集群应用
执行以下命令,在本地使用ACK One Fleet实例的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,即可查看该应用详情。
步骤四:在ACK One Fleet实例中关闭GitOps
通过CLI方式关闭
确保阿里云CLI为最新版本后,执行以下命令,关闭GitOps。
aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled false
通过控制台关闭
登录ACK One控制台,在左侧导航栏选择 。
在GitOps页面右上角,单击关闭功能。
如需删除ACK One Fleet实例,请先关闭GitOps。