使用ACK One GitOps部署应用

ACK One GitOps托管并完全兼容ArgoCD相关能力,支持持续迭代,可通过使用Git部署模板代替模板化分发能力。本文介绍如何通过ACK One GitOps控制台或CLI的方式部署应用。

前提条件

通过ACK One GitOps部署应用

开启ACK One GitOps后,您可以通过ACK One GitOps(ArgoCD)控制台和ArgoCD CLI两种方式部署管理应用。

通过ACK One GitOps(ArgoCD)控制台部署应用

步骤一:在ArgoCD控制台添加Git Repo并同步至目标集群

  1. 在浏览器中输入已获取到的ArgoCD Server域名,访问ArgoCD控制台。关于如何获取域名,请参见登录GitOps系统

  2. 在ArgoCD首页,单击LOGIN VIA ALIYUN,登录ArgoCD控制台。

  3. 添加发布源Git Repo。

    1. 在左侧导航栏,选择Settings > Repositories,然后单击+ CONNECT REPO

    2. 在弹出面板中配置如下信息,然后单击CONNECT添加Git repo.png

      添加成功后,该页面会显示Git的CONNECTION STATUSSuccessfulsuccess.png

  4. 创建ArgoCD Application,并发布应用到目标集群。

    1. Applications页面,单击+ NEW APP,配置如下信息。 Application将拉取Git Repo中的Helm Chart并部署到目标集群的default命名空间。添加应用.png

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

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

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

    4. 同步完成后,echo-server-app 应用的Status右侧出现HealthySynced,表示应用已同步。单击echo-server,即可查看该应用详情,ArgoCD将展示应用相关Kubernetes资源的拓扑结构及相应的状态。同步.png

步骤二:查看应用的实际部署情况

连接Fleet实例的KubeConfig,在Fleet实例中执行命令查看应用的实际部署情况。

  1. 执行以下命令,查看Fleet实例已关联的关联集群。

    kubectl amc get managedcluster

    预期输出:

    Name         Alias             HubAccepted
    cd****      ackpro-cluster2      true
    ce****      ackpro-cluster1      true    // GitOps部署的目标集群。
  2. 执行以下命令,通过amc -m参数指定集群,查看default命令空间下的Deployment、Service和Pod资源。

    kubectl amc get all -n default -m ce****

    预期输出:

    Run on ManagedCluster ce**** (ackpro-cluster1)
    NAME                               READY   STATUS    RESTARTS   AGE
    pod/echo-server-5cf54bdbcb-jv58k   1/1     Running   0          59m
    
    NAME                  TYPE           CLUSTER-IP        EXTERNAL-IP    PORT(S)          AGE
    service/echo-server   LoadBalancer   192.XX.XX.XX      39.XX.XX.XX   8080:31769/TCP   59m        21d
    
    NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/echo-server   1/1     1            1           59m
  3. 执行以下命令,访问Loadbalancer Service的External-IP,验证应用执行情况。

    curl http://39.XX.XX.XX:8080/version

    预期输出:

    "Hello Echo Server v1.0"

    预期输出表明,当前应用版本为v1.0。

步骤三:升级应用版本

  1. 将Git中的Image Tag版本v1.0修改为v2.0修改tag.png

    由于Git Repo发生变化,ArgoCD Application会显示OutOfSync

  2. 单击黄色的OutOfSync图标,可以查看详细的区别。

    更新并同步.png

    区别如下图所示。查看区别.png

  3. 单击SYNC,发起同步,同步完成后,Pod Image Tag变成v2.0,与预期一致。确认版本.png

  4. 执行以下命令,访问Service,查看实际版本。

    curl http://39.XX.XX.XX:8080/version

    预期输出:

    "Hello Echo Server v2.0"

    预期输出表明,应用版本已升级为v2.0版本。

步骤四:回滚应用版本

版本升级为v2.0后,ArgoCD会保留之前的ReplicaSet,便于快速回滚之前的版本。

  1. 在ACK one Fleet实例上执行以下命令,通过amc -m参数,查看指定的关联集群的资源状态。

    kubectl amc get replicaset  -n default -m ce****

    预期输出:

    Run on ManagedCluster ce**** (ackpro-cluster1)
    NAME                     DESIRED   CURRENT   READY   AGE
    echo-server-55664c4677   1         1         1       26m    // 版本v2.0。
    echo-server-5cf54bdbcb   0         0         0       109m   // 版本v1.0。
  2. 如需回滚到版本v1.0,可在应用页面,单击HISTORY AND ROLLBACK,查看应用的所有历史版本。回滚版本.png

  3. 选择对应的v1.0版本进行回滚,然后单击Rollback确认回滚.png

    此时,Pod Image Tag已经回滚到v1.0,由于ArgoCD和Git Repo相比出现差异,因此应用状态变为OutOfSync,在问题修复后,单击SYNC发起同步。

    说明

    ArgoCD也支持自动同步Git Repo信息。

通过ArgoCD CLI部署应用

  1. 执行以下命令,通过ArgoCD Server域名登录ArgoCD,CLI将打开浏览器完成SSO登录。

    argocd login argocd.<ackone cluster id>.<region>.alicontainer.com --sso
    Opening browser for authentication
    Performing authorization_code flow login: https://signin.aliyun.com/oauth2/v1/auth?xxx
    Authentication successful
    'root' logged in successfully
    Context 'argocd.<ackone cluster id>.<region>.alicontainer.com' update
  2. 执行以下命令,增加Git Repo。

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

    预期输出:

    Repository 'https://github.com/AliyunContainerService/gitops-demo.git' added
  3. 执行以下命令,查看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
  4. 执行以下命令,查看集群。

    argocd cluster list

    预期输出:

    SERVER                          NAME                    VERSION  STATUS   MESSAGE                                                  PROJECT
    https://10.XX.XX.XX:XX      ce****-ackpro-cluster1               Unknown  Cluster has no applications and is not being monitored.
    https://10.XX.XX.XX:XX      cd****-ackpro-cluster2               Unknown  Cluster has no applications and is not being monitored.
    https://kubernetes.default.svc  in-cluster                       Unknown  Cluster has no applications and is not being monitored.

    您可以通过ACK one Fleet实例,添加新的关联集群,ACK One将自动同步集群到ArgoCD中。

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

    argocd app create echo-server --repo https://github.com/AliyunContainerService/gitops-demo.git --path manifests/helm --revision one-demo --dest-namespace default --dest-server https://10.0.XX.XX:6443

    预期输出:

    application 'echo-server' created
  6. 执行以下命令,从Git中拉取同步应用,并部署到目标集群中。

    argocd app sync echo-server

通过ArgoCD ApplicationSet实现多集群GitOps部署

关于实现多集群GitOps部署的具体操作,请参见使用ApplicationSet创建多个应用

通过ArgoCD Application部署OCI Helm Chart

关于部署OCI Helm Chart的具体操作,请参见使用ACK One GitOps部署ACR EE OCI Helm Chart

相关文档