ArgoCD概述

ArgoCD 介绍与配置

ArgoCD 是一款为 Kubernetes 设计的声明式 GitOps 持续交付工具 ,由 Intuit 开源并成为 CNCF 毕业项目。它遵循 GitOps 核心理念:以 Git 仓库作为应用配置的唯一可信源,自动同步 Kubernetes 集群中的应用状态与 Git 中的期望状态,实现应用的自动化部署、更新和回滚。

一、ArgoCD 核心特性

  1. 声明式 GitOps 工作流:基于 Git 仓库的配置定义应用最终状态,无需手动编写部署脚本。

  2. 多源支持:兼容 Git(GitHub/GitLab/Gitee)、Helm 仓库、Kustomize、Jsonnet 等配置格式。

  3. 多集群管理:支持将应用部署到多个 Kubernetes 集群(本地/远程)。

  4. 自动化同步 :支持自动同步(Git 变更触发部署)、手动同步,以及自修复(集群状态与 Git 不一致时自动修正)。

  5. 可视化 UI:提供直观的 Web 界面,可查看应用状态、同步历史、资源拓扑。

  6. 完善的工具链:支持 CLI、REST API,便于集成到 CI/CD 流水线。

  7. 高级特性:应用集(ApplicationSet)批量管理应用、同步钩子(Sync Hooks)、同步波(Sync Waves)、细粒度 RBAC 权限控制等。

二、部署 ArgoCD

前提条件

  • 可用的 Kubernetes 集群(推荐 1.21+ 版本)。

  • kubectl 已配置并能访问集群。

  • 可选:Helm 3(生产环境推荐)。

部署方式一:kubectl 快速部署

这是官方推荐的快速部署方式,直接应用预定义的 YAML 文件。

1. 创建命名空间

cpp 复制代码
kubectl create namespace argocd

2. 部署 ArgoCD 组件

cpp 复制代码
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

国内环境注意:若拉取镜像失败,可先下载 YAML 文件并替换镜像源(如阿里云镜像)。

3. 检查组件状态

cpp 复制代码
kubectl get pods -n argocd
kubectl get svc -n argocd

正常情况下,所有 Pod 应处于 Running 状态。

4. 访问 ArgoCD UI

默认 argocd-serverClusterIP 类型,可通过端口转发临时访问:

cpp 复制代码
kubectl port-forward svc/argocd-server -n argocd 8080:443

然后访问 https://localhost:8080(注意是 HTTPS,非 HTTP)。

也可修改为 NodePort/LoadBalancer 长期访问:

cpp 复制代码
# 修改为 NodePort
kubectl patch svc argocd-server -n argocd -p '{"spec":{"type":"NodePort"}}'
# 查看 NodePort 端口
kubectl get svc argocd-server -n argocd

修改为NodePort模式

cpp 复制代码
# 将 argocd-server 的 Service 类型改为 NodePort
kubectl patch svc argocd-server -n argocd -p '{"spec":{"type":"NodePort"}}'
​
# 查看分配的 NodePort 端口
kubectl get svc argocd-server -n argocd

5. 获取初始管理员密码

默认用户名是 admin,初始密码存储在 argocd-initial-admin-secret 中:

cpp 复制代码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo

登录后立即修改密码,避免安全风险。

部署方式二:Helm 部署

Helm 便于管理版本和自定义配置,是生产环境的首选。

1. 添加 ArgoCD Helm 仓库

cpp 复制代码
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update

2. 安装 ArgoCD

cpp 复制代码
helm install argocd argo/argo-cd -n argocd --create-namespace

3. 自定义配置

通过 --set 参数修改配置(如服务类型、镜像源):

cpp 复制代码
helm install argocd argo/argo-cd -n argocd --create-namespace \
  --set server.service.type=NodePort \
  --set image.repository=registry.cn-hangzhou.aliyuncs.com/argoproj/argocd \
  --set server.ingress.enabled=true \
  --set server.ingress.hosts[0]=argocd.example.com

三、基础配置

1. 登录 ArgoCD

(1)UI 登录

访问 ArgoCD UI,输入用户名 admin 和初始密码即可登录。

(2)CLI 登录

先安装 ArgoCD CLI:

Linux

cpp 复制代码
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 sudo install -m 755 argocd-linux-amd64 /usr/local/bin/argocd rm argocd-linux-amd64

登录命令:

cpp 复制代码
# 端口转发的情况
argocd login localhost:8080 --insecure  # --insecure 忽略自签名证书

修改密码:

cpp 复制代码
argocd account update-password

2. 创建第一个应用

Application 是 ArgoCD 的核心资源,定义了应用的源(Git 仓库)目标(K8s 集群)同步策略

方式 1:UI 创建

  1. 登录 UI 后,点击**+ New App**。

  2. 填写基本信息:

    1. Application Nameguestbook

    2. Projectdefault

    3. Sync Policy :可选 Auto Sync(自动同步)。

  3. 填写Source

    1. Repository URLhttps://github.com/argoproj/argocd-example-apps.git(官方示例仓库)。

    2. RevisionHEAD

    3. Pathguestbook

  4. 填写Destination

    1. Cluster URLhttps://kubernetes.default.svc(本地集群)。

    2. Namespacedefault

  5. 点击Create ,然后点击Sync同步应用。

方式 2:YAML 文件创建

将 Application 配置纳入 Git 版本控制,是 GitOps 的最佳实践。

创建 guestbook-app.yaml

cpp 复制代码
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd  # Application 必须在 argocd 命名空间
spec:
  project: default
  # 源配置:Git 仓库、分支、配置目录
  source:
    repoURL: http://192.168.166.132/git/argocd.git
    targetRevision: main
    path: ./
  # 目标配置:集群地址、命名空间
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  # 同步策略
  syncPolicy:
    automated:
      prune: true        # 自动删除 Git 中不存在的资源
      selfHeal: true     # 自动修复集群与 Git 的不一致
    syncOptions:
      - CreateNamespace=true  # 自动创建目标命名空间

应用配置:

cpp 复制代码
kubectl apply -f guestbook-app.yaml

查看应用状态:

cpp 复制代码
kubectl get applications -n argocd
argocd app get guestbook

方式 3:CLI 创建

cpp 复制代码
argocd app create guestbook \
  --repo https://github.com/argoproj/argocd-example-apps.git \
  --path guestbook \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default \
  --sync-policy automated \
  --auto-prune \
  --self-heal

3. 核心配置项说明

配置项 说明
spec.source 应用源配置:repoURL(Git/Helm 地址)、targetRevision(分支/标签)、path(配置目录)
spec.destination 目标配置:server(K8s 集群地址)、namespace(目标命名空间)
spec.syncPolicy 同步策略:automated(自动同步)、syncOptions(同步选项)
spec.project 应用所属项目(用于资源隔离和权限控制)
特殊源配置示例
  • Helm 应用

    cpp 复制代码
    source:
      repoURL: https://charts.bitnami.com/bitnami
      chart: nginx
      targetRevision: 13.2.17
      helm:
        values: |
          service:
            type: NodePort
  • Kustomize 应用

    cpp 复制代码
    source:
      repoURL: https://github.com/my-repo.git
      path: my-app/overlays/prod
      kustomize:
        namePrefix: prod-

四、进阶配置

1. 多集群管理

ArgoCD 支持将应用部署到多个外部 Kubernetes 集群:

1.1 添加外部集群

cpp 复制代码
argocd cluster add <kubeconfig-context-name>

1.2 查看已添加的集群

cpp 复制代码
argocd cluster list

1.3 部署应用到外部集群

创建 Application 时,spec.destination.server 填写外部集群的 API 地址(从 argocd cluster list 获取)。

2. 私有 Git 仓库配置

若 Git 仓库是私有的,需配置访问凭证:

UI 方式

  1. 点击Settings -> Repositories -> Connect Repo

  2. 选择仓库类型,填写 URL 和认证信息(HTTPS 用用户名/令牌,SSH 用私钥)。

CLI 方式

cpp 复制代码
# HTTPS 认证
argocd repo add https://github.com/my-private-repo.git --username my-username --password my-token
​
# SSH 认证
argocd repo add git@github.com:my-private-repo.git --ssh-private-key-path ~/.ssh/id_rsa

3. 应用集(ApplicationSet)

用于批量创建和管理多个 Application,适用于多环境(dev/staging/prod)、多租户场景。

示例:为 dev/staging/prod 环境创建应用

cpp 复制代码
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: my-app-set
  namespace: argocd
spec:
  generators:
    # 列表生成器:定义环境列表
    - list:
        elements:
          - env: dev
            namespace: dev
            cluster: https://kubernetes.default.svc
          - env: staging
            namespace: staging
            cluster: https://kubernetes.default.svc
          - env: prod
            namespace: prod
            cluster: https://kubernetes.default.svc
  template:
    metadata:
      name: '{{env}}-my-app'
    spec:
      project: default
      source:
        repoURL: https://github.com/my-repo/my-app.git
        targetRevision: main
        path: overlays/{{env}}
      destination:
        server: '{{cluster}}'
        namespace: '{{namespace}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true

应用后,ArgoCD 会自动生成 dev-my-appstaging-my-appprod-my-app 三个 Application。

4. RBAC 权限控制

通过 argocd-rbac-cm ConfigMap 配置细粒度权限:

cpp 复制代码
kubectl edit configmap argocd-rbac-cm -n argocd

示例配置:

cpp 复制代码
data:
  policy.csv: |
    # 给 role:dev 授予 default 命名空间应用的查看和同步权限
    p, role:dev, applications, get, default/*, allow
    p, role:dev, applications, sync, default/*, allow
    # 将用户 dev@example.com 绑定到 role:dev
    g, user:dev@example.com, role:dev
  policy.default: role:readonly  # 默认角色为只读

5. 同步钩子与同步波

  • 同步钩子:在同步过程中执行前置/后置操作(如数据库迁移)。

    cpp 复制代码
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: db-migrate
      annotations:
        argocd.argoproj.io/hook: pre-sync  # 前置钩子
        argocd.argoproj.io/hook-delete-policy: HookSucceeded  # 成功后删除
    spec:
      template:
        spec:
          containers:
            - name: db-migrate
              image: my-db-migrate:latest
          restartPolicy: Never
      backoffLimit: 1
  • 同步波:控制资源同步顺序(数字越小越先同步)。

    cpp 复制代码
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-config
      annotations:
        argocd.argoproj.io/sync-wave: "1"  # 先同步
    data:
      config: value
    ​
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
      annotations:
        argocd.argoproj.io/sync-wave: "2"  # 后同步

五、常用操作

cpp 复制代码
# 同步应用
argocd app sync guestbook
​
# 查看应用详情
argocd app get guestbook
​
# 回滚应用
argocd app rollback guestbook
​
# 删除应用(含集群资源)
argocd app delete guestbook --cascade
​
# 暂停/恢复同步
argocd app pause guestbook
argocd app resume guestbook
​
# 查看应用日志
argocd app logs guestbook

六、生产环境最佳实践

  1. GitOps 自管理:将 ArgoCD 自身的配置(Application、ApplicationSet)纳入 Git 版本控制。

  2. 安全配置:修改默认密码、启用 HTTPS、配置 RBAC 最小权限。

  3. 高可用部署:为 ArgoCD 组件配置多副本,避免单点故障。

  4. 监控告警:集成 Prometheus + Grafana 监控 ArgoCD 组件和应用状态。

  5. 定期备份:备份 ArgoCD 的 Secret 和 ConfigMap 数据。

相关推荐
Selegant4 天前
Kubernetes + Helm + ArgoCD:打造 GitOps 驱动的 Java 应用交付流水线
java·kubernetes·argocd
海鸥816 天前
in argocd ‘/tmp/_argocd-repo/../.git/index.lock‘: No space left on
git·argocd
聊天QQ:6882388614 天前
MATLAB多变量最小二乘辨识
argocd
小白不想白a16 天前
ArgoCD第一课--概念理解
argocd
b***74881 个月前
2025年前端开发新方向预测
剪枝·activemq·argocd
研究司马懿2 个月前
【ETCD】ETCD——confd配置管理
数据库·golang·自动化·运维开发·etcd·argocd·gitops
研究司马懿2 个月前
【ETCD】ETCD单节点二进制部署(TLS)
数据库·chrome·云原生·运维开发·etcd·argocd·gitops
老年DBA2 个月前
Kubernetes 上的 GitLab + ArgoCD 实践(三):使用 ArgoCD 打通 CD 流程
kubernetes·gitlab·argocd
老年DBA2 个月前
Kubernetes 上的 GitLab + ArgoCD 实践(二):使用自建 GitLab Runner 完善 CI 流程
kubernetes·gitlab·argocd