我正在尝试创建一个小 Pod 示例,其中包含两个通过 emptyDir 卷共享数据的容器。在第一个容器中,我等待了几秒钟,然后它就被销毁了。
在 postStart 中,我正在将一个名为“started”的文件写入共享卷,在 preStop 中,我正在将一个名为“finished”的文件写入共享卷。
在第二个容器中,我循环几秒钟输出共享卷的内容,但“完成”文件永远不会创建。描述 Pod 也不会显示钩子错误。
也许有人知道我做错了什么
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
发生这种情况是因为您的 Pod 的最终状态是Completed
容器内的应用程序在没有任何外部调用的情况下停止。
Kubernetes 运行preStop
仅当 pod 解析外部信号以停止时才挂接。挂钩是为了在需要停止 Pod 内的应用程序时实现优雅的自定义关闭。在您的情况下,您的应用程序已经自行正常停止,因此 Kubernetes 没有理由调用该钩子。
如果你想检查钩子是如何工作的,你可以尝试创建Deployment
并更新它的图像kubectl rolling-update
, 例如。在这种情况下,Kubernetes 将停止旧版本的应用程序,并且preStop
钩子将被调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)