CloudMap
全部简历LinuxKubernetesPrometheusArgo CDPostgreSQLDocker其他

© 2026 云原生洞见 · Cloud Native Insights · 保留所有权利

文章目录

35 项
  • 1.文档概述
  • 1.1 背景与适用范围
  • 1.2 技术架构
  • 1.3 版本与环境信息
  • 2.安装前置准备
  • 2.1 客户端工具确认
  • 2.2 工程目录规范
  • 2.3 国内镜像策略
  • 2.4 创建命名空间
  • 2.5 导入 TLS 证书
  • 3.Helm 安装配置
  • 3.1 添加 Helm Chart 仓库
  • 3.2 生产基线 Values 详解
  • 3.3 安装 / 升级命令
  • 3.4 部署状态验证
  • 4.Traefik 路由配置
  • 4.1 配置目录结构
  • 4.2 路由配置清单
  • 5.初始登录与密码管理
  • 5.1 获取初始管理员密码
  • 5.2 修改密码与安全建议
  • 6.Git 仓库接入
  • 6.1 生成 Deploy Key
  • 6.2 Git 平台配置
  • 6.3 创建仓库 Secret
  • 6.4 验证仓库连通性
  • 7.App of Apps 初始化
  • 8.备份与恢复
  • 8.1 备份对象清单
  • 8.2 备份命令
  • 8.3 恢复顺序说明
  • 9.升级策略
  • 9.1 升级前准备
  • 9.2 执行升级
  • 9.3 回滚方案
Argo CD2026年2月27日

Argo CD 部署


1.文档概述

1.1  背景与适用范围

本手册面向腾讯云环境下的云原生运维团队,完整描述基于 K3s 与 Traefik v3 部署 ArgoCD 的全流程。适用于互联网、制造业、新能源等行业的中小规模 GitOps 平台建设场景。安装配置已针对国内网络环境(镜像拉取、大型 Chart 渲染超时、gRPC 路由)做生产级调优,并遵循 GitOps 核心理念。

1.2  技术架构

整体采用「入口层统一终结 TLS,内部 HTTP 明文」的分层架构,如下所示:

用户浏览器 / argocd CLI
        │
        ▼
Traefik v3(TLS 终结,443)
        │
        ▼
argocd-server(HTTP 明文,--insecure)
   │        │         │
   │        │         └──► Redis(会话缓存)
   │        └──────────► Repo Server(Helm / Kustomize 渲染)
   └───────────────────► Application Controller(同步 / 健康检查)
        │
        ▼
GitHub / GitLab / 企业 Git 服务(SSH Deploy Key 或 HTTPS Token)

架构说明:外部仅暴露 Traefik,ArgoCD 后端不直接面向公网;TLS 只在入口层终结,后端维持集群内 HTTP 明文,降低证书管理复杂度;Git 仓库默认只读,避免将 GitOps 控制面变成回写系统。

1.3  版本与环境信息

组件

版本 / 规格

说明

操作系统

Ubuntu 24.04 LTS

腾讯云 CVM

Kubernetes

K3s v1.34+(单节点)

轻量 K8s 发行版

Ingress

Traefik v3.x

K3s 内置,随 K3s 升级

ArgoCD

v3.3.8

GitOps 控制面

Helm Chart

argo/argo-cd  v9.5.9

安装介质

Redis

8.6.2-alpine

ArgoCD 内置缓存


2.安装前置准备

2.1  客户端工具确认

在执行任何安装步骤前,确保以下工具已就绪并版本正确:

# 确认各工具版本
kubectl version --client
helm version
git --version
argocd version --client

# 测试 GitHub SSH 连通性(按需替换为内网 Git 服务)
ssh -T git@github.com

2.2  工程目录规范

建议统一工程目录,后续所有操作均在此目录下进行:

gitops-platform/
├── argocd/
│   └── install/
│       └── values.yaml          # ArgoCD Helm values
├── traefik/
│   └── argocd-traefik-routes.yaml
└── backup/

2.3  国内镜像策略

在国内网络场景下,所有 ArgoCD 官方镜像须提前同步至阿里云 ACR私有镜像仓库,以保证版本一致性与可追溯性。

注意:所有镜像、TLS 证书、SSH 私钥均不得明文提交进 Git 仓库。仓库中只存放可审计的配置声明,机密信息统一托管至密钥管理系统(如腾讯云 KMS 或 Vault)。

2.4  创建命名空间

kubectl create namespace argocd

2.5  导入 TLS 证书

将域名证书导入集群,供 Traefik 入口层引用:

kubectl create secret tls argocd-tls \
  -n argocd \
  --cert=/home/ops/ssl/argocd.example.com_bundle.pem \
  --key=/home/ops/ssl/argocd.example.com.key

注意:TLS 证书由 Traefik 统一管理,ArgoCD 后端只接收集群内部流量,无需在 Pod 层面再次配置证书。


3.Helm 安装配置

3.1  添加 Helm Chart 仓库

helm repo add argo https://argoproj.github.io/argo-helm
helm repo update

# 确认目标 Chart 版本存在
helm search repo argo/argo-cd --versions | head
-----------------------------------------------------------------
NAME            CHART VERSION   APP VERSION     DESCRIPTION                                       
argo/argo-cd    9.5.15          v3.4.2          A Helm chart for Argo CD, a declarative, GitOps...
argo/argo-cd    9.5.14          v3.4.2          A Helm chart for Argo CD, a declarative, GitOps...
argo/argo-cd    9.5.13          v3.4.1          A Helm chart for Argo CD, a declarative, GitOps...
argo/argo-cd    9.5.12          v3.4.1          A Helm chart for Argo CD, a declarative, GitOps...
argo/argo-cd    9.5.11          v3.3.9          A Helm chart for Argo CD, a declarative, GitOps...
argo/argo-cd    9.5.10          v3.3.8          A Helm chart for Argo CD, a declarative, GitOps...
argo/argo-cd    9.5.9           v3.3.8          A Helm chart for Argo CD, a declarative, GitOps...
argo/argo-cd    9.5.8           v3.3.8          A Helm chart for Argo CD, a declarative, GitOps...
argo/argo-cd    9.5.7           v3.3.8          A Helm chart for Argo CD, a declarative, GitOps...

3.2  生产基线 Values 详解

以下 values.yaml 为腾讯云 + K3s + Traefik v3 中小规模环境的生产最小可用基线。其中 repo-server 执行超时由默认 90 秒提升至 300 秒,以兼容大型 Helm Chart、复杂 Kustomize 及私有依赖下载场景。

# ──────────────────────────────────────────────────────────────────
# 文件路径:~/gitops-argocd/argocd/install/values.yaml
# ──────────────────────────────────────────────────────────────────
 
global:
  image:
    repository: <私有镜像仓库>/argoproj/argocd
    tag: v3.3.8
  domain: argocd.example.com
 
configs:
  params:
    # argocd-server 以 HTTP 明文运行,TLS 由 Traefik 统一终结
    server.insecure: "true"
    # 控制 Application Controller → Repo Server 的 RPC 超时(单位:秒)
    controller.repo.server.timeout.seconds: "300"
  cm:
    admin.enabled: true
    # 协调间隔:120s ± 60s(含抖动,防止大规模集群同时打满 Git 服务)
    timeout.reconciliation: 120s
    timeout.reconciliation.jitter: 60s
    # 0s 表示不设硬限制,即使协调长时间未完成也不强制中断
    timeout.hard.reconciliation: 0s
  rbac:
    policy.matchMode: glob
 
server:
  extraArgs:
    - --insecure
    # 控制 argocd-server API → Repo Server 的等待超时
    - --repo-server-timeout-seconds=300
  ingress:
    # 关闭 Helm Chart 自带 Ingress,改用 Traefik IngressRoute
    enabled: false
 
controller:
  replicas: 1
  resources:
    requests:
      cpu: 250m
      memory: 256Mi
    limits:
      cpu: "1"
      memory: 512Mi
 
repoServer:
  env:
    # 控制 Helm/Kustomize 渲染命令本身的执行超时
    - name: ARGOCD_EXEC_TIMEOUT
      value: 300s
  resources:
    requests:
      cpu: 200m
      memory: 256Mi
    limits:
      cpu: "1"
      memory: 512Mi
 
redis:
  image:
    repository: <私有镜像仓库>/redis
    tag: 8.6.2-alpine   # 请在私有仓库中确认该 Tag 可用
 
dex:
  # 暂不启用 SSO,如需接入 OIDC 可在后期开启
  enabled: false

超时参数说明(三层联动):

参数位置

参数名 / 变量

控制范围

configs.params

controller.repo.server.timeout.seconds

Application Controller 调用 Repo Server 的 RPC 超时

server.extraArgs

--repo-server-timeout-seconds

argocd-server API 调用 Repo Server 的 RPC 超时

repoServer.env

ARGOCD_EXEC_TIMEOUT

Repo Server 内部执行 helm template / kustomize build 的命令超时

3.3  安装 / 升级命令

进入安装目录后执行以下命令,首次安装与后续升级均使用同一条命令:

cd ~/gitops-argocd/argocd/install
 
helm upgrade --install argocd argo/argo-cd \
  --version 9.5.9 \
  -n argocd \
  -f values.yaml \
  --wait \
  --timeout 10m

3.4  部署状态验证

执行以下命令观察 Pod 启动状态,重点关注三个指标:

# 实时监控 Pod 状态
kubectl get pods -n argocd -w
 
# 查看最新事件(排查镜像拉取失败、OOM 等异常)
kubectl get events -n argocd --sort-by=.lastTimestamp

验证重点:repo-server 是否反复重启、controller 是否长时间 NotReady、所有镜像是否均从私有仓库拉起。


4.Traefik 路由配置

4.1  配置目录结构

建议将 Traefik 相关配置统一存放,便于 GitOps 管理:

traefik/
├── argocd-traefik-routes.yaml    # 本节完整配置(一文件三资源)

注意:K3s v1.32+ 内置 Traefik v3,语法与 v2 有差异:头部匹配使用 Header(),不是旧版的 Headers();中间件跨命名空间引用需写成 <namespace>-<name>@kubernetescrd。

4.2  路由配置清单

以下一个 YAML 文件包含三个资源:HTTP→HTTPS 重定向中间件、HTTPS 路由、HTTP 路由。

# ──────────────────────────────────────────────────────────────────
# 文件名:argocd-traefik-routes.yaml
# 作用:为 ArgoCD 配置 Traefik 路由,实现:
#   1. HTTP(80)自动跳转 HTTPS(443)
#   2. HTTPS 反向代理至 ArgoCD Server(TLS 在此终结)
# 适用:K3s v1.32+(内置 Traefik v3)
# ──────────────────────────────────────────────────────────────────
 
# ── 资源 1:中间件 - HTTP 到 HTTPS 的 301 永久重定向 ──
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: argocd-https-redirect
  namespace: argocd
spec:
  redirectScheme:
    scheme: https
    permanent: true     # true = 301 永久重定向,有利于 SEO 和浏览器缓存
 
---
# ── 资源 2:HTTPS 路由 - 提供正式服务,执行 TLS 终结 ──
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: argocd-web
  namespace: argocd
spec:
  entryPoints:
    - websecure               # 绑定至 Traefik websecure 入口(443)
  routes:
    - kind: Rule
      match: Host(`argocd.example.com`)
      services:
        - name: argocd-server
          port: 80            # argocd-server Service 的 HTTP 端口
  tls:
    secretName: argocd-tls   # 引用第 2.5 节中创建的 TLS Secret
 
---
# ── 资源 3:HTTP 路由 - 接收 80 端口流量并触发重定向 ──
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: argocd-http
  namespace: argocd
spec:
  entryPoints:
    - web                     # 绑定至 Traefik web 入口(80)
  routes:
    - kind: Rule
      match: Host(`argocd.example.com`)
      middlewares:
        - name: argocd-https-redirect   # 引用资源 1 的中间件
      services:
        - name: argocd-server
          port: 80            # 实际不会收到流量,Traefik 要求至少声明一个 service
# 应用配置
kubectl apply -f traefik/argocd-traefik-routes.yaml
 
# 验证路由是否生效
kubectl get ingressroute -n argocd
curl -I http://argocd.example.com    # 预期返回 301 跳转
✅ 建议:UI 与 CLI 统一走 443,CLI 使用 --grpc-web 参数。如组织内明确要求原生 gRPC,需额外添加 h2c IngressRoute。

5.初始登录与密码管理

5.1  获取初始管理员密码

ArgoCD 安装成功后,初始管理员密码自动生成并存入 Secret,执行以下命令获取:

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

5.2  修改密码与安全建议

首次登录后应立即修改密码:

# 登录(--grpc-web 适配 Traefik 不支持原生 gRPC 的场景)
argocd login argocd.example.com --grpc-web
 
# 修改密码
argocd account update-password \
  --account admin \
  --current-password '<初始密码>' \
  --new-password '<强密码,不少于 16 位>'

安全项

要求

密码长度

不少于 16 位,含大小写字母、数字、特殊字符

密码轮换

每 90 天轮换一次,变更记录存入密钥管理系统

admin 账号定位

接入 OIDC/SSO 后保留为应急账户,日常禁止使用

SSO 接入

建议在完成基础验证后,尽快接入企业 LDAP / OAuth 2.0


6.Git 仓库接入

6.1  生成 Deploy Key

🔧 错误修正:原文命令 ssh-keygen ... -N 缺少参数,会导致交互式询问。正确写法为 -N "" 表示空口令,适合自动化场景。

ssh-keygen -t ed25519 \
  -C "argocd-deploy-key" \
  -f ~/.ssh/argocd_deploy_key \
  -N ""

6.2  Git 平台配置

将公钥(argocd_deploy_key.pub 内容)添加至 Git 仓库的 Deploy Keys:

  • 权限默认设置为只读(不勾选 write access)

  • 仅在确实需要自动回写的极少数场景下,才赋予写权限

  • 一个 Deploy Key 对应一个仓库,不同仓库使用不同 Key

6.3  创建仓库 Secret

将 SSH 私钥以 Kubernetes Secret 形式注入集群(stringData 字段仅限初始创建,不要将私钥提交至 Git):

apiVersion: v1
kind: Secret
metadata:
  name: gitops-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
type: Opaque
stringData:
  url: git@github.com:org/repo.git
  sshPrivateKey: |
    -----BEGIN OPENSSH PRIVATE KEY-----
    <此处粘贴私钥内容>
    -----END OPENSSH PRIVATE KEY-----
kubectl apply -f gitops-repo-secret.yaml

⚠ 注意:请勿将含有 sshPrivateKey 的 Secret YAML 提交至 Git 仓库,应使用 Sealed Secrets 或外部密钥注入方案管理。

6.4  验证仓库连通性

# 列出已注册仓库
argocd repo list --grpc-web
 
# 测试指定仓库连接
argocd repo get git@github.com:org/repo.git --grpc-web

7.App of Apps 初始化

App of Apps 模式通过「根应用管理子应用」实现平台与业务的分层治理:平台团队只维护根应用,业务团队只维护自己目录下的 Application 或 ApplicationSet,互不干扰,变更可审计。

# 创建根应用
argocd app create root-app \
  --repo git@github.com:org/gitops-repo.git \
  --path apps \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace argocd \
  --revision main \
  --sync-policy automated \
  --auto-prune \
  --self-heal \
  --grpc-web
 
# 触发首次同步
argocd app sync root-app --grpc-web
 
# 查看应用状态
argocd app get root-app --grpc-web

建议:应用数量增多后,建议引入 ApplicationSet(支持 Git Generator、矩阵 Generator 等),减少重复 YAML,统一管理多环境 / 多集群部署。


8.备份与恢复

8.1  备份对象清单

类别

对象名称

说明

核心配置

argocd-cm

全局配置(reconciliation、OIDC 等)

权限配置

argocd-rbac-cm

RBAC 策略

加密数据

argocd-secret、argocd-tls

加密密钥与 TLS 证书

仓库配置

repository Secrets

Git 仓库连接凭证

应用资源

Application / ApplicationSet / AppProject

应用定义

网络配置

IngressRoute / Middleware

Traefik 路由配置

8.2  备份命令

mkdir -p ~/gitops-argocd/backup
 
# 配置 ConfigMap
kubectl get configmap -n argocd argocd-cm     -o yaml > backup/argocd-cm.yaml
kubectl get configmap -n argocd argocd-rbac-cm -o yaml > backup/argocd-rbac-cm.yaml
 
# TLS Secret
kubectl get secret -n argocd argocd-tls       -o yaml > backup/argocd-tls.yaml
 
# 所有 Application 定义
kubectl get applications -A                    -o yaml > backup/all-applications.yaml
 
# Traefik 路由
kubectl get ingressroute -n argocd            -o yaml > backup/ingressroutes.yaml

8.3  恢复顺序说明

恢复顺序直接影响控制器是否能正常接管已有资源,建议按以下顺序执行:

步骤

操作

原因

1

执行 helm upgrade --install 重新安装 ArgoCD

先拉起控制器,确保 CRD 就绪

2

恢复 TLS Secret 与 Git 仓库 Secret

控制器启动后即可接管证书和仓库连接

3

恢复 argocd-cm 和 argocd-rbac-cm

覆盖默认配置,避免策略丢失

4

恢复 Application / ApplicationSet CR

最后恢复应用定义,减少「对象存在但控制器未就绪」的异常


9.升级策略

9.1  升级前准备

每次升级前须完成以下检查,避免升级引发数据不兼容或服务中断:

  • 查阅 ArgoCD 官方 Release Notes,确认是否存在 Breaking Changes(尤其注意大版本跨越)

  • 确认私有镜像仓库中新版本镜像已同步完毕

  • 在测试环境完成验证后,再执行生产升级

  • 执行备份(参考第八章)

# 更新 Helm 仓库,获取最新 Chart 版本列表
helm repo update
helm search repo argo/argo-cd --versions | head -10

9.2  执行升级

将 values.yaml 中的镜像 tag 更新为新版本后,执行升级命令与安装命令完全相同:

# 修改 values.yaml 中的 image.tag
vim ~/gitops-argocd/argocd/install/values.yaml
 
# 执行升级
helm upgrade --install argocd argo/argo-cd \
  --version <新 Chart 版本> \
  -n argocd \
  -f values.yaml \
  --wait \
  --timeout 10m
 
# 升级后验证
kubectl get pods -n argocd
argocd version --grpc-web
argocd app list --grpc-web

9.3  回滚方案

若升级后出现异常,可通过 Helm 回滚至上一个 Release:

# 查看 Helm Release 历史
helm history argocd -n argocd
 
# 回滚至指定版本(REVISION 从上方命令获取)
helm rollback argocd <REVISION> -n argocd --wait --timeout 10m
 
# 确认回滚后 Pod 状态
kubectl get pods -n argocd

 注意:跨大版本(如 v2.x → v3.x)的回滚可能涉及 CRD Schema 不兼容,回滚前务必确认应用 CR 格式是否在旧版 CRD 中仍然有效。

最后更新:2026年5月27日← 更多「Argo CD」文章