在这里插入图片描述

前言

  在学习Argo CD之前,我们需要先了解一下GitOps,GitOps是一个用于持续部署应用程序的软件开发框架,它的核心是使用 Git 仓库来管理基础设施和应用的配置,并且以 Git 仓库作为基础设施和应用的单一事实来源,Git 仓库中的声明式配置描述了目标环境当前所需基础设施的期望状态,如果集群的实际状态与 Git 仓库中定义的期望状态不匹配,K8s 会根据期望状态来调整当前的状态,最终使实际状态符合期望状态。所有改变必须是通过修改Git仓库配置文件来实现,从其他地方修改配置(比如手动改线上配置)一概不予通过。
  其中Argo CD 就是监听Git仓库状态修改并同步 k8s状态的GitOps 连续交付工具。

一、Argo CD 是什么

  Argo CD 可以理解为一个 Kubernetes 控制器,它会持续监控正在运行的应用,并将当前的实际状态与 Git 仓库中声明的期望状态进行比较,如果实际状态不符合期望状态,就会更新应用的实际状态以匹配期望状态。Argo CD是一个持续交付(CD)工具,而持续集成(CI)部分可以由 Jenkins,Gitlab Runner来完成。

Argo CD官方文档地址

https://argo-cd.readthedocs.io/en/stable/

在这里插入图片描述

二、部署Argo CD

  1. 部署Argo CD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/core-install.yaml

先创建argocd 命名空间,再部署argocd服务

  1. 下载安装Argo CD CLI
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

查看Argo CD CLI 是否安装成功

在这里插入图片描述
3. 配置ingress 访问Argo CD web页面

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-server-ingress
  namespace: argocd
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    # If you encounter a redirect loop or are getting a 307 response code
    # then you need to force the nginx ingress to connect to the backend using HTTPS.
    #
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  ingressClassName: nginx
  rules:
  - host: harrison.hanyu
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: argocd-server
            port:
              name: https
  tls:
  - hosts:
    - harrison.hanyu
    secretName: argocd-server-tls # as expected by argocd-server

  在Ingress配置文档中可以找到上面的yaml文件内容,创建ingress的yaml文件,Argocd是https访问模式,其中的访问证书tls secret Argo CD已经提供,我们不需要改变,我们只需要改一下hosts并 配置域名就可以。hosts是我自己的,大家需要改成自己喜欢的域名。

在这里插入图片描述

ingress配置文档地址: https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/
  1. 部署Argo CD 的ingress
kubectl apply -f argocd-ingress.yaml

访问web页面
在这里插入图片描述
用户名是 admin ,初始密码在名为 argocd-initial-admin-secret 的 Secret 对象下的 password 字段中可以用一下命令获取

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d 

在这里插入图片描述
因为我已经开始使用Argo CD是所以有创建的内容。

  1. 也可以使用Argo CD CLI 登录
argocd login 10.80.136.47

输入的Ip地址就是argocd-server的ClusterIP 可以通过命令查询

kubectl get svc -n argocd

在这里插入图片描述

三、Argo CD 部署样例

Argo CD 提供了一个官网样例,我们就创建一下这个项目吧

样例github地址: https://github.com/argoproj/argocd-example-apps

web页面创建APP
在这里插入图片描述
在这里插入图片描述

  1. Application Name: app的名称,填写的是样例项目的名称
  2. Project: 是一种资源,用于组织和管理不同的 Kubernetes 应用(Application,目前先写default
  3. SYNC POLICY: 同步策略,有手动和自动,样例项目,我们先选择手动
  4. AUTO-CREATE NAMESPACE: 自动创建应用部署的k8s的命名空间
  5. SOURCE: Git 仓库,就是样例项目的github仓库地址
  6. Revision: 分支名
  7. Path: 资源文件所在的相对路径,Argo CD目前支持多种 Kubernetes 清单,这里需要选择使用那种资源配置模式就选择哪一个路径下的资源清单
  8. Cluster URL: Kubernetes API Server 的访问地址,由于 Argo CD 和下发应用的 Kubernetes 集群是同 一个,因此可以直接使用 http://kubernetes.default.svc 来访问
  9. Namespace: 应用部署在k8s中的命名空间
  10. 点击页面上面的create按钮
  11. 手动同步
    在这里插入图片描述
  12. web页面展示
    在这里插入图片描述
    在这里插入图片描述

总结

  以上就是对Argo CD的简单介绍和安装,最后部署了一下官方提供的样例项目,后面我会再写一篇基于GitOps 自动化CICD的文章,里面再详细的介绍gitlab-ci +Argo CD + kustomize 的整合使用。如有不足之处,还请大佬不吝赐教

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐