ArgoCD 在 Kubernetes 平台部署指南
概述
ArgoCD 是一个基于 GitOps 的持续交付工具,用于 Kubernetes 集群的应用程序自动化部署和生命周期管理。本文档将详细介绍如何在 Kubernetes 平台中通过 Helm 部署 ArgoCD。
目录
- 环境准备
- 1.1 Kubernetes 平台要求
- 1.2 必需组件启用
- Helm 部署 ArgoCD
- 2.1 添加 ArgoCD Helm 仓库
- 2.2 配置 ArgoCD 参数
- 2.3 安装 ArgoCD
- 网络配置
- 3.1 创建 Ingress
- 部署验证与访问
- 4.1 检查服务状态
- 4.2 访问 ArgoCD Web 界面
- 4.3 功能验证
- 可选:使用 MinIO 作为存储后端
- 5.1 MinIO 存储优势
- 5.2 配置 ArgoCD 使用 MinIO
1. 环境准备
1.1 Kubernetes 平台要求
- Kubernetes 版本: 1.20+
- 节点配置: 至少 2 个节点,每个节点最少 2 核 4GB 内存
- 存储类: 需要配置默认存储类(如 NFS、Local Path 等)
1.2 必需组件启用
确保以下组件已启用:
- Ingress Controller(如 Nginx Ingress)
- 默认 StorageClass
2. Helm 部署 ArgoCD
2.1 添加 ArgoCD Helm 仓库
# 添加 ArgoCD Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
2.2 配置 ArgoCD 参数
创建 argocd-values.yaml 配置文件:
# 全局配置
global:
image:
repository: quay.io/argoproj/argocd
tag: v2.7.0
imagePullPolicy: IfNotPresent
# ArgoCD 服务器配置
server:
replicas: 1
autoscaling:
enabled: false
resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 128Mi
# 服务配置
service:
type: ClusterIP
port: 80
annotations: {}
# Ingress 配置
ingress:
enabled: false
annotations: {}
labels: {}
hosts:
- argocd.example.com
paths:
- /
pathType: Prefix
extraPaths: []
tls: []
https: false
# ArgoCD 仓库服务配置
repoServer:
replicas: 1
autoscaling:
enabled: false
resources:
limits:
cpu: 1000m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
# ArgoCD 应用控制器配置
applicationSet:
replicas: 1
resources:
limits:
cpu: 1000m
memory: 512Mi
requests:
cpu: 250m
memory: 128Mi
# ArgoCD 通知服务配置
notifications:
replicas: 1
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 50m
memory: 64Mi
# Redis 配置
redis:
resources:
limits:
cpu: 200m
memory: 128Mi
requests:
cpu: 100m
memory: 64Mi
# Redis HA 配置
redis-ha:
enabled: false
# ArgoCD 配置管理
configs:
cm:
create: true
# 禁用管理员登录
admin.enabled: "true"
# URL 配置
url: https://argocd.example.com
# Dex 配置
dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
clientID: your-client-id
clientSecret: your-client-secret
orgs:
- name: your-github-org
# ArgoCD RBAC 配置
rbac:
create: true
policy.default: role:readonly
policy.csv: |
g, your-github-org:admin, role:admin
g, your-github-org:dev, role:readonly
# ArgoCD 密钥配置
secret:
create: true
# 初始管理员密码 (默认密码为 "admin123" 的 bcrypt 哈希)
# 可以使用以下命令生成新密码哈希:
# argocd account bcrypt --password your-password
argocdServerAdminPassword: "$2a$10$Q7p9ZbWq8uPb1D3nK4m5OuPvQqSsTtUuVvWwXxYyZz01234567890"
# ArgoCD SSH 知名主机配置
ssh:
knownHosts: |
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzE54DG7OUBD7XBlhyA7dzZ/SHjTwv7Z023KZG2lGQU5qQcGw5k8UqSsvbjWL/CuJ3EfM+Im8h8U4Tz6E8moKBJDQ7JPO4DD/t6soUQ28y8F8U4qIK5U0O5oQdTv8wzPfHxHx2Q1x4DkK6u4V3+J0m1sAA7jZD
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
gitlab.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFSMqzJeV9rUzU4kWitGjeR4PWSa29SPqJ1fVkhtj3Hw9xjLVXVYrU9QlYWrOLXBpQ6KWjbjTDTdDkoohFzgbEY=
# 持久化存储配置
redisHa:
persistentVolume:
enabled: true
size: 1Gi
# 网络策略配置
networkPolicy:
create: false
# Pod 安全策略配置
podSecurityPolicy:
enabled: false
# 服务账户配置
serviceAccount:
create: true
name: argocd-server
2.3 安装 ArgoCD
# 创建命名空间
kubectl create namespace argocd
# 安装 ArgoCD
helm install argocd argo/argo-cd \
--namespace argocd \
--values argocd-values.yaml \
--version 5.30.0
3. 网络配置
3.1 创建 Ingress
创建 argocd-ingress.yaml 文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "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:
number: 443
应用 Ingress 配置:
kubectl apply -f argocd-ingress.yaml
4. 部署验证与访问
4.1 检查服务状态
# 检查 ArgoCD Pod 状态
kubectl get pods -n argocd
# 检查 ArgoCD 服务状态
kubectl get svc -n argocd
# 检查 Ingress 状态
kubectl get ingress -n argocd
4.2 访问 ArgoCD Web 界面
-
在本地
/etc/hosts文件中添加域名解析:<节点IP> argocd.example.com -
在浏览器中访问:
https://argocd.example.com
4.3 功能验证
获取初始管理员密码
# 获取 ArgoCD 初始管理员密码
kubectl get secret -n argocd argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
登录验证
使用默认用户名 admin 和获取到的密码登录 ArgoCD。
创建测试应用
- 在 GitHub 上创建一个包含 Kubernetes YAML 文件的仓库
- 在 ArgoCD 中创建应用并连接到该仓库
- 同步应用并验证部署状态