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文件
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







