Kubernetes - 更新后旧 Pod 未被删除

2024-01-02

我正在使用 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 镜像标签。 现在我希望我的 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 个旧 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

我建议你设置maxSurge在 RollingUpdate 策略中设置为 0,以使所需的 pod 在 rollout 后保持一致。 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes - 更新后旧 Pod 未被删除 的相关文章

随机推荐

  • Google 我的商家 API 的测试/沙盒环境

    我刚刚开始使用 Google My Business API 并且能够执行获取操作只是为了验证我的 Oauth 设置是否正确 现在 我想使用 GMB 添加位置 API 的 post 方法添加位置 但在将代码推送到生产环境之前 我想测试此请求
  • 从给定的链表在 C++ 中创建反向链表

    我在从给定的链接列表以相反的顺序创建链接列表时遇到一些问题 我有java背景 刚刚开始做一些C 你能检查一下我的代码并看看有什么问题吗 我猜我只是在操纵指针而不是创建任何新内容 this is a method of linkedlist
  • 如何在 C# 中解析/反序列化从 Rest 服务返回的 JSON

    我从结构如下的 URL 获取字符串格式的 JSON 但无法解析它 它抛出异常 知道如何解析它吗 结构如下 pathway patients patient patientid 7703176 name Abbot Bud status In
  • Magento 自定义管理模块为空

    我创建了一个自定义管理模块 但我无法在其中添加内容 它始终是空白的 我正在尝试使用简单的代码进行测试 但似乎没有任何效果 public function indexAction this gt loadLayout this gt addC
  • 即使关闭页面后脚本还会继续运行吗?

    如果我通过 jquery ajax 调用一个 php 文件 其中包含一个脚本来执行一些需要一段时间的操作 例如上传一个大视频 然后我关闭页面 php 脚本是否继续加载视频 看这里 http php net manual en functio
  • 在 Turtle - Python 3.4 中不设置动画?

    下面的代码创建一棵分形树 我想尽可能快地绘制它 我不希望发生任何动画 否则绘制需要很长时间 在Python的早期版本中 这是通过turtle speed 0 实现的 如下所示 这在 python 3 4 中不起作用 import turtl
  • 如果元素的 proptype 是默认值?

    如果我尝试将 proptype 设置为PropTypes element 不是必需的 正确的默认值是什么 static propTypes expandable PropTypes bool popover PropTypes elemen
  • 许多等待异步方法,还是单个等待包装 Task.Run?

    假设我们必须通过异步流程在数据库中写入包含 1000 个元素的列表 是等待 1000 次异步插入语句更好 还是将所有 1000 次插入包装在封装到一个同步方法中 Task Run声明 等待一次 例如 SqlCommand每种方法都与他的方法
  • 空引用检查的良好做法是什么? [复制]

    这个问题在这里已经有答案了 检查对象上的空引用的最有效方法是什么 我见过各种代码示例 它们具有不同的检查方式 因此以下哪一种是最有效的 或者哪一种被认为是最佳实践 Object ReferenceEquals item null item
  • 无法使用 StringLiteralConvertible 类型的参数列表调用“init”

    当我尝试运行下面的代码时 出现此错误 Cannot invoke init with argument list of type id StringLiteralConvertible host Contact target Contact
  • 我如何从 C++ 的子 c-tor 中初始化超类参数?

    观看以下示例 class A public A int param1 int param2 int param3 class B public A public B m param1 1 m param 2 m param 3 A m pa
  • Rails 5.1,图表显示多种货币的总和

    我遇到了一个关于图表踢的小问题 我有一个铁路应用程序 您可以在其中创建不同的货币 然后 您可以创建包含标题 金额的费用 并从列表和 user id 中选择货币 这种关系已经建立并且正在发挥作用 我的用户控制器中有这样的东西 user spe
  • 具有多个参数的 JPA Criteria API

    我需要创建一个使用带有多个参数的 JPA Criteria API 的搜索方法 现在的问题是并不是每个参数都是必需的 因此有些可能为空 并且它们不应包含在查询中 我已经用 CriteriaBuilder 尝试过此操作 但我不知道如何使其工作
  • 针对匿名对象的 System.Text.Json 序列化

    我正在开发一个 ASP Net Core 3 1 应用程序 使用 2 2 从另一个应用程序移植部分代码 到目前为止 我想从 NewtonSoft JSON 序列化库切换到新的 System Text Json 但遇到了一些麻烦 考虑一个使用
  • 将控制台输出定向到 Windows 窗体中的文本框的好方法是什么?

    在 C 中 将控制台输出定向到 Windows 窗体中的文本框的好方法是什么 如果我有一个包含 console WriteLine 的现有程序 我是否需要重载 Windows 窗体文本框中的函数 创建一个写入文本框的文本编写器 public
  • 描述符可以分配给实例属性而不是类属性吗?

    我正在研究 Python 描述符 到目前为止 我在 Google 上找到的所有示例都仅分配描述符对象的类属性 是否应该始终将描述符分配给类属性 描述符可以分配给实例属性吗 如果是这样 有什么例子或用例吗 例如 所有的例子都是这样的 gt g
  • Android:基于速度的 ViewPager 滚动

    ViewPager 现在的滚动方式是每个手势滚动一个项目 无论是全屏快速滑动还是慢速拖动 它对滑动手势的处理方式都是相同的 在最后一页仅前进一步 是否有任何项目或示例会添加基于速度的滑动 根据现有滑动的速度滚动多个项目 如果仍在进行中 并且
  • Matlab中散点数据的双三次插值

    我想知道是否有一种方法可以对分散的数据集 2d 进行双三次插值 我做了一些在线搜索 发现双三次补丁 不确定这些是什么 需要安装在分散的数据上 不知道如何从这里继续 任何帮助将不胜感激 注意 据我了解 Matlab 推荐TriScattere
  • Rx - 取消订阅事件

    我有一个 INotifyPropertyChanged 对象 Foo 我使用 Rx 的 FromEvent 方法将 Foo 转换为可观察的事件流 var myFoo new Foo var eventStream Observable Fr
  • Kubernetes - 更新后旧 Pod 未被删除

    我正在使用 Deployments 来控制 K8S 集群中的 pod 我的原始部署文件如下所示 apiVersion extensions v1beta1 kind Deployment metadata name websocket ba