GitOps使用快速入门

更新时间: 2023-11-27 16:12:15

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

前提条件

开通地域

已开通ACK One舰队管理功能的地域均可使用。更多信息,请参见使用限制

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

重要

开启GitOps后,ACK One会默认创建以下资源。关于资源计费信息,请参见舰队管理云产品资源计费

  • 一个SLB,通过此SLB暴漏ArgoCD的API和UI访问端点。

  • 一个按量计费的2核 4 GB的ECI实例,用于运行ArgoCD服务。

通过CLI方式开启

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

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

    aliyun adcp UpdateHubClusterFeature --ClusterId <your_clusterid> --ArgoCDEnabled true
  2. 可选:如果您使用的是RAM用户的AK,则需要为RAM用户授予以下权限。

    具体操作,请参见为RAM用户授权

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "adcp:UpdateHubClusterFeature"
                ],
                "Resource": "*"
            }
        ]
    }

通过控制台开启

  1. 登录ACK One控制台,在左侧导航栏选择舰队 > GitOps

  2. 在GitOps页面,单击开启GitOps

    GitOps开启后,页面上会显示GitOps控制台,您可以单击GitOps控制台进行访问。

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

  1. 访问ArgoCD,下载安装最新的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

步骤三:创建和发布多集群应用

方式一:通过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 Fleet实例关联的所有关联集群。

  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 Fleet实例的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

      区域

      参数

      设置值

      GENERAL

      Application Name

      echo-server-app

      Project Name

      default

      SYNC POLICY

      在下拉列表中选择Manual,取值:

      • Manual:当Git端有变更时,需要用户手动执行同步动作将其部署至目标集群。

      • Automatic:ArgoCD Server每隔3mins自动检测Git端的变更并将其自动部署至目标集群。

      SOURCE

      Repository URL

      在下拉列表选择已有Git Repo,此处选择https://github.com/AliyunContainerService/gitops-demo.git

      Revision

      main

      Path

      manifests/helm

      DESTINATION

      Cluster Name

      在下拉列表中选择目标集群。

      Namespace

      echo-server

    2. 配置完成,单击页面上方的CREATE

      创建完成后,在ArgoCD的Applications页面,即可查看echo-server-app的应用状态。create app

    3. 单击目标应用下方的SYNC,将应用同步部署至目标集群。

      同步完成后,echo-server-app应用的Status右侧出现HealthySynced,表示应用已同步。单击echo-server-app,即可查看该应用详情。query

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

通过CLI方式关闭

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

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

通过控制台关闭

  1. 登录ACK One控制台,在左侧导航栏选择舰队 > GitOps

  2. 在GitOps页面右上角,单击关闭功能

说明

如需删除ACK One Fleet实例,请先关闭GitOps。

阿里云首页 容器服务 Kubernetes 版 ACK 相关技术圈