GitOps实践:基础设施即代码
GitOps实践:基础设施即代码
概述
GitOps是以Git为中心的运维模式。本教程介绍GitOps的概念和实践。
1. GitOps原则
// GitOps原则
// 1. 声明式:系统期望状态以声明方式描述
// 2. 版本化:期望状态存储在Git中
// 3. 自动化:状态变更自动应用
// 4. 持续调和:系统持续对比期望状态和实际状态
// 工具
// 1. ArgoCD:Kubernetes持续部署工具
// 2. Flux:GitOps工具集
// 3. Jenkins X:云原生CI/CD
2. ArgoCD配置
# ArgoCD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/user/my-app
targetRevision: HEAD
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: my-app
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
3. 实际应用示例
Kubernetes配置
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 8080
env:
- name: SPRING_PROFILES_ACTIVE
valueFrom:
configMapKeyRef:
name: my-app-config
key: profile
配置管理
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app-config
data:
profile: "production"
database.url: "jdbc:mysql://mysql-service:3306/mydb"
4. 最佳实践
- 声明式配置:使用YAML或Helm模板
- 版本控制:所有配置存储在Git中
- 自动化部署:使用ArgoCD或Flux自动同步
- 状态监控:持续监控系统状态
- 回滚策略:支持快速回滚到之前版本
总结
GitOps是以Git为中心的运维模式。掌握GitOps的概念和实践,可以实现自动化、可审计的运维流程。