kubelet中的Docker支持现在已弃用,并将在未来的版本中删除。kubelet使用了一个名为dockershim
的模块,该模块实现了对Docker的CRI支持,并在Kubernetes社区中发现了维护问题。我们鼓励您评估迁移到一个容器运行时的情况,该容器运行时是CRI(v1alpha1或v1兼容)的完整实现。
也就是说,在后续的Kubernetes1.20x
版本以后会删除dockershim
组件,但是由于目前Docker的使用用户众多,中间必然会有替换的一个过渡期,所以大家可以更多的关注一下其他的Container Runtime
。 例如我们的Podman
、Containerd
、cri-o
等其他容器运行时来运行kubernetes。
下面我们就具体来看看Kubernetes所提到的弃用dockershim
到底是什么东西.
CRI接口的具体用处就在于
create
、stop
等操作。pull
、rmi
等操作。OCI的作用在于
ImageSpec(容器标准包)
: docker inspect <image_id>
看到的内容runtimeSpec
: ociVersion(string, REQUIRED)
:是该州遵守的开放容器倡议运行时规范的版本。id
: 容器的 ID。这在此主机上的所有容器中必须是唯一的。不要求它在主机之间是唯一的。status(string, REQUIRED)
: 是容器的运行时状态。该值可以是以下之一 pid
: host上看到的容器进程bundle
:host上容器bundle目录的绝对路径annotation
:容器相关的标注,可选所以在Json的序列化时,必须遵守以下格式
{
"ociVersion": "0.2.0",
"id": "oci-container1",
"status": "running",
"pid": 4422,
"bundle": "/containers/redis",
"annotations": {
"myKey": "myValue"
}
}
Dockershim
作用:把外部收到的请求转化成 docker daemon
能听懂的请求,让 Docker Daemon 执行创建、删除等容器操作。
具体看一下
kubelet
是怎样创建容器的
dockershim
,请求创建一个容器。CRI 即容器运行时接口,这一步中,Kubelet 可以视作一个简单的CRI Client
,而 dockershim 就是接收请求的 Server。目前dockershim
是内嵌在 Kubelet 中的,所以接收调用就是 Kubelet 进程。dockershim
收到请求后,转化成 docker daemon的请求,发到docker daemon 上请求创建一个容器。containerd-shim
去操作容器。是因为容器进程需要一个父进程来做诸如收集状态,维持 stdin 等 fd 打开等工作。而假如这个父进程就是 containerd,那每次 containerd 挂掉或升级,整个宿主机上所有的容器都得退出了。而引入了 containerd-shim
就规避了这个问题(containerd 和 shim 并不是父子进程关系)。containerd-shim
则会成为容器进程的父进程,负责收集容器进程的状态,上报给 containerd,并在容器中 pid 为 1 的进程退出后接管容器中的子进程进行清理,确保不会出现僵尸进程。扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有