一个计算机技术爱好者与学习者

0%

Argo CD入门篇

1. Argo CD是啥?

What Is Argo CD? Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.
Why Argo CD? Application definitions, configurations, and environments should be declarative and version controlled. Application deployment and lifecycle management should be automated, auditable, and easy to understand.

Argo CD是什么?Argo CD是一个声明式的基于GitOps的用于K8S的持续交付工具。
为什么要使用Argo CD?应用定义、配置和环境都应该被声明和版本控制。应用部署和生命周期管理都应该是自动的、可审计的、易理解的。

Argo CD 遵循 GitOps 模式,使用 Git 仓库作为定义所需应用程序状态的真实来源,Argo CD 支持多种 Kubernetes 清单:

  • kustomize
  • helm charts
  • ksonnet applications
  • jsonnet files
  • Plain directory of YAML/json manifests
  • Any custom config management tool configured as a config management plugin
    Argo CD 可在指定的目标环境中自动部署所需的应用程序状态,应用程序部署可以在 Git 提交时跟踪对分支、标签的更新,或固定到清单的指定版本。

参考文档:

2. GitOps是啥?

上一节中提到了GitOps,这是个啥?
在聊GitOps之前,先聊一下DevOps

DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

DevOps简单来说,就是敏捷思维(版本更新又快又好)!为了实现敏捷,需要标准和规范,需要开发、测试、运维合作,需要自动化。

而GitOps,正是基于敏捷思维而诞生的一种持续交付方式,能够用声明的方式优雅地进行CICD。
1、源码存储于Git源码仓库,开发人员推送提交包含新功能的代码到代码仓库的对应分支中;代码审核通过后将被合并至对应分支。
2、合并请求通过后会触发构建并进行测试,构建好的镜像将被推送至镜像仓库中。
3、GitOps检测到有新的镜像,会提取最新的镜像标记,然后同步到Git配置仓库(Config)的清单中。
4、GitOps检测到集群状态过期,会从配置仓库中拉取更新后的清单,并将包含新功能的镜像通过部署到集群里。

对于不同环境而言,可以在Config仓中创建多个子目录或者子分支管理不同环境对应的多个集群,从而实现多环境的GitOps。

更多内容参考浅谈GitOps

3. Argo CD架构

  • API Server是一个 gRPC/REST server,它开放了 Web UI、CLI 和 CI/CD 系统使用的 API。
  • Repository Server是一个内部服务,它维护应用清单的Git仓库的本地缓存,负责生成和返回 Kubernetes 清单。
  • Application Controller是一个 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的活动状态与所需的目标状态(如 repo 中指定的)进行比较,检测 OutOfSync 应用程序状态并可选择采取纠正措施。负责为生命周期事件(PreSync、Sync、PostSync)调用用户定义的钩子。

以上是官方给的argocd架构图和说明,详情参考Architectural Overview
这个架构图不太友好,没有明显体现出argocd监听git仓库。

下面再看一个比较友好的argocd架构图:

CI流水线触发更新Git仓库中的K8S应用清单,或者工程师直接修改Git仓库中的K8S应用清单,Argo CD都会自动拉取最新的配置并应用到K8S集群中。详情参考Argo CD 入门教程

4. 触发Argo CD同步的方式

触发Argo CD同步有三种方式:

  • 手动:在页面上点击触发同步,或者使用CLI触发同步
  • 自动:配置后自动触发同步
  • Webhook:Git仓库更新后,通过Webhook告知Argo CD触发同步。详情参考文档Git Webhook Configuration

5. Argo CD使用方法

5.1. Argo CD使用概述

1、准备一个git仓库,作为存放k8s yaml资源清单的仓库
2、创建一个argocd应用,关联git仓库的分支和路径,关联k8s集群
3、触发同步,把git仓库中的资源清单apply到k8s集群

参考文档:

5.2. 准备git仓库

创建一个git仓库,包含k8s资源清单(一般是kustomization文件)。
使用这些资源清单可以在k8s中创建和变更deployment、service等资源对象(不使用argocd,直接使用kubectl也可以)。

git仓库参考:voidking/argocd-demo

kustomize相关知识点参考:《Kustomize工具》

5.3. 配置argocd应用

通过argocd的client或者UI界面,配置一个argocd应用。
应用会指定git仓库、路径,这样就知道使用哪些资源清单了。
应用还会指定k8s集群,这样就知道在哪个集群中创建和变更资源对象了。

Automated SYNC POLICY​​​:

  • RRUNE RESOURCES​​:自动修剪。集群上某个资源在 GitRepo 中找不到对应的配置时,自动删除集群上的该资源。
  • SELF HEAL​​:自愈。因各种原因(如手动修改)集群上资源的实时状态而导致与 GitRepo 不匹配时,自动将实际状态与 GitRepo 的期望状态同步。不勾选时,虽然也会进行自动同步的探测,但是只有当GitRepo中清单发生变化时,才会触发k8s资源变更。
  • 自动同步时间间隔:默认180s。详情参考文档Automated Sync Policy default interval value

SYNC OPTIONS:
​- SKIP SCHEMA VALIDATION​​:是否执行资源规范格式的校验。
​​- AUTO-CREATE NAMESPACE​​:自动创建命名空间。
​​- PRUNE LAST​​:在同步操作的最后在执行修剪操作,即其他资源已经部署且转为健康状态后再进行 prune
​​- APPLY OUT OF SYNC ONLY​​​:仅对那些处于 ​​OutOfSync​​​ 状态的资源执行同步操作。
​​- REPLACE​​:将使用 kubectl replace/create 命令同步资源,而非默认的 apply
​​- PRUNE PROPAGATION POLICY​​:资源修剪传播策略,默认值使用 foreground 策略,还有 background 和 orphan
​​- RESPECT IGNORE DIFFERENCES​​​:在同步阶段忽略期望状态的字段。例如我们有个 deployment,里面的 replicas 为 20,代表我们期望的 pod 数量为 20 个,但如果我们进行灰度发布的时候,可能多,也可能少。这个时候,如果不勾选 ​​RESPECT IGNORE DIFFERENCES​​ ,就会导致灰度发布出现问题,所以这时候我们最好是勾选上该参数。

5.4. 资源创建/变更

配置完成,点击同步,argocd就会从git仓库获取最新的配置清单,apply到k8s集群。
如果配置了自动同步,那么默认3分钟自动同步一次,可以修改timeout.reconciliation字段修改同步间隔。

6. 添加新集群

一个argocd server,可以管理多个k8s集群。
添加新集群的流程如下:

1、准备新集群的kubeconfig文件

  • kubeconfig 文件名随意,例如 newkubeconfig
  • 修改 contexts.name 和 current-context 为想要在argocd中展示的名称,例如 test-k8s

2、验证修改后的kubeconfig

1
2
KUBECONFIG=newkubeconfig kubectl config get-contexts -o name
KUBECONFIG=newkubeconfig kubectl get nodes

3、执行添加新集群命令

1
KUBECONFIG=newkubeconfig argocd cluster add test

4、验证新集群是否添加成功
访问argocd server,查看集群列表
https://argocd.voidking.com/settings/clusters

7. 问题记录

7.1. Token is expired

问题描述:执行argocd app list命令,报错:

1
FATA[0000] rpc error: code = Unauthenticated desc = invalid session: Token is expired

解决办法:重新登录argocd server

1
2
3
argocd login argocd.voidking.com --grpc-web
# or
argocd login localhost:31080 --grpc-web
  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-argocd-start/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~