GitOps使用快速入门

更新时间: 2023-07-10 12:24:28

您可以在ACK One主控实例中开启GitOps,通过Git repository对应用编排、Helm编排等实现版本管理,同时支持应用一次编排的多集群持续发布。它完全兼容社区ArgoCD的使用方式,并提供了高可用的控制面。本文介绍如何在ACK One主控实例中开启GitOps实现多集群应用发布的流程,帮助您快速上手GitOps。

前提条件

开通地域

已开通ACK One多集群管理服务的地域均可使用。更多信息,请参见使用限制

步骤一:在ACK One主控实例中开启GitOps

  1. 确保阿里云CLI为最新版本后,执行以下命令,开启GitOps。
    替换以下<your_clusterid>为您的主控实例ID。
    aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled true
  2. 可选:如果您使用的是RAM用户的AK,则需要为RAM用户授予以下权限。
    具体操作,请参见为RAM用户授权
    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "adcp:UpdateHubClusterFeature"
                ],
                "Resource": "*"
            }
        ]
    }
    开启GitOps后,ACK One会默认创建以下资源,有关资源计费信息,请参见多集群管理云产品资源计费
    • 一个SLB,通过此SLB暴漏ArgoCD的API和UI访问端点。
    • 一个按量计费的2核 4 GB的ECI实例,用于运行ArgoCD服务。

步骤二:通过ArgoCD CLI方式访问ArgoCD

  1. 访问ArgoCD,下载安装最新的ArgoCD CLI。
  2. 在ACK One主控实例中执行以下命令,获取ArgoCD系统的初始密码。
    kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
  3. 在ACK One主控实例中执行以下命令,通过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主控实例中执行以下命令,更新默认用户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方式创建和发布多集群应用

  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

    预期输出:

    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主控实例关联的所有关联集群。

  4. 创建应用并发布应用到目标集群。
    • 方式一:使用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
    • 方式二:使用ApplicationSet方式
      1. 使用以下内容,创建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
      2. 执行以下命令,部署applicationset。
        kubectl -n argocd apply -f applicationset.yaml
      3. 执行以下命令,查看applicationset状态。
        kubectl -n argocd get applicationset

        预期输出:

        NAME        AGE
        echo-server   40s
      4. 执行以下命令,查看应用列表。
        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
      5. 执行以下命令,同步应用到目标集群。
        argocd app sync production-echo-server staging-echo-server

方式二:通过ArgoCD UI页面创建和发布多集群应用

  1. 执行以下命令,在本地使用ACK One主控实例的KubeConfig进行port-forward代理,通过代理访问ArgoCD UI页面。
    kubectl port-forward -n argocd service/argocd-server 8080:https
  2. 在浏览器输入https://127.0.0.1:8080访问ArgoCD UI页面。
    argo
    使用默认用户admin登录,可以查看应用信息。
  3. 添加Git Repo。
    1. 在ArgoCD的Settings > Repositories 页面中,单击+ CONNECT REPO USING HTTPS
    2. 在弹出面板中配置相应信息,然后单击CONNECT
      添加Gitops
      添加成功后,该页面会显示Git的CONNECTION STATUSSuccessfulsuccessful
  4. 创建应用并同步至集群。
    1. 在ArgoCD的Applications页面中,单击+ NEW APP,进行如下配置。
      app
      区域参数设置值
      GENERALApplication Nameecho-server-app
      Project Namedefault
      SYNC POLICY在下拉列表中选择Manual,取值:
      • Manual:当Git端有变更时,需要用户手动执行同步动作将其部署至目标集群。
      • Automatic:ArgoCD Server每隔3mins自动检测Git端的变更并将其自动部署至目标集群。
      SOURCERepository URL在下拉列表选择已有Git Repo,此处选择https://github.com/AliyunContainerService/gitops-demo.git
      Revisionmain
      Pathmanifests/helm
      DESTINATIONCluster Name在下拉列表中选择目标集群。
      Namespaceecho-server
    2. 配置完成,单击页面上方的CREATE
      创建完成后,在ArgoCD的Applications页面,即可查看echo-server-app的应用状态。create app
    3. 单击目标应用下方的SYNC,将应用同步部署至目标集群。
      同步完成后,echo-server-app应用的Status右侧出现HealthySynced,表示应用已同步。单击echo-server-app,即可查看该应用详情。query

步骤四:在ACK One主控实例中关闭GitOps

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

aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled false  
说明 如需删除ACK One主控实例,请先关闭GitOps。
阿里云首页 容器服务 Kubernetes 版 ACK 相关技术圈