Kubernetes与Docker和Containerd是个什么关系

文章目录

小结

Kubernetes 在不停地迭代演进,Kubernetes停止使用Docker做为Container Runtime,改为Containerd或者CRI-O等与与Container Runtime Interface (CRI)更兼容的Container Runtime,进行了小结。

容器组(Pod)-> 一个Pod封装一个或多个容器(container)

容器(container)

存储资源(volume)

仓库(repository)

镜像(image)
Container Runtime Interface (CRI)

CRI-O: OCI (Open Container Initiative) conformant runtimes.

描述

运行Kubernetes环境需要Container Runtime的支持,最熟知的CRI就是Docker了,Docker是最早被Kubernetes使用的Container Runtime之一,除了Docker以外,还有很多其它的Container Runtime。由于Kubernetes整个环境和它所使用的Container Runtime都在不停地迭代演进,早期Docker的Container Runtime与Kubernetes耦合过紧,不利于模块化。后来Kubernetes引入了Container Runtime Interface (CRI),也就是一个Plug-In API,这样就优先使用了与Container Runtime Interface (CRI)兼容的Container Runtime,例如ContainerdCRI-O,并停止了使用Docker的Container Runtime

一直以来,用户对Docker的使用很熟悉,也就是Docker与直接用户很友好,但它对Kubernetes的融合并不友好。 想要与Kubernetes整合,必须要使用到额外的叫作Dockershim的工具模块,也就是Docker + Dockershim 功能上成为了 Containerd,而Containerd可以用于Kubernetes的CRI. 既然Containerd支持了Docker + Dockershim的功能, Kubernetes在后面的发布版本中就去掉了Dockershim,这也就是Kuberntes停止使用Docker作为Container Runtime

虽然Kubernetes停止使用Docker的Container Runtime,但是Docker依然有其它用途,例如docker build,由Docker编译出来的镜像是OCI (Open Container Initiative)兼容的镜像,兼容于Containerd和CRI-O(OCI (Open Container Initiative) conformant runtimes)。

实例

以上的描述比较复杂, 用实际部署的Kubernetes的环境实例演示一下。

以下是Containerd的镜像:

shell 复制代码
[root@Master ~]#  crictl  --runtime-endpoint=unix:///run/containerd/containerd.sock images
IMAGE                                     TAG                 IMAGE ID            SIZE
docker.io/flannel/flannel-cni-plugin      v1.1.2              7a2dcab94698c       8.25MB
docker.io/flannel/flannel                 v0.22.0             38c11b8f4aa19       70.9MB
docker.io/weaveworks/weave-kube           latest              62fea85d60522       30.9MB
docker.io/weaveworks/weave-npc            latest              690c3345cc9c3       12.8MB
quay.io/metallb/speaker                   v0.13.10            191b3797a6626       50.3MB
registry.k8s.io/coredns/coredns           v1.10.1             ead0a4a53df89       16.2MB
registry.k8s.io/etcd                      3.5.7-0             86b6af7dd652c       102MB
registry.k8s.io/kube-apiserver            v1.27.3             08a0c939e61b7       119MB
registry.k8s.io/kube-apiserver            v1.27.4             e7972205b6614       33.4MB
registry.k8s.io/kube-apiserver            v1.27.6             19b9246d37c8b       33.4MB
registry.k8s.io/kube-controller-manager   v1.27.3             7cffc01dba0e1       111MB
registry.k8s.io/kube-controller-manager   v1.27.4             f466468864b7a       31MB
registry.k8s.io/kube-controller-manager   v1.27.6             7810e6aed9778       31MB
registry.k8s.io/kube-proxy                v1.27.3             5780543258cf0       60.8MB
registry.k8s.io/kube-proxy                v1.27.4             6848d7eda0341       23.9MB
registry.k8s.io/kube-proxy                v1.27.6             ec57bbfaaae73       23.9MB
registry.k8s.io/kube-scheduler            v1.27.3             41697ceeb70b3       56.9MB
registry.k8s.io/kube-scheduler            v1.27.4             98ef2570f3cde       18.2MB
registry.k8s.io/kube-scheduler            v1.27.6             993d768b9b96e       18.2MB
registry.k8s.io/pause                     3.6                 6270bb605e12e       298kB
registry.k8s.io/pause                     3.9                 e6f1816883972       319kB
[root@Master ~]# 

以上crictl是CRI的客户端指令, --runtime-endpoint指定了Endpoint of CRI container runtime service,指向了unix:///run/containerd/containerd.sock

而Docker指令所看到的镜像为空:

shell 复制代码
[root@Master ~]# docker images ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@Master ~]# 

也就是Kubernetes的镜像是放在Containerd下的,并不是放在docker下的。在Kubernetes的使用过程中,Docker被使用为进行镜像的编译。

查看docker服务设置vim /lib/systemd/system/docker.service

可以看到以下设置:

shell 复制代码
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

参考51CTO: docker查看远程仓库 docker 远程 ,进行如下设置可以对Docker的镜像进行远程访问:

shell 复制代码
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

访问指令如下,registry在本机的/etc/hosts文件里有设置:

shell 复制代码
docker -H  192.168.238.130:2375 images
docker -H  registry:2375 images

查看daemon.json设置:/etc/docker/daemon.json,如下:

json 复制代码
{
   "exec-opts":[
      "native.cgroupdriver=systemd"
   ],
   "insecure-registries":[
      "http://registry:80"
   ]
}

参考

51CTO: docker查看远程仓库 docker 远程
Kubernetes: Don't Panic: Kubernetes and Docker
Kubernetes is deprecating Docker as a container runtime after v1.20.
Introducing Container Runtime Interface (CRI) in Kubernetes
Open Container Initiative

相关推荐
兔兔爱学习兔兔爱学习2 小时前
Linux部署ragflow,从安装docker开始~
linux·docker
Herry_6442808253 小时前
k8s集群环境部署业务系统
云原生·容器·kubernetes
工业甲酰苯胺10 小时前
K8s新手系列之K8s中的资源
云原生·容器·kubernetes
悠悠-我心11 小时前
docker 通过定时任务恢复MySQL数据库
数据库·mysql·docker
YIBO040811 小时前
WSL2下Docker desktop的Cadvisor容器监控
运维·docker·容器·wsl·wsl2
weixin_4284984911 小时前
Docker inspect 命令介绍
docker·容器
weisian15111 小时前
云原生--核心组件-容器篇-6-Docker核心之-镜像仓库(公共仓库,私有仓库,第三方仓库)
docker·云原生·容器
冼紫菜12 小时前
[特殊字符] Docker 从入门到实战:全流程教程 + 项目部署指南(含镜像加速)
运维·分布式·后端·docker·云原生·容器
BLEACH-heiqiyihu12 小时前
k8s-Pod生命周期
云原生·容器·kubernetes
小马爱打代码13 小时前
Spring Boot × K8s 监控实战-集成 Prometheus 与 Grafana
spring boot·kubernetes·prometheus