使用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 私钥

      添加成功后,该页面会显示GitCONNECTION STATUSSuccessful

      连接成功后,仓库连接列表中显示类型为 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

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

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

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

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

      同步完成后,应用详情页显示 APP HEALTHHealthyCURRENT SYNC STATUSSynced,表示应用已成功同步且运行健康。资源树展示从 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、ServicePod资源。

    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 ServiceExternal-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 显示 HealthyCURRENT 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.tagv1.0 的历史版本,单击右侧三点菜单,选择 Rollback 执行回滚。

    此时,Pod Image Tag已经回滚到v1.0,由于ArgoCDGit 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

相关文档