ACK One GitOps是ACK One面向混合云、多云、多集群等场景,提供的多集群应用的GitOps持续交付能力,它通过托管开源Argo CD实现,完全兼容Argo CD API(如Application)。和开源ArgoCD相比,具有多集群分发能力、多用户权限管理、开箱即用免运维等优势。如果您需要在您的应用发布系统中集成ACK One GitOps,可以使用Go SDK来创建、删除或同步(Sync)ArgoCD Application。本文基于Argo CD v2.9.3版本,为您介绍如何使用Go SDK创建Application。
Demo代码配置
步骤一:获取目标集群的Server或Name
ArgoCD Application中需要指定目标集群的Server
或者Name
。
从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令获取所有关联集群的
Name
列表或者Server
列表。二者选择其中一个即可。Name
具有更好的可读性,默认格式为<cluster id>-<cluster name>
。获取
Name
列表kubectl get secret -nargocd -l argocd.argoproj.io/secret-type=cluster |awk 'NR>1 {print $1}'|xargs -I {} sh -c 'kubectl get secret -nargocd {} -ojsonpath="{.data.name}"|base64 -d; echo'
获取
Server
列表kubectl get secret -nargocd -l argocd.argoproj.io/secret-type=cluster |awk 'NR>1 {print $1}'|xargs -I {} sh -c 'kubectl get secret -nargocd {} -ojsonpath="{.data.server}"|base64 -d; echo'
步骤二:获取Token
在Fleet实例中创建一个单独的Local User,为其生成Token,用于管理Application的操作。
创建Local User。
执行以下命令,编辑ArgoCD
argocd-cm
的ConfigMap文件。kubectl edit cm argocd-cm -n argocd
在
argocd-cm
的ConfigMap文件中,添加如下所示的Local Userlocaluser1
。data: accounts.localuser1: login,apiKey # 可以UI/CLI登录,并可以生成apiKey Token。 accounts.localuser1.enabled: "true" # 创建localuser1。
执行以下命令,查看Local User。
argocd account list
预期输出:
NAME ENABLED CAPABILITIES admin true login localuser1 true login,apiKey # 此处为上一步已创建的localuser1。
在
argocd-rbac-cm
中为已创建的Local User添加ArgoCD的Kubernetes资源的RBAC权限,如设置admin管理员权限(application、cluster、project等资源都有读写权限)。ArgoCD RBAC权限详细内容,请参见为用户配置ArgoCD RBAC。
执行以下命令,编辑ArgoCD
argocd-rbac-cm
的ConfigMap文件。kubectl edit cm argocd-rbac-cm -n argocd
在
argocd-rbac-cm
的ConfigMap文件中,参考以下示例为Local User进行授权。重要请勿修改此ConfigMap文件中已有的配置。
data: policy.csv: | g, "14***01", role:admin # 现有配置,请保留。 g, localuser1, role:admin # 新增配置,映射localuser1到角色admin。 scopes: '[uid]'
为Local User生成Token。
通过ArgoCD CLI方式生成
执行以下命令,设置密码并生成认证Token。
# 设置密码。 argocd account update-password \ --account localuser1 \ --current-password <admin password> \ --new-password <localuser1-password> # 获取localuser1认证Token。 argocd account generate-token --account localuser1 eyJhb......
通过ArgoCD UI生成
登录ACK One控制台,在左侧导航栏选择 。
在Gitops页面左上角选择目标舰队集群,然后单击GitOps控制台,在弹出的登录页面输入用户名密码完成登录。
在ArgoCD控制台左侧导航栏选择Settings,然后选择Accounts,找到添加的Local User并单击用户名称。本文以localuser1为例。
在用户页面localuser1的Token区域中单击Generate New生成Token,并保存Token内容。
步骤三:操作Application示例代码
以下提供应用操作的示例代码,包括创建应用、同步应用、获取应用详情、更新应用、删除应用。
Main入口
需要替换
Address
和Token
,Token为步骤二:获取Token中获取的Token内容。应用管理示例代码
基于ArgoCD的apiclient实现。需要替换
ClusterName
、ClusterServer
、GitRepoURL
。
go.mod配置
Import ArgoCD go packages到您的Go项目时,在下载dependencies时,会遇到像"unknown revision v0.0.0"的错误,这是因为ArgoCD直接依赖于一些Kubernetes packages,这些packages的go.mod中包含这些未知的v0.0.0版本。
该问题可参考社区的Importing Argo CD go packages,通过增加replace来解决。但不同的ArgoCD版本对应的replace依赖的版本也不一样,需要将replace中的kubernetes packages的版本设置为和ArgoCD版本一致。
本文提供的Demo中使用的是ArgoCD v2.9.3版本的go packages,因此需要将replace中所有的kubernetes packages设置为和v2.9.3版本对应的v0.24.17版本。完整的go.mod示例如下:
相关文档
ACK One GitOps的详细功能介绍,请参见GitOps概述。
快速使用GitOps实现多集群应用发布的流程,请参见GitOps快速入门。