欢迎光临
我们一直在努力

GitOps 流程初探:如何利用 ArgoCD 实现代码提交即部署的自动化闭环

GitOps 流程初探:利用 ArgoCD 打造自动化部署闭环

GitOps 是一种现代的持续交付(CD)实践,它将 Git 仓库作为唯一的“事实来源”(Single Source of Truth)。所有的系统状态,包括应用、基础设施和服务配置,都以声明式文件(通常是 YAML)的形式存储在 Git 中。ArgoCD 是 Kubernetes 生态中一个流行的声明式持续交付工具,它持续监控 Git 仓库的状态,并确保 Kubernetes 集群的实际状态与 Git 中定义的状态保持一致。

本文将聚焦于如何利用 ArgoCD,配置一个简单的应用,实现配置提交到 Git 仓库后,自动同步部署到 Kubernetes 集群的自动化流程。

前置条件

  1. 一个可用的 Kubernetes 集群(例如 Minikube 或云服务商提供的 K8s)。
  2. kubectl 命令行工具。
  3. 一个 Git 仓库(用于存放 K8s 配置文件)。

步骤一:安装 ArgoCD

首先,我们需要在 Kubernetes 集群中安装 ArgoCD。最常用的方式是使用其官方 YAML 文件进行安装。

# 1. 创建命名空间
kubectl create namespace argocd

# 2. 安装 ArgoCD
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 3. 暴露 ArgoCD API Server (示例:使用 LoadBalancer 或 NodePort)
# 如果使用本地环境,可能需要使用 port-forward
# kubectl port-forward svc/argocd-server -n argocd 8080:443

# 4. 获取初始管理员密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

步骤二:准备 Git 配置文件仓库

GitOps 的核心在于将 Kubernetes 资源配置文件存储在 Git 仓库中。我们创建一个名为 manifests 的目录,并在其中定义一个简单的 Nginx Deployment。

假设您的配置仓库地址是 https://github.com/your-user/gitops-config-repo.git,并且包含以下文件:

****manifests/deployment.yaml****

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitops-demo-app
  labels:
    app: gitops-demo
spec:
  selector:
    matchLabels:
      app: gitops-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: gitops-demo
    spec:
      containers:
      - name: web-container
        # 初始版本 1.25.1
        image: nginx:1.25.1 
        ports:
        - containerPort: 80

将此文件提交并推送到您的 Git 仓库。

步骤三:定义 ArgoCD Application 资源

现在,我们告诉 ArgoCD 应该监控哪个 Git 仓库、哪个路径,以及将配置部署到哪个目标集群(本例中是 ArgoCD 自身所在的集群)。

创建一个 ArgoCD Application 定义文件 (argocd-app.yaml):

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-first-gitops-app
  namespace: argocd
spec:
  # 使用默认项目
  project: default

  # 定义应用来源
  source:
    repoURL: https://github.com/your-user/gitops-config-repo.git # 替换为您的仓库地址
    targetRevision: HEAD # 监控最新提交
    path: manifests # 配置文件在仓库中的路径

  # 定义部署目标
  destination:
    server: https://kubernetes.default.svc # 部署到 ArgoCD 所在的集群
    namespace: default # 部署到 default 命名空间

  # 同步策略:关键的自动化配置
  syncPolicy:
    automated: # 启用自动化同步
      prune: true # 允许删除集群中不再存在于 Git 中的资源
      selfHeal: true # 如果集群资源被手动修改,ArgoCD 会自动修复,使其与 Git 状态保持一致
    syncOptions:
    - CreateNamespace=true # 如果目标命名空间不存在则创建

将此 argocd-app.yaml 文件应用到 Kubernetes 集群中(注意:这不需要提交到配置仓库,它属于 ArgoCD 的控制面配置)。

kubectl apply -f argocd-app.yaml -n argocd

步骤四:验证 GitOps 自动化闭环

一旦 Application 资源创建完成,ArgoCD 将自动执行以下操作:

  1. 连接到指定的 Git 仓库。
  2. 发现 manifests 路径下的 deployment.yaml
  3. 将该 Deployment 资源同步到 default 命名空间。

您可以通过 ArgoCD UI 或命令行确认应用状态变为 SyncedHealthy

触发自动化部署(代码提交即部署):

现在,我们模拟一次代码变更。我们将应用的版本从 nginx:1.25.1 升级到 nginx:1.26.0

修改 ****manifests/deployment.yaml**** 文件:

# ... (省略上文)
      containers:
      - name: web-container
        image: nginx:1.26.0 # <--- 版本升级!
        ports:
# ... (省略下文)

提交并推送此变更到 Git 仓库:

git add manifests/deployment.yaml
git commit -m "Upgrade nginx to 1.26.0"
git push origin main

由于我们在 Application 中配置了 syncPolicy.automated,ArgoCD 会在默认的同步间隔(通常是 3 分钟)内检测到 Git 仓库的变更。

观察结果:

  1. 在 ArgoCD UI 中,您会看到 my-first-gitops-app 的状态从 Synced 暂时变为 OutOfSync
  2. 紧接着,ArgoCD 会自动开始同步操作。
  3. gitops-demo-app Deployment 将执行滚动更新,将旧的 nginx:1.25.1 Pods 替换为新的 nginx:1.26.0 Pods。
  4. 同步完成后,状态再次回到 SyncedHealthy

至此,我们成功地利用 ArgoCD 建立了 GitOps 自动化闭环:所有的部署操作都通过提交代码到 Git 仓库来驱动,无需手动操作 Kubernetes 集群,实现了基础设施和应用状态的声明式管理。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » GitOps 流程初探:如何利用 ArgoCD 实现代码提交即部署的自动化闭环
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址