体验 Argo CD

  • Argo CD 是什么
  • Argo CD 核心概念
    • Application
    • Project
  • Argo CD 架构
  • 安装 Argo CD CLI
  • 部署应用
  • 使用用户界面检查应用程序
  • 安装 Argo Rollouts 和 Kubectl Plugin
  • Argo Rollouts 示例体验

Argo CD 是什么

Argo CD 是一款针对 Kubernetes 的开源 GitOps Operator,它是 Argo 家族中的一员。Argo CD 专注于应用程序交付的使用场景。在 2020 年,Argo CD 被云原生计算基金会(CNCF)接纳为孵化级托管项目,现在已经是毕业项目。

Argo CD 核心概念

为了有效使用 Argo CD,我们应该了解两个基本概念:应用(Application)和项目(Project)。

Application

Application 提供了 Kubernetes 资源的逻辑分组,并定义了资源清单的源和目标。

Application 的源包括仓库 URL 和仓库种的目录。仓库通常包括多个目录,每个应用程序环境可能会有一个(例如 QA 和 Prod)。
目录不一定包含纯 YAML 文件。Argo CD 不捆绑任何配置管理工具,反倒是为多种配置管理工具提供优秀的支持。因此,该目录可能不但包含一个 Helm Chart 的定义,还有由 Kustomize 覆盖处理的 YAML 文件。
Application 目标(destination)定义了资源需要部署的位置,包括目标 Kubernetes 集群的 API 服务器 URL 以及集群内命名空间的名称。命名空间的名称用于标识应用程序资源的目标命名空间。

Project

Argo CD 引入了 Project 这一抽象,一支撑不同访问级别的多个团队。
Project 提供了 Application 的逻辑分组,,将团队间彼此隔离,支持每个 Project 中访问控制的细粒度调整。


除了分离应用集之外,Project 还提供了以下功能集:

  • 约束 Project 里的 Application 可以使用哪些 Kubernetes 集群和 Git 仓库
  • 约束 Project 里的 Application 可以部署哪些 Kubernetes 资源

Argo CD 架构

Argo CD 由实现 GitOps 协商周期阶段的三个主要组件组成:argocd-repo-server 从 Git 中检索清单;argocd-application-contrller 将来自 Git 的清单与 Kubernetes 集群中的资源进行比较; argocd-api-server 向用户呈现协商结果。

安装 Argo CD CLI

执行下面命令安装 Argo CD CLI,

curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

执行下面命令进行登录,

argocd login argocd.default.172.18.0.231.nip.io
Username: admin
Password:'admin:login' logged in successfully

部署应用

Argo CD 一旦成功运行,就可以部署第一个第一个应用程序。
要部署 Argo CD 应用程序,我们需要指定包含部署清单的 Git 仓库,并以 Kubernetes 集群和命名空间作为目标。
要以该练习创建 Git 仓库,请打开以下 Github 仓库并创建一个仓库复刻(Fork),

https://github.com/engchina/sample-app-deployment

由于我们已经安装并配置了 Argo CD CLI,那就使用它来部署应用程序。
继续并执行以下命令来创建一个应用程序:

argocd app create sample-app \
--repo https://github.com/engchina/sample-app-deployment \
--path . \
--dest-server https://kubernetes.default.svc \
--dest-namespace default

执行下面命令获取 sample-app 应用的状态信息,

argocd app get sample-app --grpc-web

输出示例,

Name:               argocd/sample-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.default.172.18.0.231.nip.io/applications/sample-app
Repo:               https://github.com/engchina/sample-app-deployment
Target:
Path:               .
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        OutOfSync from  (a301fbe)
Health Status:      MissingGROUP  KIND        NAMESPACE  NAME        STATUS     HEALTH   HOOK  MESSAGEService     default    sample-app  OutOfSync  Missing
apps   Deployment  default    sample-app  OutOfSync  Missing

在命令的输出中我们可以看到,应用程序不同步且不健康。
对于资源的部署,我们可以使用同步策略配置自动化的应用程序同步,也可以是手动触发同步。
执行下面命令触发同步并部署资源,

argocd app sync sample-app --grpc-web

输出示例,

TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS    HEALTH        HOOK  MESSAGE
2023-03-17T10:58:27+08:00            Service     default            sample-app  OutOfSync  Missing
2023-03-17T10:58:27+08:00   apps  Deployment     default            sample-app  OutOfSync  Missing
2023-03-17T10:58:28+08:00            Service     default            sample-app    Synced  Healthy
2023-03-17T10:58:28+08:00            Service     default            sample-app    Synced   Healthy              service/sample-app created
2023-03-17T10:58:28+08:00   apps  Deployment     default            sample-app  OutOfSync  Missing              deployment.apps/sample-app created
2023-03-17T10:58:28+08:00   apps  Deployment     default            sample-app    Synced  Progressing              deployment.apps/sample-app createdName:               argocd/sample-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.default.172.18.0.231.nip.io/applications/sample-app
Repo:               https://github.com/engchina/sample-app-deployment
Target:
Path:               .
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        Synced to  (a301fbe)
Health Status:      ProgressingOperation:          Sync
Sync Revision:      a301fbe40e35f908800e0e39567d245f8ca1d9b3
Phase:              Succeeded
Start:              2023-03-17 10:58:27 +0800 CST
Finished:           2023-03-17 10:58:28 +0800 CST
Duration:           1s
Message:            successfully synced (all tasks run)GROUP  KIND        NAMESPACE  NAME        STATUS  HEALTH       HOOK  MESSAGEService     default    sample-app  Synced  Healthy            service/sample-app created
apps   Deployment  default    sample-app  Synced  Progressing        deployment.apps/sample-app created

一旦触发同步,Argo CD 将存储在 Git 中的清单推送到 Kubernetes 集群,然后重新评估应用程序的状态。同步完成后,最终的应用程序状态将输出到控制台。
再次执行下面命令获取 sample-app 应用的状态信息,

Name:               argocd/sample-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.default.172.18.0.231.nip.io/applications/sample-app
Repo:               https://github.com/engchina/sample-app-deployment
Target:
Path:               .
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        Synced to  (a301fbe)
Health Status:      HealthyGROUP  KIND        NAMESPACE  NAME        STATUS  HEALTH   HOOK  MESSAGEService     default    sample-app  Synced  Healthy        service/sample-app created
apps   Deployment  default    sample-app  Synced  Healthy        deployment.apps/sample-app created

可以看到示例应用程序已成功同步,并且每个结果都与预期状态匹配。

使用用户界面检查应用程序

Argo CD 提供了一个用户友好的 Web 界面。使用 Web 界面,你可以获得跨多个集群部署的所用应用程序的高级视图,以及有关每个应用程序资源非常详细的信息。
应用列表页面提供所用已部署应用程序相关的高级信息,包括运行状态和同步状态。使用此页面,你可以快速发现任何应用程序是否已降级或存在配置偏差。用户界面专为大型企业设计,能够处理数百个应用程序。你可以使用搜索和各种过滤器快速找到所需的应用程序。

应用详情页面将应用程序的资源层次化结构可视化,并提供有关同步状态和健康状态的其他详细信息。
资源树的根元素是应用本身,第二个层次由托管资源组成。托管资源是在 Git 中清单定义的资源,并由 Argo CD 显示地控制。

安装 Argo Rollouts 和 Kubectl Plugin

安装 Argo Rollouts,

kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml

安装 argo rollouts 的 kubectl plugin,

curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64chmod +x ./kubectl-argo-rollouts-linux-amd64
sudo mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rolloutskubectl argo rollouts version

配置命令补全,

source <(kubectl-argo-rollouts completion bash)

Argo Rollouts 示例体验

首先,我们部署一个 Rollout 资源和一个针对该 Rollout 的 Kubernetes 服务。本指南中的示例 Rollout 利用金丝雀更新策略,该策略将 20% 的流量发送到金丝雀, 然后是手动推广,最后是其余部分逐渐自动增加流量 的升级。Rollout 规范的以下部分描述了此行为,

spec:replicas: 5strategy:canary:steps:- setWeight: 20- pause: {}- setWeight: 40- pause: {duration: 10}- setWeight: 60- pause: {duration: 10}- setWeight: 80- pause: {duration: 10}

运行以下命令以部署初始 Rollout 和服务,

kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/rollout.yaml
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/service.yaml

任何部署的初始创建将立即将副本扩展到 100%(跳过任何金丝雀升级步骤、分析等)因为没有发生升级。

Argo Rollouts kubectl 插件允许您可视化 Rollout,其相关资源 (ReplicasSets、Pods、AnalysisRuns),并在发生实时状态更改时显示它们。 要在部署时观察部署,请从插件运行命令 get rollout --watch

kubectl argo rollouts get rollout rollouts-demo --watch

更新 Rollout,接下来是执行更新的时间。与部署一样,对 Pod 模板字段(spec.template)的任何更改将导致要部署新版本(即副本集)。正在更新 Rollout 涉及修改推出规范,通常使用 新版本,然后针对新清单运行。为方便起见, 推出插件提供了一个命令,该命令针对实时推出执行这些步骤就地显示。运行以下命令以使用“黄色”更新 Rollout 容器的版本,

kubectl argo rollouts set image rollouts-demo \rollouts-demo=argoproj/rollouts-demo:yellow

在推出更新期间,控制器将完成部署中定义的步骤 更新策略。示例推出将 20% 的流量权重设置为 Canary,并暂停推出 无限期,直到用户执行操作以取消暂停/升级部署。更新镜像后, 再次观察推出,直到它达到暂停状态:

kubectl argo rollouts get rollout rollouts-demo --watch


当演示推出到达第二步时,我们可以从插件中看到推出在 暂停状态,现在有 1 个副本运行新版本的 Pod 模板,以及 4 个副本运行旧版本的副本。这相当于步骤定义 setWeight: 20 的 20% 金丝雀重量。

推广推出,推出现在处于暂停状态。当推出达到没有持续时间的步骤时,它会 将无限期地保持暂停状态,直到恢复/升级。手动升级 推出到下一步,运行插件的命令,

kubectl argo rollouts promote rollouts-demo

升级后,推出将继续执行剩余步骤。其余推出步骤 在我们的示例中是完全自动化的,因此推出最终将完成步骤,直到它有 完全过渡到新版本。再次观察推出,直到完成所有步骤:

kubectl argo rollouts get rollout rollouts-demo --watch

该命令还支持 promote --full 跳过所有剩余步骤和使用标志进行分析的功能。

成功完成所有步骤后,新的副本集将被标记为“稳定”副本集。 每当在更新期间中止推出时,无论是通过失败的金丝雀分析自动中止, 或由用户手动,部署将回退到“稳定”版本。

中止推出,接下来,我们将学习如何在更新期间手动中止推出。一、部署新的“红色” 使用命令的容器版本,并等待推出到达 再次暂停步骤,

kubectl argo rollouts set image rollouts-demo \rollouts-demo=argoproj/rollouts-demo:red


这一次,我们将中止更新,而不是将推出提升到下一步,以便 回退到“稳定”版本。该插件提供了一个命令 abort 作为手动的一种方式 在更新期间随时中止推出,

kubectl argo rollouts abort rollouts-demo

当部署中止时,它将向上扩展副本集的“稳定”版本(在此 以黄色图像为例),并缩小任何其他版本。虽然稳定版的 副本集可能正在运行并且运行正常,仍会考虑整体部署, 因为所需的版本(红色图像)不是实际运行的版本。

为了使推出再次被视为正常而不是降级,有必要更改 所需状态返回到以前的稳定版本。这通常涉及针对以前的推出规范运行。在我们的例子中,我们可以简单地使用 上一个“黄色”图像。

kubectl argo rollouts set image rollouts-demo \rollouts-demo=argoproj/rollouts-demo:yellow

运行此命令后,您应该注意到推出立即变为“正常”,并且 没有关于创建新副本集的活动。


当推出尚未达到其所需状态时(例如,它已中止,或处于 更新),并且重新应用了稳定清单,推出将其检测为回滚 而不是更新,并且将通过跳过来快速跟踪稳定副本集的部署 分析和步骤。

清理,

kubectl delete  -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/rollout.yaml
kubectl delete -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/service.yaml

完结!

体验 Argo CD相关推荐

  1. 指定的网络文件夹目前是以其他用户名和密码进行映射的_使用 GitLab CI 与 Argo CD 进行 GitOps 实践

    在现在的云原生世界里面 GitOps 不断的被提及,这种持续交付的模式越来越受到了大家的青睐,我们前面也有文章详细讲解了 GitOps 的相关概念,在网上也可以找到很多关于它的资源,但是关于 GitO ...

  2. Tekton 与 Argo CD 结合实现 GitOps

    前面我们使用 Tekton 完成了应用的 CI/CD 流程,但是 CD 是在 Tekton 的任务中去完成的,现在我们使用 GitOps 的方式来改造我们的流水线,将 CD 部分使用 Argo CD ...

  3. 【 云原生 | kubernetes 】- Argo CD Gitlab身份验证及SSO单点登录

    ⚡️前言:了解OAuth协议.OAuth是一种授权协议,它可以用来保证第三方只有当获得授权的时候,才能访问授权者的权限 我们之前文章已经大概了解了Argo CD的作用和一些用法.在通过web访问时,我 ...

  4. Argo CD使用指南:如何构建一套完整的GitOps?

    随着Kubernetes继续将自己确立为容器编排的行业标准,为你的应用和工具找到使用声明式模型的有效方法是成功的关键.在这篇文章中,我们将在AWS中建立一个K3s Kubernetes集群,然后使用A ...

  5. Argo CD 使用

    一.什么是 argo cd Argo CD 是用于 Kubernetes 的声明性 GitOps 连续交付工具. 二.为什么使用 argo cd Argo CD 可在指定的目标环境中自动部署所需的应用 ...

  6. Argo CD 核心概念

    Application(应用):一组Kubernetes资源清单的统一定义,属于CRD(Custom Resource Definition,定制资源定义)资源. Application source ...

  7. Argo CD 实践教程 08

    服务账户 服务账户是我们用于身份验证自动化操作的帐户,例如CI/CD流水线.它们不应该与用户绑定,因为如果我们禁用该用户或限制其权限,我们不希望我们的流水线开始失败.服务账户应具有严格的访问控制,并且 ...

  8. Argo CD系列视频图文版之手把手教你搭建Argo CD 实验环境

    开篇 本期视频,我们一起来手把手的搭建实验环境.为了节省资源,我们部署 All-In-One K8S环境,也就是所有 kubernetes 资源,运行在一台服务器上. 视频直达 第一部分视频 第二部分 ...

  9. Argo CD系列视频图文版之Github 实现全自动化 CICD

    配套视频 开篇 本期视频,我们来解决上节课发现的两个问题.问题一是业务源码和部署清单放在同一个仓库,耦合严重.问题二,需要实现 CICD 的自动化. 第一个问题很简单,业务源码和部署清单拆分成两个仓库 ...

最新文章

  1. 今天收到上海某公司的全英文笔试题(some question of interview )
  2. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析
  3. Spring@Configuration、@Bean、@Import 、@ImportResource、@DependsOn 说明
  4. 纪念9.11十周年 奥巴马诵读圣经原文
  5. UNDO Retntion
  6. Oracle之事务和锁
  7. leetcode 167 Two Sum II - Input array is sorted
  8. ngx_connection_t结构体
  9. 3500个常用汉字表_小学常用560个汉字笔画笔顺表,打印下来,小学六年慢慢练...
  10. mysql表主键类型_mysql表结构主键类型
  11. Diffie Hellman密钥交换
  12. Useful “ifconfig” Commands to Configure Network Interface in Linux
  13. Delphi使用ReportMachine制作小计和总计报表
  14. 筑业单机版建材管理软件
  15. MySQL中文存到数据库是,springMVC保存数据到mysql数据库中文乱码问题解决方法
  16. 3 前端面试,js(上)
  17. 对SQL说不!NoSQL的数据库技术革命
  18. python青少年趣味编程-青少年趣味编程Python系列课程--2018-07-17
  19. Photoshop——多变量+文字数据组替换+批处理详细操作
  20. 送您一份《学编程笔记本电脑选购指南》,建议收藏!

热门文章

  1. 手机safari导入html书签,iPhone手机Safari浏览器书签如何同步至电脑?
  2. 学计算机要6选3选什么学科,北京新高考选科,6选3到底怎么选?
  3. Xcode10 出现 String file not found
  4. 让梦想照进现实, js dom 开心截图
  5. eMule的2个乱序加密型服务器地址
  6. 蓝桥杯java_B_2013_01 世纪末的星期
  7. Tuts4you lena‘s 40 crackme教程[1]
  8. Android获取SHA1值
  9. C编译时编码设置(UTF-8、GBK编码格式)
  10. Scratch2021年12月11日【理论】