容器与镜像
在 K8s 中不直接操作容器与镜像.
作者认为只需掌握几个命令能查看与调试错误即可.
容器运行时接口 (CRI)
猜测是
Container Runtime Interface.
Kubelet 运行在每一个节点 (Node) 上, 用于维护和管理 Pod 与容器的状态.
- 容器运行时接口 (
CRI) 是kubelet与 容器运行时之间通信的主要协议. - 它将
Kubernetes与容器运行时解耦.
逻辑上只要实现了 CRI 的容器引擎, 都可以作为 Kubernetes 的容器运行时.
Docker没有CRI接口.Kubernetes使用dockershim来兼容docker.从
K8s1.24 开始,Dockershim已被移除.
crictl 是一个兼容 CRI 的运行时容器命令. 其用法与 docker 大部分一样. 可用来检查调试底层容器.

但是 crictl 命令比 docker 少, 例如, 它就无法导入导出镜像. 在某些网络不好的环境下需要手动导入导出竟像时, 可以使用 ctr 命令.

这个命令自己介绍中就提到了不再被支持, 因此只需要知道怎么导入导出镜像即可.
将 Docker 中的镜像导入到 containerd 中
操作步骤:
- 在
Docker中拉取一个镜像 - 然后将其导出成一个
tar包 - 然后将这个包上传至
k8s-master服务 - 进入
k8s-master服务器, 使用ctr命令导入tar包.- 注意指定平台
--platform linux/amd64 K8s中所有镜像都在k8s.io命名空间下
- 注意指定平台
- 然后可以查看节点上的镜像
# 本地拉取镜像
docker pull alpine:3.15
docker save alpine:3.15 > alpine-3.15.tar
# 将镜像上传至服务器
scp ./alpine-3.15.tar root@192.168.56.109:/root
# 登录 k8s-master 导入镜像
ctr -n k8s.io images import alpine-3.15.tar --platform linux/amd64
crictl images

从 containerd 中导出镜像
操作步骤:
- 使用
ctr的images export子命令导出镜像- 注意指定命名空间
- 以及平台
- 导入到其他节点 (
scp命令).- 在某些镜像无法获取时可以使用这个方式来导入导出镜像
- 注意每一个节点都需要导入
ctr -n k8s.io images export \
alpine.tar \
docker.io/library/alpine:3.15 \
--platform linux/amd64