在 Kubernetes (以下简称 K8s)中,Pod 是最小的可部署实体。Pod 包含一个或多个容器,它们共享网络和存储空间。本文将详细介绍 K8s 中 Pod 的生命周期及其状态,并提供示例代码以加深理解。
Pod 的生命周期
Pod 的生命周期由创建、运行、终止三个阶段组成。具体如下:
创建阶段
Pod 的创建包括两个过程。首先,需要定义 Pod 的配置文件,该文件指定了 Pod 的容器、配置、存储等信息。其次,需要使用 kubectl create
命令将配置文件提交到 K8s 中。由于 K8s 使用了控制器模式(如 ReplicaSet、Deployment 等),因此只需定义一次 Pod 的配置即可自动创建和管理多个 Pod。
运行阶段
Pod 创建后,K8s 会根据配置信息自动调度容器到相应的节点上,并自动创建 Network Namespace 以实现网络隔离。当所有容器启动后,Pod 进入“运行”状态。在运行过程中,K8s 会自动监视 Pod 的健康状况,如容器是否启动、运行正常等,如果发现异常情况,则按照设定的策略进行相应的处理。例如,如果设置了重启策略为 Always,则在容器退出时 K8s 会自动重启容器,如果连续失败多次,则认为 Pod “死亡”。
终止阶段
Pod 的终止可分为两种情况,即主动终止和被动终止。主动终止包括用户手动删除或更改 ReplicaSet 的副本数量;被动终止通常由以下原因导致:节点故障、容器 OOM、存储满、网络故障等。对于主动终止,K8s 会自动删除 Pod 及其相关资源;对于被动终止,K8s 会尝试重启 Pod,如果重启不成功则会自动删除 Pod 及其相关资源。
Pod 的状态
Pod 的状态包括 Running、Succeeded、Failed、Pending、Unknown 五种。具体如下:
- Running:Pod 正在运行中,所有容器都处于运行状态。
- Succeeded:Pod 中所有容器都已正常退出,且 K8s 已经成功处理完退出状态码。
- Failed:Pod 中至少有一个容器以非正常状态退出。
- Pending:Pod 已经创建,但尚未调度容器。
- Unknown:Pod 的状态无法查明。
K8s 通过 API 对外暴露了 Pod 的状态信息。以下是通过 API 获取 Pod 状态信息的示例代码:
// javascriptcn.com 代码示例 const k8s = require('@kubernetes/client-node'); const kc = new k8s.KubeConfig(); kc.loadFromDefault(); const k8sApi = kc.makeApiClient(k8s.CoreV1Api); async function getPodStatus(namespace, podName) { try { const response = await k8sApi.readNamespacedPod(podName, namespace); const podStatus = response.body.status; console.log('Pod status:', podStatus.phase); console.log('Container status:', podStatus.containerStatuses); } catch (err) { console.log(err); } } getPodStatus('default', 'my-pod');
总结
本文详细介绍了 K8s 中 Pod 的生命周期及其状态,包括创建、运行、终止三个阶段,以及 Running、Succeeded、Failed、Pending、Unknown 五种状态。通过示例代码可以了解如何通过 API 获取 Pod 状态信息,希望本文能对读者更好地了解 K8s 中 Pod 的使用和管理提供帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652e69807d4982a6ebf70b3a