如果说 Pod 是任务舱,那 Deployment 就是舰队编制令:
“给我始终保持 N 个同型号任务舱,并且以后换镜像时按规则滚动更新。”
关系大概是这样:
Deployment
│
▼
ReplicaSet
│
▼
Pods日常心智可以直接记成:
- Pod:单个任务舱
- Deployment:管一批无状态任务舱
一个最常见的 Web Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: city-web
spec:
replicas: 3
selector:
matchLabels:
app: city-web
template:
metadata:
labels:
app: city-web
spec:
containers:
- name: web
image: nginx:1.27
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 5
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 10部署与查看:
kubectl apply -f deployment.yaml
kubectl get deployment
kubectl get rs
kubectl get pods -l app=city-web
kubectl rollout status deployment/city-web更新镜像:
kubectl set image deployment/city-web web=nginx:1.28
kubectl rollout status deployment/city-web
kubectl rollout history deployment/city-web为什么大家都喜欢 Deployment?
因为它帮你做了三件人肉最烦的事:
- 保持副本数
- 滚动更新
- 回滚版本