cri-containerd运行时使用私有镜像仓库
介绍
k8s缺省使用docker运行时,但是1.12.x开始支持使用containerd运行时,这样调用路径从原来的kubelet->dockershim->dockerd->containerd->runc-shim->runc 优化为kublet->cri->containerd->runc->shim->runc, 而且cri还是作为containerd的一个插件跑在一个进程空间,看起来是提高了性能,但是如果习惯于在节点用docker命令的话就不要切换了,或者只切换部分节点。
我就是只切换了一个节点作为实验,方法其实很简单,只是修改下kubelet的启动命令就好了,但是如果你是用的私有镜像仓库的话会碰到一些问题,这里我主要目的是记录下cri-containerd使用私有镜像仓库时碰到的问题。
从docker切换到containerd
修改kubelet的启动命令添加如下参数--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock
systemctl daemon-reload
systemctl restart kubelet
注意kubelet是通过/run/containerd/containerd.sock
和containerd通信的,安装有docker(新一点的版本)的节点都会有个daemon进程,如果是全新没有安装docker的节点,只要先创建配置文件,然后手动或者以服务方式启动containerd进程即可。
containterd config default > /etc/containerd/config.toml,
/usr/bin/conainerd
正常情况下如果你只是使用官方镜像库,pod就可以调度到这个使用containerd的节点了,但是如开头说的,如果是私有仓库,还有几个问题要解决
cri-containerd使用私有镜像仓库的注意事项
不支持使用plain-http的镜像仓库
现象是调度到该节点的pod都启动失败,kubectl describe pod/xxx
显示的出错信息server gave HTTP response to HTTPS client
, 我是用docker registry搭建的简易本地仓库,没有启用tls, 很明显cri-containerd是希望ssl加密传输的,不过containerd本身是支持走明文的&