【问题标题】:kubernetes prestop hook doesnt work with env variableskubernetes prestop 钩子不适用于环境变量
【发布时间】:2020-06-01 23:11:12
【问题描述】:

我有一个如下的部署模板。但是 prestop 钩子根本没有被执行。 这里的想法是在 Pod 终止之前将 zookeeper 节点设置为离线。

我正在运行 kubectl rollout 来重新启动 pod。而旧 pod 是在它终止时 prestop 不运行。有人可以检查一下有什么问题吗?

在成功停止的情况下,它的 prestop 基本上是如何执行的?我需要这个功能,因为这里涉及到 zookeeper,并且 api 连接到 zookeeper 以发送请求。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: abcd
  labels:
    app: abcd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: abcd
  template:
    metadata:
      labels:
        app: abcd
    spec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
#      terminationGracePeriodSeconds: 1
      containers:
      - name: se
        image: "xxx"
        lifecycle:
          preStop:
            exec:
              command: ["zookeepercli","--servers","zk-hs", "-c", "set", "$HOSTNAME", "offline"]
        ports:
        - containerPort: 2345
      - name: pe-1
        image: "xxx"
        lifecycle:
          preStop:
            exec:
              command: ["zookeepercli","--servers","zk-hs", "-c", "set", "$HOSTNAME", "offline"]
        ports:
        - containerPort: 2313

【问题讨论】:

  • 可以在终止时分享日志吗? @user2511126
  • 我查看了 kubectl describe pod,但它只显示(原因:正在杀死)消息:停止 se 并停止 pe-1
  • 你好,你用的是什么k8s版本?
  • 客户端版本:version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:" 2019-08-19T11:13:54Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"} 服务器版本: version.Info{Major:"1", Minor:"17 ", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T20:55:23Z", GoVersion:"go1.13.8", 编译器:"gc",平台:“linux/amd64”}
  • preStop 挂钩不使用环境变量。我搬到了 bash 脚本,现在可以工作了

标签: docker kubernetes


【解决方案1】:

正如 user2511126 在他/她的评论中提到的那样:

preStop 钩子不使用环境变量。我搬到了 bash 脚本,现在可以工作了

根据kubernetesdocumentation

预停

在容器因 API 请求或管理事件(如活性探测失败、抢占、资源争用等)而终止之前立即调用此挂钩。如果容器已经处于终止或完成状态,则调用 preStop 挂钩失败。它是阻塞的,意味着它是同步的,所以它必须在删除容器的调用被发送之前完成。 没有参数传递给处理程序。

终止行为的更详细描述可以在 Pod 的终止中找到。

不能将参数传递给处理程序,这包括环境变量。

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2018-10-15
    • 2017-09-16
    • 2021-03-11
    相关资源
    最近更新 更多