保证在Kubernetes Job中执行preStop

时间:2018-06-06 17:35:29

标签: kubernetes

我的工作如下:

apiVersion: batch/v1
kind: Job
metadata:
  name: abcd-ca-installer-root
  namespace: abcd-sbenv-test
spec:
  backoffLimit: 2
  activeDeadlineSeconds: 30
  template:
    metadata:
      name: abcd-ca-installer-root
    spec:
      restartPolicy: Never
      activeDeadlineSeconds: 30
      containers:
      - name: abcd-ca-installer-root
        image: abc-dol-tools:5000/abcd-ca-installer:func-tst
        lifecycle:
         preStop:
          exec:
            command: ["/bin/sh", "/usr/local/yezdi/clean.sh"]
        imagePullPolicy: Always
        env:
...

基本上,我希望clean.sh在成功执行此作业后执行。 我在上面配置了preStop,但是,它看起来不像是在执行clean.sh 任何想法为什么?或者我怎么知道这是否甚至试图运行。我看过这篇文章,但它没有帮助。 another related question

我正在使用的其他版本信息是

# kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:55:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

docker --version
Docker version 17.12.1-ce, build 7390fc6

kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.2", GitCommit:"81753b10df112992bf51bbc2c2f85208aad78335", GitTreeState:"clean", BuildDate:"2018-04-27T09:10:24Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

2 个答案:

答案 0 :(得分:2)

每个容器都有其生命周期。您可以使用Lifecycle Hooks管理终止过程。

我查看了您提供的配置。 PreStop并不像您期望的那样工作。

在容器terminated之前立即调用PreStop挂钩,而不是当容器正常完成生命周期时。 它是阻塞的,意味着它是同步的,所以它必须在删除容器的调用之前完成。 没有参数传递给处理程序。

您可以在启动PreStop挂钩时使用shell脚本或调用http请求。

我发现Kubernetes Termination of Pods文档对这种情况很有用。

答案 1 :(得分:0)

执行命令:kubectl获取事件-n。 编辑脚本clean.sh在脚本末尾添加“ return 100”。 它将打印脚本的日志。 preStop事件仅在有错误时生成,但在成功的情况下它无法测试。因此,当将return 100脚本末尾放回去时,它将被视为错误,并且将在事件中显示。您可以使用上述命令记录视图

谢谢