简介
容器生命周期函数是Kubernetes提供的核心机制,用于在容器运行的关键阶段插入自定义逻辑。这些函数为容器化应用提供了精细化的过程控制能力,使应用能够更好地适应云原生环境的动态特性 CCE提供的生命周期函数如下
更多信息,请参见Container Lifecycle Hooks https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/。
- 1.启动命令:容器启动时执行的命令,用于定义容器的主进程。该进程作为容器启动后的默认执行入口,其运行状态直接决定容器的生命周期。适用于需要指定应用入口、环境变量、挂载点或端口映射等初始化场景。
- 2.启动后处理(postStart Hook):是Kubernetes提供的容器生命周期Hook,用于在容器主进程启动后立即执行初始化任务(如服务注册、动态配置生成等)。该Hook由kubelet异步触发,与主进程并行运行,避免阻塞容器启动流程,从而加快容器就绪速度。适用于需要在应用进程启动后,立即进行环境配置或运行初始化逻辑的场景。
- 3.停止前处理(preStop Hook):是Kubernetes提供的容器生命周期Hook,用于在容器终止前执行预定义清理逻辑。当Pod被删除或更新时,kubelet会先触发该Hook,执行相关操作(如注销服务、刷新状态等),然后再向容器主进程发送SIGTERM信号,确保应用实现优雅关闭。适用于需安全停机避免数据丢失或服务异常的场景。
1.启动命令
启动命令指容器启动时执行的操作,用于定义容器的主进程,其运行状态直接决定容器的生命周期。如果该命令执行失败且未配置重启策略,容器将直接终止。
在默认情况下,镜像启动时会运行默认命令,如果想运行特定命令或重写镜像默认值,需要进行相应设置。默认情况下,容器会执行镜像中预设的启动命令。Docker镜像中包含一组用于定义启动行为的元数据字段,即ENTRYPOINT和CMD。如果未在容器规范中显式指定命令与参数,容器将采用镜像构建时设置的默认值。
2.启动后处理(postStart Hook)
用于在容器主进程启动后立即执行初始化任务,如服务注册、动态配置生成等。该Hook由Kubelet异步触发,与主进程并行运行。尽管PostStart Hook与容器主进程是异步执行的,但如果其执行时间过长或挂起,可能会阻止容器正式进入Running状态。若执行失败,可能会导致容器启动失败并被终止。
3.停止前处理(preStop Hook)
如果容器发生崩溃或异常退出,PreStop Hook将不会被触发。在PreStop Hook执行之前,Pod的终止宽限期(Termination Grace Period)将开始倒计时。无论该Hook处理程序是否成功完成,容器都会在该宽限期内被终止,除非存在终结器(Finalizer)延迟终止流程。在 PreStop Hook执行完成或宽限期结束之前,容器的其他管理操作将被阻塞。
注意:“执行命令”必须同步、前台执行,不支持以后台或异步方式运行,否则可能导致生命周期钩子执行失败。
yaml样例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
command:
- sleep 3600 #启动命令:让当前进程暂停执行3600s
imagePullPolicy: Always
lifecycle:
postStart:
exec:
command:
- /bin/bash
- install.sh #启动后命令:在/bin/bash执行install.sh命令
preStop:
exec:
command:
- /bin/bash
- uninstall.sh #停止前命令:在/bin/bash执行uninstall.sh命令
name: nginx
imagePullSecrets:
- name: default-secret
通过xkube进行设置
通过多集群k8s管理平台xkube的功能可以轻松的设置生命周期,xkube安装部署参考:https://blog.csdn.net/weixin_56364253/article/details/156390146