Argo CD实现为kubernetes控制器,它持续监视运行中的应用程序,并将当前的活动状态与期望的目标状态进行比较(如Git repo中指定的那样)。如果已部署的应用程序的活动状态偏离了目标状态,则认为是OutOfSync。Argo CD报告和可视化这些差异,同时提供了方法,可以自动或手动将活动状态同步回所需的目标状态。在Git repo中对所需目标状态所做的任何修改都可以自动应用并反映到指定的目标环境中。
Argo CD就处在如下位置:
它的优势总结如下:
应用定义、配置和环境信息是声明式的,并且可以进行版本控制;
应用部署和生命周期管理是全自动化的,是可审计的,清晰易懂;
Argo CD是一个独立的部署工具,支持对多个环境、多个Kubernetes集群上的应用进行统一部署和管理
安装Argo CD
# 创建yml目录
mkdir -p ~/argocd-yml && cd ~/argocd-yml
# 创建argocd,命名空间
kubectl create ns argocd
# 下载安装yml
wget https://github.com/argoproj/argo-cd/raw/v2.9.0/manifests/install.yaml
# 安装argocd
kubectl apply -f ~/argocd-yml/install.yaml -n argocd
# 部署argocd-Ingress,证书提前准备好,放到自己的目录
#生成argocd-Ingress的yml文件
cat > ~/argocd-yml/argocd-Ingress.yml << EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/proxy-body-size: '4G'
spec:
ingressClassName: nginx
rules:
- host: argocd.kevinspace.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server # 将所有请求发送到 argocd 服务的 80 端口
port:
number: 80
tls:
- hosts:
- argocd.kevinspace.top
secretName: argocd-ingress-tls
EOF
# 创建argocd-ingress-tls
kubectl create secret -n argocd \
tls argocd-ingress-tls \
--key=/root/ssl/kevinspace.top_nginx/kevinspace.top.key \
--cert=/root/ssl/kevinspace.top_nginx/kevinspace.top_bundle.crt
# 部署argocd-Ingress
kubectl apply -f ~/argocd-yml/argocd-Ingress.yml
# 查询argocd初始密码
echo $(kubectl get secret -n argocd argocd-initial-admin-secret -o yaml | grep password | awk -F: '{print $2}') | base64 -d
访问:argocd.kevinspace.top
配置集群
由于 Argo CD 支持部署应用到多集群,所以如果你要将应用部署到外部集群的时候,需要先将外部集群的认证信息注册到 Argo CD 中,如果是在内部部署(运行 Argo CD 的同一个集群,默认不需要配置),直接使用 https://kubernetes.default.svc 作为应用的 K8S APIServer 地址即可。
首先列出当前 kubeconfig 中的所有集群上下文:
kubectl config get-contexts -o name
[root@master1 ~]# kubectl config get-contexts -o name
kubernetes-admin@kubernetes
cluster2
从列表中选择一个上下文名称并将其提供给 argocd cluster add CONTEXTNAME,比如对于 cluster2 上下文,运行:
argocd cluster add cluster2
创建应用
Git 仓库 https://github.com/argoproj/argocd-example-apps.git 是一个包含留言簿应用程序的示例库,我们可以用该应用来演示 Argo CD 的工作原理。
将应用命名为 guestbook,使用 default project,并将同步策略设置为 Manual:
然后在下面配置 Repository URL 为 https://github.com/argoproj/argocd-example-apps.git,由于某些原因我们这里使用的是 Gitee 仓库地址 https://gitee.com/cnych/argocd-example-apps,将 Revision 设置为 HEAD,并将路径设置为 guestbook。然后下面的 Destination 部分,将 cluster 设置为 inCluster 和 namespace 为 argocd:
填写完以上信息后,点击页面上方的 Create 安装,即可创建 guestbook 应用,创建完成后可以看到当前应用的处于 OutOfSync 状态:
Argo CD 默认情况下每 3 分钟会检测 Git 仓库一次,用于判断应用实际状态是否和 Git 中声明的期望状态一致,如果不一致,状态就转换为 OutOfSync。默认情况下并不会触发更新,除非通过 syncPolicy 配置了自动同步。
直接添加 UI 界面上应用的 Sync 按钮即可开始同步:
同步完成后可以看到我们的资源状态,甚至还可以直接查看应用的日志信息:
也可以通过 kubectl 查看到我们部署的资源:
这样我们就通过argocd部署好一个应用了,但是我们使用的是传统的主动 push 方式,下一篇我没将这个流程改造成为一个 GitOps 的流水线,这样我们就可以通过 Git 来管理应用的部署了。
评论区