【问题标题】:Can I terminate a process gracefully before the hard eviction with a prestop hook?我可以在使用 prestop 钩子进行硬驱逐之前优雅地终止进程吗?
【发布时间】:2021-05-26 08:42:02
【问题描述】:

我的应用程序在收到 SIGTERM 时会正常停止。优雅停止操作正在删除 ZooKeeper 中的一个 znode。

但我尝试的是在 Kubernetes 驱逐我的 pod 之前优雅地自动终止进程。

我想将 prestop hook 设置为“kill 1”,以便在 pod 被驱逐之前优雅地停止。

我不希望 prestop 钩子在所有情况下都有效,但我认为,这样我会有一些保证。

不知道我的想法是否可行。

【问题讨论】:

    标签: go kubernetes apache-zookeeper


    【解决方案1】:

    是的 preStop 是可能的 - 并且涵盖了您的用例。这是k8s docs 示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: lifecycle-demo
    spec:
      containers:
      - name: lifecycle-demo-container
        image: nginx
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
          preStop:
            exec:
              command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]
    

    【讨论】:

    • 如果 pod 在硬驱逐时没有执行 prestop hook,Kubernetes 是否会在没有 SIGTERM 的情况下立即发送 SIGKILL?如果没有,我也想知道 SIGTERM 在 prestop 钩子中有什么好处,如果有的话。
    • preStop 如果您正在运行数据库等,并且希望在 pod 脱机时防止损坏,那么这非常重要。指示您的容器干净地关闭 - 刷新任何磁盘缓存等 - 总是比冒险硬退出更可取。
    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 2011-01-04
    • 1970-01-01
    • 2019-08-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多