您可以在ACK One舰队(Fleet)实例中通过GitOps将Git repositories作为应用来源,对多种编排方式(YAML manifests目录、Helm Charts、Kustomize等)的应用实现版本管理、多集群分发和持续部署。GitOps完全兼容社区ArgoCD的使用方式,并提供了高可用的控制面。本文介绍如何在ACK One Fleet实例中使用GitOps实现多集群应用发布的流程,帮助您快速上手GitOps。
前提条件
已开启舰队管理功能。
舰队实例已添加多个关联集群。具体操作,请参见添加关联集群。
已授予RAM用户AliyunAdcpFullAccess权限。具体操作,请参见为RAM用户授权。
(CLI方式需要)已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
(CLI方式需要)已安装最新版本阿里云CLI并配置阿里云CLI。
计费说明
开启GitOps后,ACK One会默认创建以下资源。
创建一个SLB实例,通过此SLB暴露ArgoCD的API和UI访问端点。
创建一个按量计费的2核4 GB的ECI实例,用于运行ArgoCD服务。
具体计费信息,请参见多集群舰队云产品资源计费。
开通地域
已开通ACK One舰队管理功能的地域均可使用。更多信息,请参见多集群舰队和工作流集群支持地域。
步骤一:开启公网访问GitOps控制台
ACK One Fleet实例创建时,默认会开启GitOps功能,并支持VPC内网访问GitOps控制台(需要您的办公网与云上VPC打通)。
如果您需要通过公网访问GitOps控制台,如提交和查看应用,可根据以下步骤开启公网访问GitOps控制台。
开启公网访问后会有一定的安全风险,因此,在开启公网访问时必须配置访问控制(ACL)。
通过控制台开启
登录ACK One控制台,在左侧导航栏选择 。
在多集群GitOps页面左上角单击舰队名称后的
按钮,在下拉列表中选择目标舰队。
新建舰队默认已开启GitOps,如果您的舰队未开启,可单击立即开启 GitOps,在弹出的对话框中单击确定完成开启。
若舰队已开启GitOps,多集群GitOps页面会显示GitOps控制台。
在多集群GitOps页面,单击公网访问后的开启,在弹出的开启公网访问对话框中输入需要加入白名单的IP地址或地址段,然后单击确定。
舰队更新完成后,您可以单击页面右上角的GitOps控制台,通过公网访问GitOps控制台。
通过阿里云CLI开启
确保阿里云CLI为最新版本后,执行以下命令,开启GitOps并开通公网访问。
替换以下
<your_clusterid>
为您的Fleet实例ID。替换
AccessControlList
中的值为您的控制白名单地址段,如何获取,请参见开通公网访问GitOps。
aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --PublicAccessEnabled true --AccessControlList "[\"10.100.XX.XX/24\"]" --ArgoCDEnabled true
可选:如果您使用的是RAM用户的AK,则需要为RAM用户授予AliyunAdcpFullAccess权限。具体操作,请参见为RAM用户授权。
步骤二:在GitOps控制台创建应用并分发至目标集群
通过控制台发布
在多集群GitOps页面单击GitOps控制台,进入ArgoCD UI登录页面,单击LOG IN VIA ALIYUN,通过阿里云账号SSO登录至ArgoCD UI。
连接Repo。
在ArgoCD UI左侧导航栏选择Settings,然后选择
。在弹出的面板中配置以下信息,然后单击CONNECT添加连接。
区域
参数
参数值
Choose your connection method
-
VIA HTTP/HTTPS
CONNECT REPO USING HTTP/HTTPS
Type
git
Project
default
Repository URL
https://github.com/AliyunContainerService/gitops-demo.git
Skip server verification
勾选
连接添加成功后会显示Git的CONNECTION STATUS为Successful。
创建应用。
在ArgoCD UI左侧导航栏选择Applications,然后单击+ NEW APP。
在弹出的面板配置以下信息,然后单击CREATE进行创建。
区域
参数
参数值
GENERAL
Application Name
echo-server-demo
Project Name
default
SYNC POLICY
在下拉列表中选择Automatic。
参数取值如下:
Manual:当Git端有变更时,需要用户手动执行同步动作将其部署至目标集群。
Automatic:ArgoCD Server每隔3分钟自动检测Git端的变更并将其自动部署至目标集群。
SYNC OPTIONS
勾选AUTO-CREATE NAMESPACE。
SOURCE
Repository URL
在下拉列表选择已有Git Repo,此处选择https://github.com/AliyunContainerService/gitops-demo.git。
Revision
HEAD
Path
manifests/helm/echo-server
DESTINATION
Cluster URL/Cluster Name
在下拉列表中选择目标集群。
Namespace
echo-server-demo
HELM
VALUES FILES
values.yaml
创建完成后,在Application页面,即可看到echo-server-demo的应用状态。
如果SYNC POLICY选择的是Manual方式,需要手动点击SYNC,将应用同步部署至目标集群。应用的Status为Healthy和Synced,表示已经成功同步。
单击echo-server-demo应用名称,即可查看应用详情,展示应用相关的Kubernetes资源的拓扑结构及相应状态。
通过ArgoCD CLI发布
登录和访问AgroCD。
访问ArgoCD v2.8.7,下载安装v2.8.7版本的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
连接Repo。
执行以下命令添加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
预期输出:在ArgoCD Clusters列表中,会看到ACK One Fleet实例关联的所有关联集群。
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.
使用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
相关操作
在GitOps中部署应用后,您可以通过以下几个操作来提高舰队和GitOps的安全性和可观测性。
配置Argo CD ConfigMap
在多集群GitOps页面的GitOps折叠块部分找到Argo CD ConfigMap。
单击Argo CD ConfigMap后的配置。
在Argo CD ConfigMap配置页面,通过选择配置项下拉框选择配置项,在编辑配置项代码区域进行编辑。部分高频配置项及对应重启策略,请参见常用配置项。
重启Argo CD组件
在多集群GitOps页面的GitOps折叠块部分找到Argo CD 组件。
单击Argo CD 组件后的重启。
在弹出框中的选择待重启应用下拉框选择需要重启的组件名称,例如argocd-server,单击确定。
(可选)关闭GitOps
当您不再需要使用GitOps能力时,可以先删除其中的应用,再进行关闭GitOps操作。
如需删除ACK One Fleet实例,请先关闭GitOps。
通过控制台关闭
登录ACK One控制台,在左侧导航栏选择 。
在多集群GitOps页面左上角单击舰队名称后的
按钮,在下拉列表中选择目标舰队。
在多集群GitOps页面右上角,单击关闭GitOps,在弹出的提示对话框中单击确定。
通过阿里云CLI关闭
确保阿里云CLI为最新版本后,执行以下命令,关闭GitOps。
aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled false