Pod?Pod的根容器、生命周期····
·
1. Pod 是什么?
答:Pod 是 K8s 能够创建、管理和部署的最小计算单元。
Pod 包含一个或多个业务容器,这些容器共享存储、网络、以及如何运行这些容器的声明。
同一个 Pod 内的容器共享:
-
网络(同一个 IP、端口空间、可通过 localhost 通信)
-
IPC(进程间通信)
-
存储(Volume)
-
UTS(主机名)
# 查看所有 Pod
kubectl get pods
# 查看 Pod 详细信息(含 IP、节点、状态)
kubectl get pods -o wide
# 查看 Pod 内所有容器
kubectl describe pod <pod-name>
# 进入 Pod 内某个容器
kubectl exec -it <pod-name> -c <container-name> -- /bin/sh
2. Pod 的根容器是?
答:每个 Pod 都有一个特殊的被称为“根容器”的 pause 容器,pause 容器有时候也称为 infra 容器,
被当作 Pod 中所有容器的“父容器”,pause 在 Pod 中作为共享 Linux Namespace 的基础,同时
提供 PID Namespace 共享,为每个 Pod 提供 1 号进程,并收集 Pod 内的僵停进程。
Pause 容器是 Pod 中第一个启动的容器,它持有整个 Pod 的 Network Namespace。
其他业务容器通过
即使业务容器频繁重启,Pod 的 IP 地址也不会变。
其他业务容器通过
container join 加入到这个 Namespace 中。即使业务容器频繁重启,Pod 的 IP 地址也不会变。
# 查看 Pod 所在的节点上运行的 pause 容器(需要在节点上执行)
crictl ps | grep pause
# 或通过 docker(旧版本)
docker ps | grep pause
# 在 Pod 所在节点查看网络命名空间
lsns | grep net
# 查看 Pod 的 IP(不会随业务容器重启而改变)
kubectl get pod <pod-name> -o jsonpath='{.status.podIP}'
3. 解释 Pod 的生命周期。
答:Pod 遵循预定义的生命周期,起始于 Pending 阶段, 如果至少其中有一个主要容器正常启动,则
进入 Running,之后取决于 Pod 中是否有容器以失败状态结束而进入 Succeeded 或者 Failed。
- Pending(挂起):Pod 已被 K8s 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包
括调度 Pod 的时间和通过网络下载镜像的时间。
- ContainerCreating(容器创建中):Pod 已被调度到节点,正在创建容器环境并拉取镜像。
- Running(运行中):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建,至少有
一个容器正在运行,或者正处于启动或重启状态。
- Succeeded(成功):Pod 中的所有容器都被成功终止,并且不会再重启。
- Failed(失败):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止,即容器
以非 0 状态退出或者被系统终止。
- Terminating(终止中):当 Pod 被删除时进入此状态,开始优雅终止过程。
- 未知(Unknown):因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。
# 1. 实时监控 Pod 状态变化(会看到 Pending -> ContainerCreating -> Running)
kubectl get pods -w
# 2. 查看 Pod 的详细事件(找到卡住的原因)
kubectl describe pod <pod-name>
# 3. 查看 Pod 最终状态(phase)
kubectl get pod <pod-name> -o jsonpath='{.status.phase}'
# 4. 手动删除 Pod 并观察 Terminating
kubectl delete pod <pod-name> --grace-period=10
# 5. 强制删除(跳过优雅终止)
kubectl delete pod <pod-name> --force --grace-period=0
# 6. 查看 Pod 退出原因(对于 Failed 状态)
kubectl logs <pod-name> --previous
kubectl describe pod <pod-name> | grep -A 10 "State"
更多推荐


所有评论(0)