GitOps + ArgoCD 入门

GitOps + ArgoCD 入门

什么是GitOps

GitOps 是一种操作理念,它将基础设施即代码(Infrastructure as Code, IaC)和持续交付(Continuous Delivery, CD)的最佳实践应用于 Kubernetes 集群的运维管理中。在 GitOps 模式下,Kubernetes 的配置、应用程序清单以及其状态全部托管在版本控制系统(如 Git)中。通过自动化工具(如 ArgoCD),集群的状态变更会根据 Git 中定义的目标状态进行自动同步,从而实现声明式管理和持续部署。

可以参考这两张图示

CI/CD全流程

image-20240119175556167

gitops实施细节

image-20240119175650579

ArgoCD 介绍

ArgoCD 是一款开源的 GitOps 持续交付工具,专为 Kubernetes 环境设计。它能够以声明式的方式将 Git 存储库中的 Kubernetes 应用程序资源自动同步到目标集群,确保集群的实际状态始终与 Git 中所定义的理想状态保持一致。此外,ArgoCD 还提供了丰富的可视化界面,使得开发者可以方便地查看应用部署状态、执行滚动更新、回滚等操作。

安装 ArgoCD

使用 Kubernetes Manifest 安装(最简安装)

要在 Kubernetes 集群上安装 ArgoCD,请先下载官方提供的 YAML 清单文件,然后使用 kubectl apply 命令进行部署:

# 下载最新的 ArgoCD 安装清单
curl -sSL https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml > argocd-install.yaml

# 应用安装清单至集群
kubectl apply -n argocd -f argocd-install.yaml

完成上述步骤后,等待 ArgoCD 各组件成功启动并运行。

说明

该方式是比较简单的安装,没有持久化也没有分布式的能力,如果需要高可用安装和持久化,建议去看ArgoCD 官方的安装教程

访问ArgoCD

不知道为什么,笔者根据官方文档推荐的kubectl proxy,以及手动配置node port在client浏览器访问时都会提示重定向过多,访问不到ArgoCD的web页面,所以这里给出笔者的解决办法

给webUI做ingress的访问方式,需要注意ArgoCD 自己处理TLS相关,需要增加nginx注解和绑定secret。否则会报错重定向过多

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-server
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
    nginx.ingress.kubernetes.io/ssl-passthrough: 'true'
    nginx.io/tls-acme: 'true'
  labels:
    {}
    #  key: string
  namespace: argocd
spec:
  ingressClassName: nginx
  rules:
    - host: argocd.test
      http:
        paths:
          - backend:
              service:
                name: argocd-server
                port:
                  number: 443
            path: /
            pathType: ImplementationSpecific
  tls:
    - hosts:
        - argocd.test
      secretName: argocd-secret

获取ArgoCD初始化密码,找到这个自动安装的secert

image-20240120213344992

根据上面配置的host进行ingress的访问即可

配置 ArgoCD资源

配置 Cluster

根据笔者的步骤安装的话,默认的ArgoCD的cluster会包含他所在的in cluster集群,也就是ArgoCD所在的K8S环境,ArgoCD 是支持多集群管理的,如果要管理其他的集群则需要按需配置新的集群链接方式,如配置kubeconfig。

要连接其他的K8S集群则需要一定的安全考虑,给出一些说明,笔者暂且跳过

  • 认证与授权:根据需求设置 ArgoCD 的 RBAC 规则,控制不同用户或组对 ArgoCD 资源的操作权限。
  • TLS 证书(可选):若需要自定义 TLS 证书以增强安全性,可以在 ArgoCD 的配置中指定。

配置 Repo

  1. 在 ArgoCD 控制台添加 Git 仓库,这将是存储 Kubernetes 应用配置的地方。(argocd会要求有一个路径,所以manfiest不能堆积在git仓库的根目录中)

  2. 设置访问凭据(如用户名、密码或 SSH 密钥)以便 ArgoCD 可以拉取仓库内容。

    根据提示配置即可比较简单不做展开,argocd本身也会帮你验证是否能够连上仓库,正常情况会像下图一样显示成功

    image-20240120211522223

配置 Application

application是ArgoCD的核心资源。需要重点关注

  1. 创建一个新的 ArgoCD Application 资源对象,指定以下关键参数:

    • 项目(Project):将应用分配到特定的项目,便于管理和权限控制。

    • 源(Source):指向包含 Kubernetes 清单(YAML 文件)的 Git 仓库路径及分支信息。

    • 目标命名空间(Destination Namespace):在哪个 Kubernetes 命名空间中部署应用。

    • 同步策略(Sync Policy):定义何时触发自动同步,并确定如何处理资源冲突。

      给出一个已经正在使用的示例,是和上面提到的对应的

      image-20240120211009786

      可以看到,它明显分为上下两部分, 一部分是配置,一部分是当前状态,实际上,他在K8S里是以一个CRD资源application进行管理的,上面是预期的声明,下面是状态,它控制器会持续的查看这个下面的status和然后根据声明来进行变更

    也可以用UI的方式观察同步清空以确定CD到底在哪里失败了

    image-20240120214545151

使用 ArgoCD 实现 CD 流程

  1. 将应用程序的 Kubernetes 清单文件提交到 Git 仓库。

  2. CI自动修改或者人为修改Kubernetes 清单文件(比如ci自动修改镜像tag,手动修改容器args,env等,修改挂载的configmap(如果应用没有热加载机制或者reoloder sidecar需要再多一步))

  3. 在 ArgoCD 控制台创建或更新 Application 资源,使其指向新的 Git 提交(自动或手动,看具体的策略配置)

  4. ArgoCD 监控 Git 仓库的变化,并自动将集群状态调整到与 Git 中的目标状态一致,实现持续部署。

  5. 在整个 CD 流程中,可以通过 ArgoCD 的日志和状态监控功能来跟踪应用部署情况,并在出现问题时及时介入修复或回滚。

    ArgoCD官方示意图

Argo CD 架构

更多细节建议参考官方文档https://argo-cd.readthedocs.io/en/stable/operator-manual

作为一个比较火热的开源项目,它的文档质量还是不错的

  • 41
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值