【问题标题】:Kubernetes - Old pod not being deleted after updateKubernetes - 更新后未删除旧 pod
【发布时间】:2018-02-01 13:38:18
【问题描述】:

我正在使用 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 镜像标签。 现在我期待我的豆荚在更新后保持 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 个旧 pod 仍然保留在那里并且没有被删除?我错过了一些配置吗?

当我检查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

【问题讨论】:

  • 滚动更新好像卡住了,试试升级到最新版本?
  • 您可以在执行此操作时发布这些事件吗?

标签: kubernetes


【解决方案1】:

我建议您在 RollingUpdate 策略中将 ma​​xSurge 设置为 0,以在 rollout 之后使所需的 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-04
      • 2021-09-21
      • 2017-09-12
      • 2017-04-02
      • 1970-01-01
      • 2022-12-11
      • 2020-02-13
      • 1970-01-01
      相关资源
      最近更新 更多