区分docker和containerd;
1.区分docker和containerd
Containerd的管理工具是crictl;
Crictl ps查找的是查找本节点containerd容器运行时管理的容器
(因为crictl ps所查找的pod并不位于当前节点上,所以并没有对应输出,只有在qfusion2上才能看到)
Docker的管理工具是docker;
Docker ps查找的是由本节点docker容器运行时管理的容器。(在之后的一些版本中还需要docker的原因是docker的一些其他功能如镜像拉取还需要使用,如下可以看到由docker管理的容器运行情况)
在k8s中pod是一个逻辑概念,在k8s中是一个集群,所以可以使用ks get pod查看所有pod
怎么理解Docker是包含containerd的?
Docker的实际创建容器是用的containerd,只不过docker上层还多了build,dockerfile这些功能,所以在1.24版本后k8s将docker其他部分给剔除了,只保留了containerd容器进行时,然后因为有些docker功能还需要使用,例如镜像推送和拉取,所以还用到了docker。
所以,总的来说,1.24版本后的k8s并不是不再支持docker,而是不再使用docker作为容器运行时,而是使用contained,如果想要在k8s中继续使用docker需要在kubelet和docker之间加一层docker-shim,但这样就远不如kubelet之间和contained通信效率高。(而kubelet和contained通信之间使用的是CRI接口)具体文件存放在/usr/local/bin
2.验证同一个pod中的容器共享网络,并且说明在事实上并不存在一个pod作为边界来隔离容器,pod只是一个逻辑概念,pod的本质是一组共享网络的容器,并且可以共享存储。
·docker inspect --format '{{ .State.Pid }}' [容器ID]
命令:查看由docker管理的容器在实际操作系统上对应的PID
·crictl inspect --output go-template --template '{{.info.pid}}' [容器ID]
命令:查看由contained管理的容器在实际操作系统上对应的PI
(1)查找同一pod下的容器
(2)查找A和B容器的实际PID
(3)可以看到这两个容器是共享同一个network namespace