使用ACK One GitOps部署应用

更新时间:
复制 MD 格式

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。

      选择连接方式为 VIA SSH,并配置以下参数:

      • Project:填写 default

      • Repository URL:填写 https://github.com/AliyunContainerService/gitops-demo.git

      • SSH private key data:填写对应的 SSH 私钥

      添加成功后,该页面会显示Git的CONNECTION STATUS为Successful。

      连接成功后,仓库连接列表中显示类型为 git,仓库地址为 https://github.com/AliyunContainerService/gitops-demo.git,CONNECTION STATUS 列显示 Successful。

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

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

      在 ArgoCD 的 NEW APP 表单中配置以下关键参数:

      • Application Name:填写应用名称,例如 gitOps-demo。

      • Project Name:选择 default。

      • SYNC POLICY:选择 Manual。

      • Repository URL:填写 Git 仓库地址,例如 https://github.com/AliyunContainerService/gitops-demo.git。

      • Revision:填写分支名,例如 one-demo。

      • Path:填写部署清单路径,例如 manifests/helm。

      • Cluster URL:选择目标集群地址。

      • Namespace:填写 default。

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

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

      在 Applications 页面可见 echo-server 应用卡片,卡片底部包含 SYNC 按钮。

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

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

      同步完成后,应用详情页显示 APP HEALTH 为 Healthy,CURRENT SYNC STATUS 为 Synced,表示应用已成功同步且运行健康。资源树展示从 Helm 应用到 Service、Deployment、ReplicaSet、Pod 的完整部署层级关系。

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

连接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。

    修改 gitops-demo/manifests/helm/values.yaml 文件,将镜像 tag 值更新为 "v2.0":

    image:
      repository: registry.cn-hangzhou.aliyuncs.com/xxx/echo-server
      pullPolicy: IfNotPresent
      # Overrides the image tag whose default is the chart appVersion.
      tag: "v2.0"
    
    service:
      type: LoadBalancer
      #type: NodePort
      #type: ClusterIP

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

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

    在 Argo CD 应用详情页面中,APP HEALTH 显示 Healthy,CURRENT SYNC STATUS 显示 OutOfSync(橙色高亮),来源 Comment 为 update helm chart。

    DIFF 视图显示容器镜像从 registry.cn-hangzhou.aliyuncs.com/xxx/echo-server:v1.0 变更为 registry.cn-hangzhou.aliyuncs.com/xxx/echo-server:v2.0,确认差异无误后单击右上角 SYNC 按钮将应用同步至最新版本。

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

    Argo CD 应用详情树视图显示 echo-server 应用同步状态为 Synced,健康状态为 Healthy,Pod 镜像为 registry.cn-hangzhou.aliyuncs.com/haoshuwei24/echo-server:v2.0。

  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,查看应用的所有历史版本。

    在 Argo CD 应用详情页顶部工具栏中,单击 HISTORY AND ROLLBACK 按钮,打开版本历史面板。

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

    选择 image.tag 为 v1.0 的历史版本,单击右侧三点菜单,选择 Rollback 执行回滚。

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

    说明

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

通过ArgoCD CLI部署应用

  1. 登录ArgoCD Server。

    1. 使用舰队KubeConfig,执行以下命令,获取ArgoCD Server LB IP。

      kubectl get svc -nargocd argocd-server -ojsonpath='{.status.loadBalancer.ingress[0].ip}'
    2. 执行以下命令,获取admin密码。

      kubectl -nargocd get secret argocd-initial-admin-secret -ojsonpath='{.data.password}' |base64 -d
    3. 登录ArgoCD Server。

      argocd login <argocd server lb ip>
      Username: admin
      Password:
      'admin:login' logged in successfully
      Context '<argocd server lb ip>' updated
  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。

相关文档