Kubernetes从基础到实战应用(Pod Lifecycle)
编辑
生命周期(Pod Lifecycle)
[Pod Lifecycle|Kubernetes] https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/
本页面讲述 Pod 的生命周期。 Pod 遵循预定义的生命周期,起始于 Pending 阶段, 如果至少其中有一个主要容器正常启动,则进入 Running,之后取决于 Pod 中是否有容器以失败状态结束而进入 Succeeded 或者 Failed 阶段。
容器状态
Waiting(等待中): 如果容器并不处在 Running 或 Terminated 状态之一,它就处在 Waiting 状态。 处于 Waiting 状态的容器仍在运行它完成启动所需要的操作:例如, 从某个容器镜像仓库拉取容器镜像,或者向容器应用 Secret 数据等等。 当你使用 kubectl 来查询包含 Waiting 状态的容器的 Pod 时,你也会看到一个 Reason 字段,其中给出了容器处于等待状态的原因。
Running(运行中): Running 状态表明容器正在执行状态并且没有问题发生。 如果配置了 postStart 回调,那么该回调已经执行且已完成。 如果你使用 kubectl 来查询包含 Running 状态的容器的 Pod 时, 你也会看到关于容器进入 Running 状态的信息。
Terminated(已终止): 处于 Terminated 状态的容器开始执行后,或者运行至正常结束或者因为某些原因失败。 如果你使用 kubectl 来查询包含 Terminated 状态的容器的 Pod 时, 你会看到容器进入此状态的原因、退出代码以及容器执行期间的起止时间。如果容器配置了 preStop 回调,则该回调会在容器进入 Terminated 状态之前执行。
回调钩子
postStart钩子
postStart钩子是 Pod 生命周期管理的重要特性,允许你在容器启动后立即执行特定操作。
HTTPGet方式
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: myapp:1.0
ports:
- containerPort: 8080
lifecycle:
postStart:
httpGet:
path: /init
port: 8080
scheme: HTTP
Exec方式
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: myapp:1.0
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo '容器启动后执行' > /log/init.log"]
preStop钩子
preStop钩子级别:
容器级别:在容器终止之前执行,用于容器内部的清理工作。
Pod级别:在Pod中的所有容器终止之前执行,用于跨容器的清理工作。
作用:
提供了一个优雅机制来确保容器在终止之前执行必要的清理操作,例如保存数据、关闭连接、释放资源等。
增加了容器的可靠性和稳定性,避免了突然终止容器可能导致的数据丢失或资源泄漏等问题。
使用场景:
数据持久化:在容器终止之前,可以使用preStop钩子将容器内的数据保存到持久化存储中,以确保数据不会丢失。
连接关闭:在容器终止之前,可以使用preStop钩子关闭容器内的连接,以确保连接资源能够正常释放。
资源释放:在容器终止之前,可以使用preStop钩子释放容器所占用的资源,例如关闭文件描述符、停止子进程等。
注意
terminationGracePeriodSeconds
是容器被杀死的最大宽限时间,即使preStop未完成或者容器内进程未来得及停止仍会被杀死。
- 0
- 0
-
分享