deepwzh的技术笔记
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • 云原生
  • Helm
  • Etcd
  • harbor
  • 学习资料
  • Fass
  • argo

    • argo
    • Argo cli 用法
  • Docker

    • Docker
    • docker 镜像打包
    • docker 镜像加速
    • 常用命令
    • 进阶 docker 资料
    • distribution/distribution
    • Docker
    • dockerfile 与镜像构建
  • K8s

    • K8s
    • 日志收集
    • 服务网格
    • 常用命令
    • 污点与容忍度
    • Kubectl
    • 应用发布
    • 存储
    • Cert-Manager
    • K8s Pod 生命周期与健康检查
    • 负载均衡器
    • 压力节点驱逐
    • Helm chart
    • 准入控制器

argo

概述

Argo CD 是用于 Kubernetes 的声明式 GitOps 持续交付工具。

核心概念

  • 遵循 GitOps 模式:以 Git 仓库作为定义所需应用程序状态的真实来源,将 Kubernetes 配置清单等存储在 Git 仓库中,通过对 Git 仓库的操作来管理应用程序的部署和更新。
  • 声明式部署:用户只需在 Git 仓库中声明应用程序的期望状态,Argo CD 会自动将应用程序部署到指定的目标环境中,确保实际运行状态与期望状态一致。

工作原理

  • Kubernetes 控制器:Argo CD 被实现为 Kubernetes 控制器,它持续监视正在运行的应用程序,将当前的活动状态与 Git 存储库中指定的所需目标状态进行比较。当已部署应用程序的运行状态偏离目标状态时,Argo CD 会将其视为 OutOfSync,并报告和可视化差异,同时提供自动或手动方式将实时状态同步回所需目标状态的功能。
  • 跟踪更新:应用程序部署可以跟踪 Git 提交时对分支、标签的更新,或固定到清单的特定版本,从而实现对应用程序版本的精确控制。

主要特性

  • 支持多种配置管理工具:支持原始的 k8s 配置、Kustomize、Helm、Jsonnet 等多种配置管理/模板工具,方便用户根据不同的项目需求选择合适的配置管理方式。
  • 多集群管理:能够管理和部署到多个集群,实现对多个 Kubernetes 集群的统一管理和应用程序部署。
  • 身份认证与授权:支持 SSO 集成,包括 OIDC、OAuth2、LDAP、SAML 2.0、GitHub、GitLab、Microsoft、LinkedIn 等,同时提供多租户和 RBAC 授权策略,确保系统的安全性和访问控制。
  • 自动配置漂移检测和可视化:可以自动检测应用程序配置的漂移情况,并通过 Web UI 进行可视化展示,让用户及时了解应用程序的状态变化。
  • 丰富的操作功能:提供自动或手动将应用程序同步到所需状态的功能,支持在任何地方回滚/滚动到 Git 存储库中提交的任何应用程序配置,还具备应用程序资源的健康状况分析、审核跟踪等功能。
  • Web UI 和 CLI:提供 Web UI,提供应用程序活动的实时视图,方便用户进行可视化操作和管理;同时提供 CLI,用于自动化和 CI 集成,满足不同用户的操作需求。

应用场景

  • 云原生应用部署:适用于云原生应用的持续交付,帮助开发团队快速、高效地将应用程序部署到 Kubernetes 集群中,并实现对应用程序生命周期的自动化管理。
  • 多环境部署:可以轻松管理不同环境(如开发、测试、生产等)中的应用程序部署,确保应用程序在各个环境中的一致性和稳定性。
  • 复杂应用部署:通过 PreSync、Sync、PostSync 钩子等功能,支持复杂的应用程序部署场景,如蓝/绿发布和金丝雀升级等,降低应用程序升级的风险。

Application

Application(应用程序)是 Argo CD 中用于表示和管理部署到 Kubernetes 集群的应用的核心概念。

  1. 定义和配置:一个 Argo CD 的 Application 是通过 YAML 文件进行定义的,该文件描述了应用程序的基本信息,如名称、所在的命名空间、关联的 Git 仓库、目标 Kubernetes 集群、以及要部署的 Kubernetes 资源清单的路径等。例如:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
    name: my-app
    namespace: argocd
spec:
    destination:
        namespace: my-app-namespace
        server: https://my-kubernetes-cluster-api-server
    source:
        path: manifests/my-app
        repoURL: https://github.com/my-org/my-app-repo.git
        targetRevision: main
    project: default

上述配置定义了一个名为 my-app 的应用程序,将部署到指定的 Kubernetes 集群的 my-app-namespace 命名空间中,应用程序的资源清单位于指定 Git 仓库的 manifests/my-app 路径下,并且跟踪 main 分支的最新更改。

  1. 同步和部署:一旦 Application 被创建并提交到 Argo CD,Argo CD 会定期检查关联的 Git 仓库,查看是否有新的更改。如果发现有更新,Argo CD 会自动将最新的资源清单应用到目标 Kubernetes 集群,实现应用程序的同步和部署。用户也可以手动触发同步操作,以立即应用最新的更改。
  2. 状态监控和可视化:Argo CD 提供了直观的用户界面,用于监控 Application 的状态。用户可以查看应用程序的部署历史、当前状态(如是否已成功部署、是否存在错误等)、以及与目标状态的差异。Argo CD 还会显示每个 Kubernetes 资源的详细信息,帮助用户快速识别和解决问题。
  3. 滚动更新和回滚:对于应用程序的更新,Argo CD 支持滚动更新策略,逐步将新版本的应用程序部署到集群中,同时监控应用的健康状况。如果在更新过程中出现问题,Argo CD 允许用户轻松地回滚到之前的版本,恢复应用程序的稳定状态。
  4. 多环境管理:Argo CD 可以管理多个环境(如开发、测试、生产等)中的应用程序。通过在不同的 Application 配置中指定不同的目标集群和环境特定的配置,用户可以在不同环境之间轻松地推广应用程序,同时确保每个环境的配置和部署策略符合其特定需求。

使用多个应用源

比如可以将 chart 和 values 文件分开

多个应用源 - Argo CD - Kubernetes 的声明式 GitOps CD --- Multiple Sources for an Application - Argo CD - Declarative GitOps CD for Kubernetes

apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
  sources:
  - repoURL: 'https://prometheus-community.github.io/helm-charts'
    chart: prometheus
    targetRevision: 15.7.1
    helm:
      valueFiles:
      - $values/charts/prometheus/values.yaml
  - repoURL: 'https://git.example.com/org/value-files.git'
    targetRevision: dev
    ref: values

子文档

  • [Argo cli用法](./Argo cli用法.md)
Next
Argo cli 用法