认识
Deployment(部署),提供管理 Pod 的方法。该笔记将记录:在 Kubernetes 中,与 Deployment 相关的内容,以及常见问题的解决方案;
创建(增)
通过 kubectl create deployment 创建:
kubectl create deployment --dry-run -o yaml \
--namespace storage-util fio \
--image=xridge/fio --replicas=1 -- sleep infinity | kubectl neat > fio.yaml
kubectl create deployment busybox --image=busybox --replicas=1 -- sleep infinity
导出 Deployment 定义:
kubectl get -n "namespace" deployment "deployment-name" -o yaml --export
修改(改)
Kubernetes how to make Deployment to update image
修改 Deployment 镜像(How can I edit a Deployment without modify the file manually?):
kubectl set -n "namespace" image "deployment/deploy-foo" "deploy-foo"="image-name"
打开编辑器修改 Deployment 信息:
kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0
kubectl edit deployment kubernet-dashboard -n kube-system
kubectl patch deployment "deployment-name" -p "{......}"
更新 Deployment 的某个镜像:kubectl set image deployment/my-deployment mycontainer=myimage:latest
查看(查)
查看 Deployment 信息:
kubectl get deployment kubernet-dashboard -n kube-system
更新策略
Rolling update strategy(默认更新策略)
牺牲更新速度,以减少停机时间;
apiVersion: apps/v1 #Older versions of k8s use apps/v1beta1
kind: Deployment
metadata:
name: hello-deploy
spec:
minReadySeconds: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
...
Recreation Strategy
更新速度快,但是存在停机时间;
apiVersion: apps/v1 #Older versions of k8s use apps/v1beta1
kind: Deployment
metadata:
name: hello-deploy
spec:
minReadySeconds: 10
strategy:
type: Recreate
...
Canary Strategy
在 strategy.type 中,没有“Canary”类型,需要进行特殊配置:
1)定义两个不同名称的 Pod 资源,但是具有重复的标签;
2)这样 Service 在通过 Label 选择后端 Pod 时,会将流量转向“Canary Pod”资源;
3)通过设置副本数量,来控制比例;
下面是个简单的示例:
# Pod 1
name: frontend
replicas: 3
...
labels:
app: guestbook
tier: frontend
track: stable
...
image: gb-frontend:v3
# Pod 2
name: frontend-canary
replicas: 1
...
labels:
app: guestbook
tier: frontend
track: canary
...
image: gb-frontend:v4
# Service
selector:
app: guestbook
tier: frontend
参考
『中级篇』k8s 重要的 Deployment(64)
A deep dive into Kubernetes Deployment strategies
Managing Resources | Kubernetes