K8s云原生

GitOps:使用 ArgoCD 持续部署(Java 开发者版)

2025-08-26  本文已影响0人  _浅墨_

1. GitOps 是什么?

如果你习惯了 Git Flow(分支、合并、提交代码),GitOps
的核心思想其实很像:

👉 简单说:
Git 是唯一的真相来源,K8s 部署完全由 Git 驱动,ArgoCD
帮你做自动化对齐。

2. 为什么 Java 开发者需要 GitOps?

想象一个常见的 Java 微服务场景:

如果没有 GitOps,流程可能是这样的:

  1. CI 构建镜像(Jenkins / GitHub Actions)\
  2. 手动改 YAML 里的 image: my-registry/order-service:1.0.0\
  3. kubectl apply -f deployment.yaml

👉 手工步骤多,容易出错。

有了 ArgoCD + GitOps

  1. CI 构建镜像,自动修改 Git 仓库里的 deployment.yaml(或 Helm
    values.yaml)\
  2. ArgoCD 发现 Git 仓库更新\
  3. 自动把变更同步到 K8s 集群\
  4. Pod 滚动升级,完成部署

👉 所有环境状态与 Git 保持一致,部署可回溯、可审计、可回滚。

3. 使用场景

① 多环境部署(Dev / Test / Prod)

② 快速回滚

③ 团队协作 & 审计

4. 示例:Spring Boot 服务的 GitOps 部署

目录结构

gitops-repo/
 ├── environments/
 │    ├── dev/
 │    │    └── order-service.yaml
 │    ├── prod/
 │    │    └── order-service.yaml
 └── apps/
      └── order-service.yaml  # 定义 ArgoCD Application

order-service.yaml(K8s Deployment 示例)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
  namespace: dev
spec:
  replicas: 2
  selector:
    matchLabels:
      app: order-service
  template:
    metadata:
      labels:
        app: order-service
    spec:
      containers:
      - name: order-service
        image: my-registry/order-service:1.0.0
        ports:
        - containerPort: 8080

ArgoCD Application 定义

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: order-service-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/my-org/gitops-repo.git
    targetRevision: main
    path: environments/dev
  destination:
    server: https://kubernetes.default.svc
    namespace: dev
  syncPolicy:
    automated:
      prune: true   # 删除 Git 里没有的资源
      selfHeal: true # 偏差自动纠正

5. 工作流程回顾

  1. 你更新 Java 代码 → CI 构建镜像 1.0.1 → 推到镜像仓库\
  2. CI 脚本自动改 environments/dev/order-service.yaml 里的
    image: ...:1.0.1 → 提交到 Git\
  3. ArgoCD 检测到 Git 仓库变化 → 自动同步到 K8s → 新 Pod 滚动启动\
  4. 如果出问题 → git revert → ArgoCD 回滚

6. 总结(Java 开发者视角)

上一篇 下一篇

猜你喜欢

热点阅读