2023年6月30日发(作者:)
k8s-kubernetes将弃⽤docker(3) k8s将弃⽤docker1) k8s将在1.23版本彻底弃⽤docker,改⽤containerd,但Docker 作为容器镜像构建⼯具的作⽤将不受影响,⽤其构建的容器镜像将⼀如既往地在集群中与所有容器运⾏时正常运转。Docker⽣成的镜像实际上并不特定于Docker,更准确地说它应该属于OCI(Open Container Initiative-开放容器倡议)镜像。2) docker当年的实现被拆分出了⼏个标准化的模块,标准化的⽬的是模块是可被其他实现替换的,不由任何⼀个⼚商控制。docker由 docker-client ,dockerd,containerd,docker-shim,runc组成,所以containerd是docker的基础组件之⼀,containerd 被捐赠给CNCF社区后,社区给其添加了镜像管理模块和CRI模块,这样containerd不只可以管理容器的⽣命周期,还可以直接作为 K8s 的运⾏时使⽤。3) 在kubernetes平台中,为了解决与容器运⾏时(例如docker),集成的问题,在早期社区推出CRI(container Runtime interface, 容器运⾏时接⼝),以⽀持更多的容器运⾏时,⽐如红帽的CRI-O、Podman。当我们使⽤docker作为容器运⾏时之后,架构图如下所⽰,kubernetes计划弃⽤的是kubelet中dockershim,即kubernetes kubelet实现中的组件之⼀,它能够与docker engine进⾏通信。
4) kubelet调⽤链# Docker 作为 k8s 容器运⾏时,调⽤关系如下kubelet --> dockershim (在 kubelet 进程中) --> dockerd --> containerd# Containerd 作为 k8s 容器运⾏时,调⽤关系如下kubelet --> cri plugin(在 containerd 进程中) --> containerd5) 从k8s的⾓度看,可以选择 containerd 或 docker 作为运⾏时组件,Containerd调⽤链更短,组件更少,更稳定,占⽤节点资源更少。docker内部调⽤链⽐较复杂,多层封装和调⽤,导致性能降低,提升故障率,不易排查,docker还会在宿主机上创建⽹络规则,存储卷,也带来了安全隐患。K8s提供了更强的卷挂载能⼒和集群级别的⽹络能⼒,在集群中kubelet只会使⽤到 docker 提供的镜像下载和容器管理功能,⽽编排、⽹络、存储等功能都不会⽤到。containerd与docker相兼容,相⽐docker轻量很多,⽬前较为成熟。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688055952a72156.html
评论列表(0条)