GitOps快速入门

您可以在ACK One舰队(Fleet)实例中通过GitOps将Git repositories作为应用来源,对多种编排方式(YAML manifests目录、Helm Charts、Kustomize等)的应用实现版本管理、多集群分发和持续部署。GitOps完全兼容社区ArgoCD的使用方式,并提供了高可用的控制面。本文介绍如何在ACK One Fleet实例中使用GitOps实现多集群应用发布的流程,帮助您快速上手GitOps。

前提条件

计费说明

开启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)。

通过控制台开启

  1. 登录ACK One控制台,在左侧导航栏选择舰队 > 多集群应用

  2. 多集群应用页面左上角单击舰队名称后的Dingtalk_20231226104633.jpg按钮,在下拉列表中选择目标舰队。

  3. 新建舰队默认已开启GitOps,如果您的舰队未开启,可单击开启GitOps,在弹出的对话框中单击确定完成开启。

    若舰队已开启GitOps,多集群应用页面会显示GitOps控制台访问控制

  4. 多集群应用页面,单击访问控制,在弹出的访问控制对话框中开启公网访问,并在输入框中输入需要加入白名单的IP地址或地址段,然后单击确定

  5. 开启公网访问后,可单击GitOps控制台,通过公网访问GitOps控制台。

通过阿里云CLI开启

  1. 确保阿里云CLI为最新版本后,执行以下命令,开启GitOps并开通公网访问。

    • 替换以下<your_clusterid>为您的Fleet实例ID。

    • 替换AccessControlList中的值为您的控制白名单地址段,如何获取,请参见开通公网访问GitOps

    aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --PublicAccessEnabled true --AccessControlList "[\"10.100.XX.XX/24\"]" --ArgoCDEnabled true 
  2. 可选:如果您使用的是RAM用户的AK,则需要为RAM用户授予AliyunAdcpFullAccess权限。具体操作,请参见为RAM用户授权

步骤二:创建应用发布至目标集群

通过控制台发布

  1. 多集群应用页面单击GitOps控制台,进入ArgoCD UI登录页面,单击LOG IN VIA ALIYUN,通过阿里云账号SSO登录至ArgoCD UI。

  2. 连接Repo。

    1. 在ArgoCD UI左侧导航栏选择Settings,然后选择Repositories > + Connect Repo

    2. 在弹出的面板中配置以下信息,然后单击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

      勾选

      image.png

      连接添加成功后会显示Git的CONNECTION STATUSSuccessful。

      image.png

  3. 创建应用。

    1. 在ArgoCD UI左侧导航栏选择Applications,然后单击+ NEW APP

    2. 在弹出的面板配置以下信息,然后单击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

    3. 创建完成后,在Application页面,即可看到echo-server-demo的应用状态。

      如果SYNC POLICY选择的是Manual方式,需要手动点击SYNC,将应用同步部署至目标集群。应用的StatusHealthySynced,表示已经成功同步。

      image.png

    4. 单击echo-server-demo应用名称,即可查看应用详情,展示应用相关的Kubernetes资源的拓扑结构及相应状态。

      image.png

通过ArgoCD CLI发布

  1. 登录和访问AgroCD。

    1. 访问ArgoCD v2.8.7,下载安装v2.8.7版本的ArgoCD CLI。

    2. 在ACK One Fleet实例中执行以下命令,获取ArgoCD系统的初始密码。

      kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
    3. 在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
    4. 在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
  2. 连接Repo。

    1. 执行以下命令添加Git Repo。

      argocd repo add https://github.com/AliyunContainerService/gitops-demo.git --name echo-server

      预期输出:

      Repository 'https://github.com/AliyunContainerService/gitops-demo.git' added
    2. 执行以下命令,查看已添加的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
    3. 执行以下命令,查看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.
  3. 使用Application创建应用。

    1. 执行以下命令,创建应用。

      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
    2. 执行以下命令,同步应用到目标集群。

      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
    3. 执行以下命令,查看应用列表。

      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。

通过控制台关闭

  1. 登录ACK One控制台,在左侧导航栏选择舰队 > 多集群应用

  2. 多集群应用页面左上角单击舰队名称后的Dingtalk_20231226104633.jpg按钮,在下拉列表中选择目标舰队。

  3. 多集群应用页面右上角,单击关闭功能,在弹出的提示对话框中单击确定

通过阿里云CLI关闭

确保阿里云CLI为最新版本后,执行以下命令,关闭GitOps。

aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled false