我的工作如下:
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"}
答案 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脚本末尾放回去时,它将被视为错误,并且将在事件中显示。您可以使用上述命令记录视图
谢谢