我正在使用Deployments控制我的K8S群集中的pod.
我的原始部署文件如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: websocket-backend-deployment
spec:
replicas: 2
selector:
matchLabels:
name: websocket-backend
template:
metadata:
labels:
name: websocket-backend
spec:
containers:
- name: websocket-backend
image: armdock.se/proj/websocket_backend:3.1.4
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
livenessProbe:
httpGet:
port: 8080
path: /websocket/health
initialDelaySeconds: 300
timeoutSeconds: 30
readinessProbe:
httpGet:
port: 8080
path: /websocket/health
initialDelaySeconds: 25
timeoutSeconds: 5
此配置按计划运行.
# kubectl get po | grep websocket
websocket-backend-deployment-4243571618-mreef 1/1 Running 0 31s
websocket-backend-deployment-4243571618-qjo6q 1/1 Running 0 31s
现在我打算对图像文件进行实时/滚动更新.
我使用的命令是:
kubectl set image deployment websocket-backend-deployment websocket-backend=armdock.se/proj/websocket_backend:3.1.5
我只更新了docker image标签.
现在我期待我的pod在更新后保持2.我正在使用新版本获得2个新的pod,但是仍然存在一个带有旧版本的pod.
# kubectl get po | grep websocket
websocket-backend-deployment-4243571618-qjo6q 1/1 Running 0 2m
websocket-backend-deployment-93242275-kgcmw 1/1 Running 0 51s
websocket-backend-deployment-93242275-kwmen 1/1 Running 0 51s
如您所见,1 pod使用旧标签3.1.4
# kubectl describe po websocket-backend-deployment-4243571618-qjo6q | grep Image:
Image: armdock.se/proj/websocket_backend:3.1.4
其余2个节点位于新标签3.1.5上.
# kubectl describe po websocket-backend-deployment-93242275-kgcmw | grep Image:
Image: armdock.se/proj/websocket_backend:3.1.5
# kubectl describe po websocket-backend-deployment-93242275-kwmen | grep Image:
Image: armdock.se/proj/websocket_backend:3.1.5
为什么1个老吊舱仍然留在那里并且没有被删除?我错过了一些配置吗?
当我检查rollout命令时,它只是停留在:
# kubectl rollout status deployment/websocket-backend-deployment
Waiting for rollout to finish: 1 old replicas are pending termination...
我的K8S版本是:
# kubectl --version
Kubernetes v1.5.2
最佳答案 我建议你在RollingUpdate策略中将maxSurge设置为0,以便在推出后使所需的pod相同. maxSurge参数是可以在原始pod数之上调度的最大pod数.
例:
apiVersion:apps / v1beta1
kind:部署
元数据:
名称:网络服务器
规格:
复制品:2
选择:
matchLabels:
名称:网络服务器
战略:
类型:RollingUpdate
rollingUpdate:
maxSurge:0
maxUnavailable:1
模板:
元数据:
标签:
名称:网络服务器
规格:
容器:
– 名称:网络服务器
图片:nginx:最新
imagePullPolicy:IfNotPresent
端口:
– containerPort:80