前言
不深入原理,主要阐述云原生应用或平台者 需要掌握的容器运行时的相关知识。
相关概念
1、docker 由 docker-client ,dockerd,containerd,docker-shim,runc组成,所以containerd是docker的基础组件之一。
2、containerd 相比于docker , 多了 namespace 概念,每个 image 和 container 都会在各自的namespace下可见。
3、从k8s的角度看,可以选择 containerd 或 docker 作为运行时组件:其中 containerd 调用链更短,组件更少,更稳定,占用节点资源更少。所以k8s后来都默认使用 containerd 。
-
docker作为k8s容器运行时,调用关系: kubelet --> dockershim (在 kubelet 进程中) --> dockerd --> containerd
-
container作为 k8s 容器运行时,调用关系:kubelet --> cri plugin(在 containerd 进程中) --> containerd
命令区分
-
ctr 是 containerd 的一个客户端工具。
-
crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和用程序。
-
ctr -v 输出的是 containerd 的版本,
crictl -v
输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。
一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令。
常用命令
正常情况下,"crictl ps"能查到的容器 也可以通过"ctr -n k8s.io containers ls" 查到
修改配置
Docker
bash
systemctl status docker
vim /etc/docker/daemon.json
systemctl restart docker
Containerd
bash
systemctl status containerd
vim /etc/containerd/config.toml
systemctl restart containerd