我正在使用 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
Run Code Online (Sandbox Code Playgroud)
此配置正在按计划运行。
# 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
Run Code Online (Sandbox Code Playgroud)
现在我计划对图像文件进行实时/滚动更新。我正在使用的命令是:
kubectl set image deployment websocket-backend-deployment websocket-backend=armdock.se/proj/websocket_backend:3.1.5
Run Code Online (Sandbox Code Playgroud)
我只是更新 docker 镜像标签。现在我希望我的 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
Run Code Online (Sandbox Code Playgroud)
如您所见,1 个 Pod 使用旧标签3.1.4
# kubectl describe po websocket-backend-deployment-4243571618-qjo6q | grep Image:
Image: armdock.se/proj/websocket_backend:3.1.4
Run Code Online (Sandbox Code Playgroud)
其余 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
Run Code Online (Sandbox Code Playgroud)
为什么 1 个旧 pod 仍然留在那里并且没有被删除?我缺少一些配置吗?
当我检查rollout
命令时,它只是停留在:
# kubectl rollout status deployment/websocket-backend-deployment
Waiting for rollout to finish: 1 old replicas are pending termination...
Run Code Online (Sandbox Code Playgroud)
我的K8S版本是:
# kubectl --version
Kubernetes v1.5.2
Run Code Online (Sandbox Code Playgroud)
我建议您在 RollingUpdate 策略中将maxSurge设置为 0,以使部署后所需的 Pod 相同。maxSurge 参数是在原始 pod 数量之上可以调度的最大 pod 数量。
例子:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: webserver
spec:
replicas: 2
selector:
matchLabels:
name: webserver
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
template:
metadata:
labels:
name: webserver
spec:
containers:
- name: webserver
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15426 次 |
最近记录: |