argo cd 以 kubernetes 原生资源形式部署在集群内,非传统 linux 服务;通过 kubectl 或 helm 安装到 argocd 命名空间,依赖 pod 就绪、ingress 配置及初始密码解码方可访问 ui/cli,并严格遵循 gitops 原则——仅从 git 拉取配置,自动修复手动变更导致的偏差。

Argo CD 能直接在 Linux 上运行,但它的实际部署目标是 Kubernetes 集群 —— 它本身不“安装在 Linux 主机上”作为传统服务,而是以一组 Kubernetes 原生资源(Deployment、Service、Secret 等)运行在集群内。你在 Linux 机器上做的,只是用 kubectl 或 helm 向集群提交这些资源。
用 kubectl 一键部署 Argo CD 到 K8s 集群
这是最轻量、最通用的启动方式,适合验证或快速试用。注意:你操作的 Linux 机器必须已配置好可访问目标集群的 kubectl(即 ~/.kube/config 有效)。
执行以下命令:
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
关键点:
- 不要跳过
create namespace argocd—— 所有组件默认都部署在这个命名空间,手动创建能避免权限或 RBAC 初始化失败 - 使用
stable分支而非latest或具体 commit —— 更稳定,且与文档、社区示例对齐 - 部署后务必等所有 Pod 进入
Running状态:kubectl get pods -n argocd;argocd-server和argocd-application-controller必须就绪,否则 CLI 和 UI 不可用
用 Helm 安装并启用 Ingress 访问
生产环境推荐 Helm,它支持参数化定制,比如暴露 Web 界面。常见错误是只配了 Ingress 资源却没开 server.ingress.enabled。
步骤如下:
helm repo add argo https://argoproj.github.io/argo-helm helm repo update helm install argocd argo/argo-cd \ --namespace argocd \ --create-namespace \ --set server.ingress.enabled=true \ --set server.ingress.hosts[0]=argocd.example.com
然后需配套部署一个 Ingress 资源(如 Nginx Ingress Controller 已就绪):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- argocd.example.com
secretName: argocd-tls
rules:
- host: argocd.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
name: https
注意:
-
argocd-serverService 默认是ClusterIP,不配 Ingress 就无法从集群外访问 -
secretName: argocd-tls必须提前存在,否则 Ingress 会卡在Failed to fetch endpoints - 若用自签名证书,浏览器首次访问会提示不安全,需手动确认 —— 这不是 Argo CD 故障,是 TLS 验证行为
获取初始管理员密码并登录 CLI
Web 界面和 CLI 都依赖初始密码,它由 Secret 自动生成,不能跳过解码步骤。
执行:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
然后登录:
argocd login argocd.example.com --insecure
说明:
-
--insecure是必需的,除非你已配置合法 TLS 证书并信任 CA - 密码只生成一次,删掉 Secret 不会重置 —— 若丢失,只能删掉整个
argocd命名空间重建 - CLI 登录后,当前上下文自动切换到该服务器,后续
argocd app create等命令才生效
添加 Git 仓库和目标集群时的权限陷阱
Argo CD 默认只能管理它所在的集群(in-cluster)。想管理其他集群或拉取私有 Git 仓库,必须显式授权。
添加外部集群(如你的生产集群):
argocd cluster add <context_name></context_name>
其中 <context_name></context_name> 来自 kubectl config get-contexts -o name。该命令本质是创建一个 ServiceAccount(argocd-manager)并绑定 cluster-admin 权限 —— 这是高危操作,切勿在不可信集群上随意执行。
添加私有 Git 仓库(如 GitHub 私仓):
- 用 SSH 方式:提供 deploy key,并确保 Repo Server 的容器镜像包含对应
known_hosts - 用 HTTPS + Token 方式:在 Argo CD UI 的 “Settings → Repositories” 中填入 URL 和 Personal Access Token,Token 需含
repo权限 - 别把 Token 写死在
ApplicationYAML 里 —— 会被 Git 仓库泄露,应统一在 Settings 中配置
GitOps 的核心约束在于:所有变更必须通过 Git 提交触发,而 Argo CD 只读取、不写入。这意味着你永远不该在集群里手动改 Deployment 或 Service —— 一旦这么做了,Argo CD 下次同步就会把它“打回原形”。这个“自动修复”特性很强大,也很容易让人误以为“改了也没事”,结果导致配置漂移。











