容器与镜像
在 K8s
中不直接操作容器与镜像.
作者认为只需掌握几个命令能查看与调试错误即可.
容器运行时接口 (CRI
)
猜测是
Container Runtime Interface
.
Kubelet
运行在每一个节点 (Node
) 上, 用于维护和管理 Pod
与容器的状态.
- 容器运行时接口 (
CRI
) 是kubelet
与 容器运行时之间通信的主要协议. - 它将
Kubernetes
与容器运行时解耦.
逻辑上只要实现了 CRI
的容器引擎, 都可以作为 Kubernetes
的容器运行时.
Docker
没有CRI
接口.Kubernetes
使用dockershim
来兼容docker
.从
K8s
1.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