【GitOps】初始Argo CD
初始Argo CD
文章目录
- 初始Argo CD
- 一、初始Argo CD
- 1.1、什么是Argo CD
- 1.2、为什么选择Argo CD
- 1.3、运作方式
- 1.4、特征
- 1.5、核心概念
- 二、部署Argo CD
- 2.1、下载yaml文件apply
- 2.2、安装Argo CD CLI工具
- 2.3、Ingress服务暴露Argo CD
- 2.4、访问Web UI
- 2.5、修改密码
一、初始Argo CD
1.1、什么是Argo CD
- Argo CD适用于 Kubernetes 的声明性 GitOps 持续交付工具。
1.2、为什么选择Argo CD
- 应用程序定义、配置和环境应该是声明性的和版本控制的。应用程序部署和生命周期管理应该是自动化的、可审计的且易于理解的。
1.3、运作方式
-
Argo CD 遵循
GitOps
模式,使用 Git 存储库作为定义 所需的应用程序状态。可以通过多种方式指定Kubernetes 清单:- Kustomize 应用程序
- Helm 图表
- Jsonnet 文件
- YAML/json 清单的plain 目录
- 任何配置位配置管理插件自定义配置管理工具
-
Argo CD可再指定的目标环境中自动部署所需的应用程序状态。应用程序部署可以跟踪对分支、标签或固定到特定版本的Git提交时显现。
-
架构如下
-
Argo CD作为Kubernetes控制器实现,持续监控正在运行的应用程序,并将当前实时状态与所需的目标状态(在Git存储库中指定)进行比较。如果已部署的应用程序的实时状态偏离目标状态,则视为。Argo CD 报告并可视化差异,同时提供自动或手动将Live状态同步回所需的Target状态。对所需的目标状态可以自动应用并反映在指定的目标中环境。
OutOfSync
1.4、特征
-
自动将应用程序部署到指定的目标环境
-
支持多种配置管理/模板管理(Kustomize、Helm、Jsonnet、plain-YAML)
-
能够管理和部署到多个集群
-
SSO集成(OIDC 、OAuth2、LDAP、SAML 2.0、GitHub、GitLab、Microsoft、Linkedln)
-
用于授权的多租户和RBAC策略
-
回滚/滚动到Git存储库中提交的任何应用程序配置
-
应用程序资源部的健康状态分析
-
自动配置偏差检测和可视化
-
自动或手动将应用程序同步到所需状态
-
Web UI,提供应用程序活动的实时视图
-
用于自动化的访问令牌
-
PreSync、Sync、PostSync钩子以支持复杂的应用程序推出(例如蓝绿和金丝雀升级)
-
应用程序事件和API调用的审计跟踪
-
Prometheus指标
-
在Git中覆盖helm参数的参数覆盖
1.5、核心概念
- 假设你熟悉核心Git 、Docker、Kubernetes、持续交付和GitOps概念。以下是一些特定于Argo CD的概念。
- 应用由清单定义的一组Kubernetes资源。这是自定义资源定义(CRD)
- 应用程序源类型使用哪个工具构建应用程序
- 目标状态应用程序的所需状态,由Git存储库中的文件表示
- 实时状态该应用程序的实时状态。部署了哪些Pod等
- 同步状态Live状态是否与目标 state 匹配。部署的应用程序是否与Git所说的相同?
- 同步使应用程序移动到其目标状态的过程。例如,通过将更改应用于Kubernetes集群
- 同步操作状态同步是否成功
- 刷新将Git中的最新代码于live状态进行比较。找出不同之处
- 健康应用程序的运行状态,它是否正常运行?它是否可以处理请求
- 工具用于从文件目录创建清单的工具。例如Kustomize
二、部署Argo CD
- 根据官方给到的部署方式进行部署
2.1、下载yaml文件apply
[root@master ~]# wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml[root@master ~]# sed -i 's/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g' install.yaml[root@master ~]# kubectl create namespace argocd[root@master ~]# kubectl apply -n argocd -f install.yaml
# 查看部署资源是否成功
[root@master ~]# kubectl get pod,svc -n argocd
NAME READY STATUS RESTARTS AGE
pod/argocd-application-controller-0 1/1 Running 0 15s
pod/argocd-applicationset-controller-79479fbfb7-sgdxb 1/1 Running 0 16s
pod/argocd-dex-server-656c7f9f99-wbtsl 1/1 Running 0 16s
pod/argocd-notifications-controller-d9b6dbbdd-pfchm 1/1 Running 0 16s
pod/argocd-redis-67cf5f45bf-ljkbn 1/1 Running 0 15s
pod/argocd-repo-server-57cfd8c87b-pm6cm 1/1 Running 0 15s
pod/argocd-server-847795b7c7-xphht 1/1 Running 0 15sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argocd-applicationset-controller ClusterIP 10.100.160.75 <none> 7000/TCP,8080/TCP 16s
service/argocd-dex-server ClusterIP 10.101.167.8 <none> 5556/TCP,5557/TCP,5558/TCP 16s
service/argocd-metrics ClusterIP 10.109.205.190 <none> 8082/TCP 16s
service/argocd-notifications-controller-metrics ClusterIP 10.107.167.164 <none> 9001/TCP 16s
service/argocd-redis ClusterIP 10.102.136.73 <none> 6379/TCP 16s
service/argocd-repo-server ClusterIP 10.100.96.159 <none> 8081/TCP,8084/TCP 16s
service/argocd-server ClusterIP 10.107.223.8 <none> 80/TCP,443/TCP 16s
service/argocd-server-metrics ClusterIP 10.99.250.186 <none> 8083/TCP 16s
2.2、安装Argo CD CLI工具
[root@master ~]# curl -sSL -o /usr/local/bin/argocd https://ghproxy.com/https://github.com/argoproj/argo-cd/releases/download/v2.8.4/argocd-linux-amd64
[root@master ~]# chmod +x /usr/local/bin/argocd[root@master ~]# argocd version
argocd: v2.8.4+c279299BuildDate: 2023-09-13T19:43:37ZGitCommit: c27929928104dc37b937764baf65f38b78930e59GitTreeState: cleanGoVersion: go1.20.7Compiler: gcPlatform: linux/amd64
FATA[0000] Argo CD server address unspecified
2.3、Ingress服务暴露Argo CD
- Argo CD会运行一个 gRPC 服务(由 CLI 使用)和HTTP/HTTPS 服务(UI使用),这两种协议都由 argocd-server服务在 80 和 443 端口进行暴露,不过因为 Argo CD 本身支持了一个 gRPC 的方式,所以,如果要用一个Ingress规则去暴露它,则需要配置一个注解(以Ingress-nginx为例)ssl-passthrough,但是这个透传需要在 ingress 控制器上开启这功能,这里选择两个规则。
[root@master ~]# cat argocd_ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: argocd-server-http-ingressnamespace: argocdannotations:nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:ingressClassName: "nginx"tls:- hosts:- argocd.devops-engineer.com.cnsecretName: argocd-secretrules:- host: argocd.devops-engineer.com.cnhttp:paths:- path: /pathType: Prefixbackend:service:name: argocd-serverport:name: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: argocd-server-grpc-ingressnamespace: argocdannotations:nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
spec:ingressClassName: "nginx"tls:- hosts:- grpc.argocd.devops-engineer.com.cnsecretName: argocd-secretrules:- host: grpc.argocd.devops-engineer.com.cnhttp:paths:- path: /pathType: Prefixbackend:service:name: argocd-serverport:name: https
# 加载资源
[root@master ~]# kubectl apply -f argocd_ingress.yaml
ingress.networking.k8s.io/argocd-server-http-ingress created
ingress.networking.k8s.io/argocd-server-grpc-ingress created
# 自签证书,需要在 argocd-server 的 deployment 中添加一个args
[root@master ~]# kubectl edit -n argocd deployment argocd-servercontainers:- args:- /usr/local/bin/argocd-server- --insecure # 添加这一行
2.4、访问Web UI
注意
:需要与ingress现实的物理IP做域名解析(hosts)- 访问地址:https://argocd.devops-engineer.com.cn
- 用户名:admin
- 密码:
kubectl get secrets -n argocd argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
2.5、修改密码
[root@master ~]# echo "192.168.93.147 argocd.devops-engineer.com.cn" >> /etc/hosts
[root@master ~]# argocd login argocd.devops-engineer.com.cn
WARNING: server certificate had error: tls: failed to verify certificate: x509: certificate is valid for ingress.local, not argocd.devops-engineer.com.cn. Proceed insecurely (y/n)? y
WARN[0001] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
Username: admin
Password: # kubectl命令回显的默认密码
'admin:login' logged in successfully
Context 'argocd.devops-engineer.com.cn' updated
# 修改秘密
# YjTca4bgrAQOHgQR:旧密码
# wzh.2005:新密码
[root@master ~]# argocd account update-password --current-password YjTca4bgrAQOHgQR --new-password wzh.2005
WARN[0000] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
Password updated
Context 'argocd.devops-engineer.com.cn' updated
- 使用新密码登录