您现在的位置是:首页 >技术教程 >K8S Containerd导入Docker image镜像网站首页技术教程
K8S Containerd导入Docker image镜像
简介k8s导入镜像命令
Kubernetes在v1.20 版本宣布弃用 Dockershim
(在v1.24正式移除),改用CRI接口去操作更为基础的containerd或CRI-O。
K8S在创建容器时,或多或少有些镜像无法正常拉取(网络等原因)。
还在使用Docker Engine
时我们能方便的pull第三方同步的镜像,然后tag成需要的标签版本,让K8S从本地获取到想要的镜像。
因Docker
将其容器格式和运行时runC捐赠给OCI
(开放容器标准),OCI标准化了容器工具和底层实现之间的大量接口。
因此改用containerd
或CRI-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
至此K8S已能在本地找到相应镜像(记得确认imagePullPolicy
已设置为IfNotPresent
或Never
)
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。