您可以在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舰队管理功能的地域均可使用。更多信息,请参见多集群舰队和工作流集群支持地域。
步骤一:在ACK One Fleet实例中开启公网访问GitOps控制台
ACK One Fleet实例创建时,默认会开启GitOps功能,并支持VPC内网访问GitOps控制台(需要您的办公网与云上VPC打通)。
如果您需要通过公网访问GitOps控制台,如提交和查看应用,可根据以下步骤开启公网访问GitOps控制台。
开启公网访问后会有一定的安全风险,因此,在开启公网访问时必须配置访问控制(ACL)。
通过控制台开启
登录ACK One控制台,在左侧导航栏选择 。
在多集群应用页面左上角单击舰队名称后的按钮,在下拉列表中选择目标舰队。
新建舰队默认已开启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控制台,进入ArgoCD UI登录页面,单击LOG IN VIA ALIYUN,通过阿里云账号SSO登录至ArgoCD UI。
连接Repo。
在ArgoCD UI左侧导航栏选择Settings,然后选择
。在弹出的面板中配置以下信息,然后单击CONNECT添加连接。
区域
参数
参数值
Choose your connection method
VIA HTTPS
CONNECT REPO USING 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
步骤三:在ACK One Fleet实例中关闭GitOps
当您不再需要使用GitOps能力时,可以先删除其中的应用,再进行关闭GitOps操作。
如需删除ACK One Fleet实例,请先关闭GitOps。
通过控制台关闭
登录ACK One控制台,在左侧导航栏选择 。
在多集群应用页面左上角单击舰队名称后的按钮,在下拉列表中选择目标舰队。
在多集群应用页面右上角,单击关闭功能,在弹出的提示对话框中单击确定。
通过阿里云CLI关闭
确保阿里云CLI为最新版本后,执行以下命令,关闭GitOps。
aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled false