1、介绍
Argo CD 是用于 Kubernetes 的声明式 GitOps 持续交付工具。应用程序定义、配置和环境应该是声明性的和版本控制的。应用程序部署和生命周期管理应该是自动化的、可审计的和易于理解的。
2、核心概念
- 应用程序清单定义的一组 Kubernetes 资源。这是自定义资源定义 (CRD)。
- 应用程序源类型用于构建应用程序的工具。
- 目标状态应用程序的所需状态,由 Git 存储库中的文件表示。
- 实时状态该应用程序的实时状态。部署了哪些 pod 等。
- 同步状态实时状态是否与目标状态匹配。部署的应用程序是否与 Git 所说的一样?
- 同步使应用程序移动到其目标状态的过程。例如,通过对 Kubernetes 集群应用更改。
- 同步操作状态 同步是否成功。
- 刷新将 Git 中的最新代码与实时状态进行比较。弄清楚有什么不同。
- 运行状况 应用程序的运行状况,是否正常运行?它可以服务请求吗?
- 工具从文件目录创建清单的工具。例如自定义。请参阅应用程序源类型。
- 配置管理工具请参阅工具。
- 配置管理插件自定义工具。
3、架构图
API 服务器:
API 服务器是一个 gRPC/REST 服务器,它公开了 Web UI、CLI 和 CI/CD 系统使用的 API。它具有以下职责:
- 应用程序管理和状态报告
- 调用应用程序操作(例如同步、回滚、用户定义的操作)
- 存储库和集群凭证管理(存储为 K8s 机密)
- 对外部身份提供者的身份验证和授权委托
- RBAC 强制执行
- Git webhook 事件的监听器/转发器
存储库服务器:
存储库服务器是一个内部服务,它维护保存应用程序清单的 Git 存储库的本地缓存。当提供以下输入时,它负责生成和返回 Kubernetes 清单:
- 存储库 URL
- 修订(提交、标签、分支)
- 申请途径
- 模板特定设置:参数、掌舵值.yaml
应用控制器:
应用程序控制器是一个 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的活动状态与所需的目标状态(如 repo 中指定的)进行比较。它检测OutOfSync应用程序状态并可选择采取纠正措施。它负责为生命周期事件(PreSync、Sync、PostSync)调用任何用户定义的钩子
4、安装部署
argocd安装支持通过以下三种方式:
Kustomize自定义
helm方式
Argo CD Operator
本文通过Operator的方式来部署,因为功能更加强大,支持以下能力:
- 使用健全的默认设置轻松配置和安装 Argo CD 组件,以便快速启动和运行。
- 提供对 Argo CD 组件的无缝升级。
- 能够从某个时间点或定期计划备份和恢复 Argo CD 集群。
- 使用 Prometheus 和 Grafana 聚合和公开 Argo CD 和操作员本身的指标。
- 根据需要自动缩放 Argo CD 组件以处理需求的变化。
安装 Operator Lifecycle Manager (OLM),这是一个帮助管理集群上运行的 Operator 的工具。
curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.21.2/install.sh | bash -s v0.21.2
查看结果 :
kubectl get pod -n olm
NAME READY STATUS RESTARTS AGE
catalog-operator-5c97cb66c6-fbc69 1/1 Running 0 9m1s
olm-operator-75c8b84b97-9w5qz 1/1 Running 0 9m1s
operatorhubio-catalog-xz4wm 1/1 Running 0 7m13s
packageserver-6cd5c64dbd-qjgf4 1/1 Running 0 7m11s
packageserver-6cd5c64dbd-sphwl 1/1 Running 0 7m11s
部署Argo CD Operator
kubectl create -f https://operatorhub.io/install/argocd-operator.yaml
查看结果:
kubectl get pod -n operators
NAME READY STATUS RESTARTS AGE
argocd-operator-controller-manager-75469cd9d5-6bgk4 2/2 Running 0 96s
kubectl get csv -n operators
NAME DISPLAY VERSION REPLACES PHASE
argocd-operator.v0.4.0 Argo CD 0.4.0 argocd-operator.v0.3.0 Succeeded
创建命名空间argocd,用来部署argocd服务
kubectl create ns argocd
要使用Argo CD,还需要自定义资源定义CRD以使用它。
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
namespace: argocd
name: argocd
spec: {}
查看结果:
kubectl get pod -n argocd
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 66m
argocd-redis-869c8d495b-jr5fv 1/1 Running 0 66m
argocd-repo-server-5fd5485fbf-lwfsm 1/1 Running 0 66m
argocd-server-6c759b5cd9-cprmp 1/1 Running 0 66m
查看argocd的登录密码
kubectl -n argocd get secret argocd-cluster -o jsonpath="{.data.admin\.password}" | base64 -d; echo
将 argocd-server 服务类型更改为 NodePort
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
登录argocd
默认用户名为:admin
默认用户密码为:上面获取到的密码
登录地址:https://IP+PORT
评论区