Kubernetes 0-1 使用preStop优雅终止Pod
2021-06-02 09:01
标签:简单的 presto 成功 rect define 使用 最简 超时 less Kubernetes允许Pod终止之前,执行自定义逻辑。 字段定义: 有三种preStop方式: 使用最简单的exec作示例,详细查看一下exec下需要定义的字段: 接下来按照字段释义,直接定义一个Pod: 删除pod: 在新终端窗口(因为删除pod会占用终端窗口)获取pod内文件内容,需要在pod完全删除之前(10s内,也可以将该值设置稍长一点): 这说明,preStop确实生效了。 与preStop相对应,有一个postStart的概念,在容器创建成功后执行,可用于初始化资源,准备环境等; 如果preStop与postStart执行失败,将会杀死容器。所以作为钩子函数,应该尽量保证它们是轻量的; Pod的终止过程: 删除Pod => Pod被标记为Terminating状态 => Service移除该Pod的endpoint => kubelet甄别Terminating状态的pod,执行pod的preStop钩子 => 如果执行preStop超时(grace period) ,kubelet发送SIGTERM并等待2秒 => ... Kubernetes 0-1 使用preStop优雅终止Pod 标签:简单的 presto 成功 rect define 使用 最简 超时 less 原文地址:https://www.cnblogs.com/Med1tator/p/14461200.html字段定义
pod.spec.containers.lifecycle.preStop
$ kubectl explain pod.spec.containers.lifecycle.preStop
KIND: Pod
VERSION: v1
RESOURCE: preStop
示例
$ kubectl explain pod.spec.containers.lifecycle.preStop.exec
KIND: Pod
VERSION: v1
RESOURCE: exec
$ kubectl apply -f pod.yaml
# pod.yaml文件内容:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh", "-c", "sleep 10m"]
lifecycle:
preStop:
exec:
command:
[
"/bin/sh",
"-c",
"echo this pod is stopping. > /stop.log && sleep 10s",
]
$ kubectl delete pod busybox
$ kubectl exec busybox -c busybox -- cat /stop.log
# 可以得到日志内容
this pod is stopping.
使用场景
结束语
文章标题:Kubernetes 0-1 使用preStop优雅终止Pod
文章链接:http://soscw.com/essay/89916.html