您现在的位置是:首页 >技术教程 >K8S Containerd导入Docker image镜像网站首页技术教程

K8S Containerd导入Docker image镜像

陨·落 2024-05-31 00:00:02
简介k8s导入镜像命令

Kubernetes在v1.20 版本宣布弃用 Dockershim(在v1.24正式移除),改用CRI接口去操作更为基础的containerdCRI-O

K8S在创建容器时,或多或少有些镜像无法正常拉取(网络等原因)。
还在使用Docker Engine时我们能方便的pull第三方同步的镜像,然后tag成需要的标签版本,让K8S从本地获取到想要的镜像。
Docker将其容器格式和运行时runC捐赠给OCI开放容器标准),OCI标准化了容器工具和底层实现之间的大量接口。
因此改用containerdCRI-O万变不离其宗,他们都支持运行符合OCI标准的镜像。

理论存在,实践开始。我集群的容器运行时是containerd,以我想在K8S中安装prometheus为例,拉取不到需要的镜像prometheus-adapter。
一如既往,先从安装了docker的机器中拉image(可在docker hub或其他镜像源中搜索想要的镜像和版本),打tag,保存,传输

# 在 docker hub 上找到了第三方帮忙同步的 prometheus-adapter:v0.10.0
docker pull v5cn/prometheus-adapter:v0.10.0
# 为镜像打上k8s需要的 tag
docker tag  v5cn/prometheus-adapter:v0.10.0 registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.10.0
# 将镜像保存下来
docker save -o /data/prometheus-adapter.tar registry.k8s.io/prometheus-adapter/prometheus-adapter
# 复制给各k8s worker节点
scp /data/prometheus-adapter.tar #账号@机器:路径

然后连接各K8S worker node,进行镜像导入。注意要导入至K8S使用的containerd默认命名空间是 k8s.io 否则它会找不到镜像

# 导入,-n 参数为指定命名空间
ctr -n k8s.io image import prometheus-adapter.tar
# 确认下导入
ctr -n k8s.io image list | grep prometheus
# crictl是Kubernetes社区定义的CRI接口工具,在这边也确认下
crictl image | grep prometheus

Pod均已启动

至此K8S已能在本地找到相应镜像(记得确认imagePullPolicy已设置为IfNotPresentNever

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。