Kubernetes - 更新后未删除旧pod

时间:2017-08-23 20:18:18

标签: kubernetes

我正在使用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个广告连播使用旧标记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

2 个答案:

答案 0 :(得分:0)

我建议您在RollingUpdate策略中将 maxSurge 设置为0,以便在推出后使所需的pod相同。 maxSurge参数是可以在原始pod数之上调度的最大pod数。

示例:

apiVersion:apps / v1beta1
种类:部署
元数据:
名称:网络服务器
规格:
复制品:2
选择:
matchLabels:
名称:网络服务器
策略:
类型:RollingUpdate
rollingUpdate:
maxSurge:0
maxUnavailable:1
模板:
元数据:
标签:
名称:网络服务器
规格:
集装箱:
- 名称:网络服务器
image:nginx:最新的 imagePullPolicy:IfNotPresent
港口:
- containerPort:80

答案 1 :(得分:0)

也许 k8s 无法区分图像并将它们视为不同。检查您是否正在快速转发您的提交,或者您部署的分支中最后一次提交的哈希值是否与您实际执行的提交的最后一次哈希值不同