deployment
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDeployment 管理
Deployment 管理
概述
概述
Deployment 滚动更新、回滚、扩缩容等技能。
Deployment 滚动更新、回滚、扩缩容等技能。
基础操作
基础操作
查看 Deployment
查看 Deployment
bash
undefinedbash
undefined列出 Deployment
列出 Deployment
kubectl get deployments
kubectl get deploy -o wide
kubectl get deploy -n namespace
kubectl get deployments
kubectl get deploy -o wide
kubectl get deploy -n namespace
详细信息
详细信息
kubectl describe deploy deployment-name
kubectl get deploy deployment-name -o yaml
undefinedkubectl describe deploy deployment-name
kubectl get deploy deployment-name -o yaml
undefined创建 Deployment
创建 Deployment
yaml
undefinedyaml
undefineddeployment.yaml
deployment.yaml
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.20
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
```bash
kubectl apply -f deployment.yaml
kubectl create deployment nginx --image=nginx:1.20 --replicas=3apiVersion: 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.20
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
```bash
kubectl apply -f deployment.yaml
kubectl create deployment nginx --image=nginx:1.20 --replicas=3删除 Deployment
删除 Deployment
bash
kubectl delete deploy deployment-name
kubectl delete -f deployment.yamlbash
kubectl delete deploy deployment-name
kubectl delete -f deployment.yaml扩缩容
扩缩容
bash
undefinedbash
undefined手动扩缩容
手动扩缩容
kubectl scale deploy deployment-name --replicas=5
kubectl scale deploy deployment-name --replicas=5
自动扩缩容 (HPA)
自动扩缩容 (HPA)
kubectl autoscale deploy deployment-name --min=2 --max=10 --cpu-percent=80
kubectl autoscale deploy deployment-name --min=2 --max=10 --cpu-percent=80
查看 HPA
查看 HPA
kubectl get hpa
kubectl describe hpa deployment-name
undefinedkubectl get hpa
kubectl describe hpa deployment-name
undefinedHPA 配置
HPA 配置
yaml
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: 80
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80yaml
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: 80
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80滚动更新
滚动更新
更新策略配置
更新策略配置
yaml
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # 最多超出期望副本数
maxUnavailable: 25% # 最多不可用副本数yaml
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # 最多超出期望副本数
maxUnavailable: 25% # 最多不可用副本数执行更新
执行更新
bash
undefinedbash
undefined更新镜像
更新镜像
kubectl set image deploy/deployment-name container-name=nginx:1.21
kubectl set image deploy/deployment-name container-name=nginx:1.21
更新环境变量
更新环境变量
kubectl set env deploy/deployment-name ENV_VAR=value
kubectl set env deploy/deployment-name ENV_VAR=value
更新资源限制
更新资源限制
kubectl set resources deploy/deployment-name -c container-name --limits=cpu=200m,memory=256Mi
kubectl set resources deploy/deployment-name -c container-name --limits=cpu=200m,memory=256Mi
应用配置文件更新
应用配置文件更新
kubectl apply -f deployment.yaml
kubectl apply -f deployment.yaml
记录更新原因
记录更新原因
kubectl set image deploy/deployment-name container-name=nginx:1.21 --record
undefinedkubectl set image deploy/deployment-name container-name=nginx:1.21 --record
undefined查看更新状态
查看更新状态
bash
undefinedbash
undefined查看滚动更新状态
查看滚动更新状态
kubectl rollout status deploy/deployment-name
kubectl rollout status deploy/deployment-name
查看更新历史
查看更新历史
kubectl rollout history deploy/deployment-name
kubectl rollout history deploy/deployment-name --revision=2
kubectl rollout history deploy/deployment-name
kubectl rollout history deploy/deployment-name --revision=2
暂停/恢复更新
暂停/恢复更新
kubectl rollout pause deploy/deployment-name
kubectl rollout resume deploy/deployment-name
undefinedkubectl rollout pause deploy/deployment-name
kubectl rollout resume deploy/deployment-name
undefined回滚
回滚
bash
undefinedbash
undefined回滚到上一版本
回滚到上一版本
kubectl rollout undo deploy/deployment-name
kubectl rollout undo deploy/deployment-name
回滚到指定版本
回滚到指定版本
kubectl rollout undo deploy/deployment-name --to-revision=2
kubectl rollout undo deploy/deployment-name --to-revision=2
查看回滚状态
查看回滚状态
kubectl rollout status deploy/deployment-name
undefinedkubectl rollout status deploy/deployment-name
undefined高级配置
高级配置
健康检查
健康检查
yaml
spec:
template:
spec:
containers:
- name: app
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
startupProbe:
httpGet:
path: /startup
port: 8080
failureThreshold: 30
periodSeconds: 10yaml
spec:
template:
spec:
containers:
- name: app
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
startupProbe:
httpGet:
path: /startup
port: 8080
failureThreshold: 30
periodSeconds: 10亲和性配置
亲和性配置
yaml
spec:
template:
spec:
affinity:
# Pod 反亲和(分散部署)
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: nginx
topologyKey: kubernetes.io/hostname
# 节点亲和
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-type
operator: In
values:
- workeryaml
spec:
template:
spec:
affinity:
# Pod 反亲和(分散部署)
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: nginx
topologyKey: kubernetes.io/hostname
# 节点亲和
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-type
operator: In
values:
- worker容忍度
容忍度
yaml
spec:
template:
spec:
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"yaml
spec:
template:
spec:
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"常见场景
常见场景
场景 1:蓝绿部署
场景 1:蓝绿部署
bash
undefinedbash
undefined创建新版本 Deployment
创建新版本 Deployment
kubectl apply -f deployment-v2.yaml
kubectl apply -f deployment-v2.yaml
切换 Service 到新版本
切换 Service 到新版本
kubectl patch service my-service -p '{"spec":{"selector":{"version":"v2"}}}'
kubectl patch service my-service -p '{"spec":{"selector":{"version":"v2"}}}'
验证后删除旧版本
验证后删除旧版本
kubectl delete deploy deployment-v1
undefinedkubectl delete deploy deployment-v1
undefined场景 2:金丝雀发布
场景 2:金丝雀发布
yaml
undefinedyaml
undefined创建金丝雀 Deployment(少量副本)
创建金丝雀 Deployment(少量副本)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-canary
spec:
replicas: 1
selector:
matchLabels:
app: nginx
track: canary
template:
metadata:
labels:
app: nginx
track: canary
spec:
containers:
- name: nginx
image: nginx:1.21
undefinedapiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-canary
spec:
replicas: 1
selector:
matchLabels:
app: nginx
track: canary
template:
metadata:
labels:
app: nginx
track: canary
spec:
containers:
- name: nginx
image: nginx:1.21
undefined场景 3:批量重启 Pod
场景 3:批量重启 Pod
bash
undefinedbash
undefined触发滚动重启
触发滚动重启
kubectl rollout restart deploy/deployment-name
kubectl rollout restart deploy/deployment-name
或添加注解触发更新
或添加注解触发更新
kubectl patch deploy deployment-name -p '{"spec":{"template":{"metadata":{"annotations":{"date":"'$(date +%s)'"}}}}}'
undefinedkubectl patch deploy deployment-name -p '{"spec":{"template":{"metadata":{"annotations":{"date":"'$(date +%s)'"}}}}}'
undefined场景 4:查看 Pod 分布
场景 4:查看 Pod 分布
bash
undefinedbash
undefined查看 Pod 所在节点
查看 Pod 所在节点
kubectl get pods -l app=nginx -o wide
kubectl get pods -l app=nginx -o wide
按节点统计
按节点统计
kubectl get pods -l app=nginx -o jsonpath='{range .items[*]}{.spec.nodeName}{"\n"}{end}' | sort | uniq -c
undefinedkubectl get pods -l app=nginx -o jsonpath='{range .items[*]}{.spec.nodeName}{"\n"}{end}' | sort | uniq -c
undefined故障排查
故障排查
| 问题 | 排查方法 |
|---|---|
| 更新卡住 | |
| Pod 无法调度 | |
| 更新后服务异常 | 检查健康检查配置、回滚 |
| HPA 不生效 | 检查 metrics-server、资源配置 |
bash
undefined| 问题 | 排查方法 |
|---|---|
| 更新卡住 | |
| Pod 无法调度 | |
| 更新后服务异常 | 检查健康检查配置、回滚 |
| HPA 不生效 | 检查 metrics-server、资源配置 |
bash
undefined查看 Deployment 事件
查看 Deployment 事件
kubectl describe deploy deployment-name | grep -A 20 Events
kubectl describe deploy deployment-name | grep -A 20 Events
查看 ReplicaSet
查看 ReplicaSet
kubectl get rs -l app=nginx
kubectl describe rs rs-name
undefinedkubectl get rs -l app=nginx
kubectl describe rs rs-name
undefined