kubernetes 中的 PreStop 钩子永远不会被执行

2024-03-27

我正在尝试创建一个小 Pod 示例,其中包含两个通过 emptyDir 卷共享数据的容器。在第一个容器中,我等待了几秒钟,然后它就被销毁了。

在 postStart 中,我正在将一个名为“started”的文件写入共享卷,在 preStop 中,我正在将一个名为“finished”的文件写入共享卷。

在第二个容器中,我循环几秒钟输出共享卷的内容,但“完成”文件永远不会创建。描述 Pod 也不会显示钩子错误。

也许有人知道我做错了什么

apiVersion: v1
kind: Pod
metadata:
  name: shared-data-example
  labels:
    app: shared-data-example
spec:
  volumes:
  - name: shared-data
    emptyDir: {}
  containers:

  - name: first-container
    image: ubuntu
    command: ["/bin/bash"]
    args: ["-c", "for i in {1..4}; do echo Welcome $i;sleep 1;done"]
    imagePullPolicy: Never
    env:
    - name: TERM
      value: xterm
    volumeMounts:
    - name: shared-data
      mountPath: /myshareddata
    lifecycle:
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo First container finished > /myshareddata/finished"]
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo First container started > /myshareddata/started"]

  - name: second-container
    image: ubuntu
    command: ["/bin/bash"]
    args: ["-c", "for i in {1..20}; do ls /myshareddata;sleep 1;done"]
    imagePullPolicy: Never
    env:
    - name: TERM
      value: xterm
    volumeMounts:
    - name: shared-data
      mountPath: /myshareddata
  restartPolicy: Never

发生这种情况是因为您的 Pod 的最终状态是Completed容器内的应用程序在没有任何外部调用的情况下停止。

Kubernetes 运行preStop仅当 pod 解析外部信号以停止时才挂接。挂钩是为了在需要停止 Pod 内的应用程序时实现优雅的自定义关闭。在您的情况下,您的应用程序已经自行正常停止,因此 Kubernetes 没有理由调用该钩子。

如果你想检查钩子是如何工作的,你可以尝试创建Deployment并更新它的图像kubectl rolling-update, 例如。在这种情况下,Kubernetes 将停止旧版本的应用程序,并且preStop钩子将被调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes 中的 PreStop 钩子永远不会被执行 的相关文章

随机推荐

  • 如何通过 MongoDB 同步在两个不同服务器上运行的两个应用程序

    我正在 golang 中开发一个 Web 应用程序 并使用单个 MongoDB 实例作为数据存储 我有应该专门执行的代码 由于我的 Web 应用程序运行在两个不同的服务器上 因此我无法使用 golang 同步工具 想法是通过锁定文档来使用
  • 在 PowerShell 中查询 LINQ 样式的列表

    add type Language CSharpVersion3 TypeDefinition public class pack code public pack code public string code get set publi
  • 对于不同的 arima 模拟组合,在 r 中获得第一个真实订单之前,如何计算 arima 订单不真实的次数

    大多数时候一个人跑步arima sim 函数来模拟特定的顺序arima mosel但是当人们通过检查此类模拟时间序列数据时auto arima 函数 它通常不会与 ARIMA 一个愿望和在arima sim 我想知道一个人可能需要跑多少次a
  • 内置函数str.lower()是如何实现的?

    我想知道 str lower 在 Python 中是如何实现的 所以我克隆了cpython https github com python cpython存储库并使用 grep 进行了一些搜索 经过几次跳跃之后unicode lower i
  • 分布式 Tensorflow:检查失败:大小>=0

    我正在使用 keras 2 0 6 Tensorflow的版本是1 3 0 我的代码可以在 theano 后端运行 但在张量流后端运行失败 F tensorflow core framework tensor shape cc 241 检查
  • 使用react-testing-library时无法找到带有文本的元素:“myText”错误

    我正在尝试使用react testing library使用 React 和 Jest 但我的一个测试失败了 我认为这与 regex 上的正则表达式有关className prop在测试文件上 下面我附上了各自的测试和组件文件 另外 有没有
  • 如何更改后退按钮上的文本

    默认情况下 后退按钮使用视图控制器的标题作为其上的文本 我可以在不更改视图控制器标题的情况下更改后退按钮上的文本吗 我需要这个 因为我有一个视图控制器 其标题太长而无法显示 在这种情况下 我想仅显示 后退 作为后退按钮的标题 我尝试了以下方
  • Graphite:用一个命令处理多个系列

    我想将两个系列放在石墨上的同一张图中仪表板 但是 由于仪表板需要单行命令 我找不到不涉及使用通配符的方法 这是我想要在同一张图中显示的两个系列的示例 sum base foo bar positive sum base foo bar ne
  • 自定义选择菜单对话框上的 jquery mobile 关闭按钮

    我正在尝试将 jqm 对话框上的关闭按钮更改为 X 以外的其他按钮 我不能为此使用 CSS 因为我不希望每次都应用它 所以我正在寻找一种使用 jquery 来实现此操作的方法 有问题的对话框是选择菜单 http api jquerymobi
  • @BeforeClass 注释:Junit 与 TestNG

    Why the BeforeClass中的方法JUnit is static而在TestNG its non static TestNG是作为改进而开发的JUnit 那么他们为什么选择这种实现方式呢 Since BeforeClass只运行
  • 检查查询字符串是否为 int 的最佳方法?

    我的一位同事想到的一个问题是 检查查询字符串是否为 int 的最佳方法是什么 我建议使用经典的 Int Parse 和 try and catch 还建议使用 TryParse 其实我也想不出其他的办法了 有任何想法吗 Int32 TryP
  • 使用 jQuery 编写 OO Javascript

    我来自 Prototype JS 背景 通过使用 OO Javascript 被鼓励Class create 现在我正在做一些 JQuery 工作 并且尝试编写一些结构正确的 JQuery 代码 例如 我可以从两个不同的单击事件处理程序调用
  • MySQL SUM 函数

    我了解 SQL sum 函数 这是我的代码
  • 无法对文档执行 querySelectorAll。怎么修?

    我在做什么 我有从 PHP 数组生成的链接 该数组生成它自己的唯一 ID 该 ID 应该指向它自己的模态 弹出窗口 div 该 div 具有与链接 ID 匹配的 ID 模态框也是使用 PHP 数组自动生成的 我收到这个错误 我对此非常陌生
  • REPLACE INTO 查询是好的做法吗?

    我需要一个 SQL 查询来更新或创建数据库条目 如果某个客户尚不存在 我在网上找到了目前的解决方案 command CommandText REPLACE INTO Resource Tracer dbo Customer Customer
  • 如何登录 OpenEdge Progress?

    我找到了在 Progress 4GL 中记录某些内容的不同方法 但没有一个令人满意 简单的MESSAGE语句的缺点是它对帧的处理非常糟糕 ON CHOOSE OF btn Q4 DO MESSAGE Line 1 MESSAGE Line
  • struts2 中的 JQuery Grid - 初学者

    我对 struts2 和 JQuery 编程很陌生 在我的应用程序中 当调用 loginAction 时 如果用户是管理员 我会将他们定向到 AdminLoadAction 此操作加载 adminHome jsp 我需要的是 adminHo
  • 有没有办法将--compressed传递到PHP的curl_setopt()中?

    使用curl时 我发现我所访问的服务器上的行为有所不同 具体取决于我是否通过 compressed作为一个论点或不 我已经将 Accept Encoding 标头设置为 gzip deflate sdch curl setopt ch CU
  • 使用 NSPredicate 搜索 NSFetchedResultsController

    我已经被这个问题困扰了一段时间 并已尽力找出解决方案 我正在使用 Core Data 而且对于 iOS 编码来说相对较新 我在如何搜索 fetchedResultsController 以过滤掉用户在 searchBar 中输入的字符串时遇
  • kubernetes 中的 PreStop 钩子永远不会被执行

    我正在尝试创建一个小 Pod 示例 其中包含两个通过 emptyDir 卷共享数据的容器 在第一个容器中 我等待了几秒钟 然后它就被销毁了 在 postStart 中 我正在将一个名为 started 的文件写入共享卷 在 preStop