简介
Argo CD是一个为Kubernetes而生的遵循声明书GitOps理念的持续部署工具,Argo CD可在git存储库更新时自动同步和部署应用程序。
Argo CD支持多种k8s清单:
- 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提交时跟踪对分支、标签的更新,或固定到清单的指定版本。
- 架构
Argo CD是通过一个k8s控制器来实现的,它持续watch正在运行的应用程序并将当前的实时状态与所需的目标状态(Git仓库中指定的)进行比较。状态有差异则认为是 OutOfSync 状态,Argo CD同时提供工具来自动或手动将状态同步到期望的目标状态。
核心组件
API服务:是一个gRPC/REST服务,它暴露了Web UI、CLI和CI/CD系统使用的接口,主要有以下几个功能
- 应用程序管理和状态报告
- 执行应用程序操作(如同步、回滚、用户自定义的操作)
- 存储仓库和集群凭据管理(存储为k8s secrets对象)
- 认证和授权给外部身份提供者
- RBAC
- Git webhook事件的侦听器/转发器
存库服务:这是一个内部服务,负责维护保存应用程序清单Git仓库的本地缓存。当提供以下输入时,它负责生成并返回k8s清单:
- 存储URL
- revision版本(commit、tag、branch)
- 应用路径
- 模板配置:参数、ksonnet环境、helm values.yaml等
应用控制器:是一个k8s控制器,它持续watch正在运行的应用程序并将当前的实时状态与所期望的目标状态(repo中指定的)进行比较。它检测应用程序的OutOfSync状态,并采取同步措施来同步。负责调用任何用户自定义的生命周期事件的钩子(PreSync、Sync、PostSync)
功能
- 自动部署应用程序到指定的目标环境
- 支持多种配置管理/模板工具(Kustomize、Helm、Ksonnet、Jsonnet、plain-YAML)
- 能够管理和部署到多个集群
- SSO 集成(OIDC、OAuth2、LDAP、SAML 2.0、GitHub、GitLab、Microsoft、LinkedIn)
- 用于授权的多租户和 RBAC 策略
- 回滚/随时回滚到 Git 存储库中提交的任何应用配置
- 应用资源的健康状况分析
- 自动配置检测和可视化
- 自动或手动将应用程序同步到所需状态
- 提供应用程序活动实时视图的 Web UI
- 用于自动化和 CI 集成的 CLI
- Webhook 集成(GitHub、BitBucket、GitLab)
- 用于自动化的 AccessTokens
- PreSync、Sync、PostSync Hooks,以支持复杂的应用程序部署(例如蓝/绿和金丝雀发布)
- 应用程序事件和 API 调用的审计
- Prometheus 监控指标
- 用于覆盖 Git 中的 ksonnet/helm 参数
安装
- yaml安装
1 | kubectl create namespace argocd |
- 资源查看
1 | [root@master ~]# kubectl get pod -n argocd |
- 后台登录
1 | # 查看后台初始密码,登录后请修改初始密码 |
配置
- 配置集群
1 | Argo CD支持部署应用到多集群,如需将应用部署到外部集群时需要先将外部集群的认证信息注册到Argo CD中,如内部部署(运行Argo CD的同一个集群默认不需要配置),直接使用https://kubernetes.default.svc 作为应用的k8s APIServer地址。 |
- 创建应用
1 | Git仓库选用https://github.com/argoproj/argocd-example-apps.git,这是一个包含留言簿应用程序的示例库。由于国内访问github速度慢,将其clone到gitee上。 |
2种创建方式
通过CLI创建应用
1
argocd app create guestbook --repo https://gitee.com/liyk1024/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
通过web UI(控制台)创建应用
1
2
3
4
5
6
7a.点击 +NEW APP 新建应用
b.给应用命名,使用default project,并将同步策略设置为Manual
c.配置Repository URL:https://gitee.com/liyk1024/argocd-example-apps.git
d.Revision填写master,Path填写guestbook
e.Cluster URL:https://kubernetes.default.svc,Namespace填写需要创建资源的ns
ArgoCD默认每3分钟会检测Git仓库一次,用于判断应用实际状态是否和Git中声明的期望状态一致(不一致OutOfSync)部署应用
由于上面创建应用时同步策略为Manual,所以应用创建完成后没有自动部署需手动去部署应用。同样支持CLI和UI界面2种同步方式。
2种同步方式
通过CLI同步
1
2argocd app sync guestbook #此命令从git仓库中检索资源清单并执行kubectl apply部署应用
argocd app get guestbook #查看资源状态通过UI同步
1
点击进入创建的应用,点击上方菜单栏的 SYNC 按钮进行同步。
资源查看
1
2
3
4
5
6
7[root@master ~]# kubectl get pod -l app=guestbook-ui
NAME READY STATUS RESTARTS AGE
guestbook-ui-6b689986f-8rwz7 1/1 Running 1 (4h35m ago) 47h
guestbook-ui-6b689986f-bcch6 1/1 Running 2 (4h35m ago) 2d20h
[root@master ~]# kubectl get svc -l app.kubernetes.io/instance=guestbook
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
guestbook-ui ClusterIP 10.233.8.43 <none> 80/TCP 2d20h