文章目录

  • 小结
  • 描述
  • 实例
  • 参考


小结

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的镜像:

[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指令所看到的镜像为空:

[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

可以看到以下设置:

[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的镜像进行远程访问:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

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

docker -H  192.168.238.130:2375 images
docker -H  registry:2375 images

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

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

参考

51CTO: docker查看远程仓库 docker

远程Kubernetes: Don’t Panic: Kubernetes and DockerKubernetes is deprecating Docker as a container runtime after v1.20.Introducing Container Runtime Interface (CRI) in KubernetesOpen Container Initiative


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8sDocker