[toc]
infra 容器(pause)详解
官方文档参考
| 主题 | 官方链接 |
|---|---|
| Pause 容器(官方定义,Windows 容器页内的 Pause 容器章节) | https://kubernetes.io/zh-cn/docs/concepts/windows/intro/ |
| 容器运行时(重载沙箱 pause 镜像的配置) | https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/ |
| 容器运行时接口 CRI(PodSandbox 概念) | https://kubernetes.io/docs/concepts/architecture/cri/(中文页暂缺) |
| 在 Pod 中的容器之间共享进程命名空间 | https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/share-process-namespace/ |
| pause 镜像源码(kubernetes 仓库 build/pause) | https://github.com/kubernetes/kubernetes/tree/master/build/pause |
| Pod 概述(共享上下文) | https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/ |
相关笔记:Pod创建流程详解 讲了 pause 在创建流程中的位置;kubelet 视角的深入分析见图解版(4. 运行沙箱容器一节)。
1. pause 是什么
每个 Pod 里其实都有一个你看不见的容器——infra 容器,也叫 pause 容器或沙箱(sandbox)容器。它是 CRI 运行时创建 Pod 时最先启动的容器,运行官方维护的 registry.k8s.io/pause 镜像——一个用 C 写的极简程序,启动后永远 sleep,几乎不消耗资源(镜像仅约 300KB)。
官方对它的定义(引自官方文档 Pause 容器章节):
在 Kubernetes Pod 中,首先创建一个基础容器或 "pause" 容器来承载容器。在 Linux 中,构成 Pod 的 cgroup 和命名空间维持持续存在需要一个进程;而 pause 进程就提供了这个功能。属于同一 Pod 的容器(包括基础容器和工作容器)共享一个公共网络端点(相同的 IPv4 和/或 IPv6 地址,相同的网络端口空间)。Kubernetes 使用 pause 容器以允许工作容器崩溃或重启,而不会丢失任何网络配置。
一句话总结:pause 的意义不是干活,而是"占住"命名空间——它是整个 Pod 的地基。
