Deployment:Kubernetes无状态应用管理完全指南

Deployment:管理无状态应用

前言

Deployment是Kubernetes中最常用的资源对象之一,用于管理无状态应用的部署、更新和扩缩容。

什么是Deployment?

Deployment提供了声明式的方式来管理Pod,确保指定数量的Pod副本始终运行。

Deployment的核心功能

  • 声明式更新:定义期望状态,Kubernetes自动完成
  • 滚动更新:逐步替换旧版本Pod
  • 回滚:快速恢复到之前的版本
  • 扩缩容:调整Pod副本数量
  • 暂停/恢复:控制更新节奏

基础Deployment配置


apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 256Mi

滚动更新策略


spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25%        # 最多额外增加的Pod数
      maxUnavailable: 25%  # 最多不可用的Pod数

滚动更新示例


# 更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.26

# 查看更新状态
kubectl rollout status deployment/nginx-deployment

# 查看历史版本
kubectl rollout history deployment/nginx-deployment

# 回滚到上一版本
kubectl rollout undo deployment/nginx-deployment

# 回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2

金丝雀发布


apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-canary
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      version: canary
  template:
    metadata:
      labels:
        app: myapp
        version: canary
    spec:
      containers:
      - name: myapp
        image: myapp:v2
---
# 主版本Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-production
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: production
  template:
    metadata:
      labels:
        app: myapp
        version: production
    spec:
      containers:
      - name: myapp
        image: myapp:v1

HPA自动扩缩容


apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 80

Deployment管理命令


# 创建Deployment
kubectl apply -f deployment.yaml

# 查看Deployment
kubectl get deployment
kubectl describe deployment nginx-deployment

# 扩缩容
kubectl scale deployment nginx-deployment --replicas=5

# 更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.26

# 查看Pod分布
kubectl get pods -o wide

# 删除Deployment
kubectl delete deployment nginx-deployment

最佳实践

1. 设置资源限制:防止单个Pod占用过多资源 2. 使用健康检查:确保应用正常运行 3. 合理配置副本数:根据业务需求设置 4. 使用标签管理:便于筛选和查询 5. 定期备份配置:保存Deployment的YAML文件

发表回复

后才能评论