首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库伯内特斯的PreStop钩子从来没有被执行过

库伯内特斯的PreStop钩子从来没有被执行过
EN

Stack Overflow用户
提问于 2018-04-05 11:01:55
回答 1查看 9.9K关注 0票数 5

我正在尝试创建一个带有两个容器的Pod示例,这些容器通过一个emptyDir卷共享数据。在第一个容器中,我等待几秒钟,它才会被销毁。

在postStart中,我用“已启动”的名称将文件写入共享卷,在preStop中,我用“已完成”的名称将文件写入共享卷。

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

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-05 12:24:42

之所以发生这种情况,是因为您的吊舱的最终状态是Completed,容器中的应用程序在没有任何外部调用的情况下停止了。

库伯奈特斯运行preStop钩子只有当荚解析一个外部信号停止。当你需要停止时,钩子是用来为豆荚中的应用程序实现优雅的自定义关机的。在您的例子中,您的应用程序本身已经优雅地停止了,因此Kubernetes没有理由调用钩子。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49670761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档