kubernetes集群中的pause容器
2021-05-01 11:27
标签:document man UNC 空间 oss 构建 网络模式 point warning 昨天晚上搭建好了k8s多主集群,启动了一个nginx的pod,然而每启动一个pod就伴随这一个pause容器,考虑到之前在做kubelet的systemd unit文件时有见到: 首先找一下源码看一下: pause.c文件 至于里面写的啥,我也看不懂,pose出来让你们看看哈! FROM scratch: 基础镜像是一个空镜像(an explicity empty image) pause的Makefile ARCH值: 可以看出支持很多架构类型,默认为amd64 制作pause镜像的过程如下: $(KUBE_CROSS_IMAGE):$(KUBE_CROSS_VERSION)=k8s.gcr.io/kube-cross:v1.12.6-1 至于详细的构建过程,我就不写了, 我看不懂呀! pause容器的工作 在Unix系统中,PID为1的进程为init进程,即所有进程的父进程。它很特殊,维护一张进程表,不断地检查进程状态。例如,一旦某个子进程由于父进程的错误而变成了“孤儿进程”,其便会被init进程进行收养并最终回收资源,从而结束进程。 或者,某子进程已经停止但进程表中仍然存在该进程,因为其父进程未进行wait syscall进行索引,从而该进程变成“僵尸进程”,这种僵尸进程存在时间较短。不过如果父进程只wait,而未syscall的话,僵尸进程便会存在较长时间。 同时,init进程不能处理某个信号逻辑,拥有“信号屏蔽”功能,从而防止init进程被误杀。 容器中使用pid namespace来对pid进行隔离,从而每个容器中均有其独立的init进程。例如对于寄主机上可以用个发送SIGKILL或者SIGSTOP(也就是docker kill 或者docker stop)来强制终止容器的运行,即终止容器内的init进程。一旦init进程被销毁, 同一pid namespace下的进程也随之被销毁,并容器进程被回收相应资源。 kubernetes中的pause容器便被设计成为每个业务容器提供以下功能: kubernetes集群中的pause容器 标签:document man UNC 空间 oss 构建 网络模式 point warning 原文地址:https://www.cnblogs.com/lijianming180/p/12147607.html
pause源码C语言编写的主要有四个文件:
orphan.c文件
Makefile文件用于制作pause镜像,制作镜像的模板是Dockerfile,首先看这个Dockerfile(去除注释)文件:
ARG ARCH: 等待在docker-build -build-arg时提供的ARCH参数
ADD bin/pause-$(ARCH)/pause: 添加外部文件到内部
ENTRYPOINT[“/pause”]: 开启容器,运行命令
中间两部非常重要,至于如何实现的不懂哦?
启动一个容器
可知kubernetes的pod抽象基于Linux的namespace和cgroups,为容器提供了良好的隔离环境。在同一个pod中,不同容器犹如在localhost中。
在pod中担任Linux命名空间共享的基础;
启用pid命名空间,开启init进程。