kubernetes从1.24开始,移除了Dockershim,需要在安装docker的基础上再安装cri-dockerd才能顺利运行Pod
kubernetes的容器运行时工具有以下几个
1、containerd
2、CRI-O
3、Docker Engine(使用 cri-dockerd)
容器运行时命令对比
从 Kubernetes 1.24 开始,官方强烈推荐使用 containerd 作为 Kubernetes 的容器运行时
原因包括:
更轻量级、性能更高
与 Kubernetes 原生集成良好,减少了中间层(如 Dockershim)
不过,如果你仍然想使用 Docker Engine,也可以通过安装 cri-dockerd 来继续使用 Docker 作为容器运行时
这里我们安装containerd
containerd简介:
1、Docker Engine里就包含了containerd,和原先包含在Docker Engine里containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容器运行时管理的所有需求
2、containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如Swarm, Kubernetes, Mesos等容器编排系统
3、containerd以Daemon的形式运行在系统上,通过暴露底层的gRPC API,上层系统可以通过这些API管理机器上的容器
4、每个containerd只负责一台机器,Pull镜像,对容器的操作(启动、停止等),网络,存储都是由containerd完成
5、具体运行容器由runC负责,实际上只要是符合OCI规范的容器都可以支持
6、对于容器编排服务来说,运行时只需要使用containerd+runC,更加轻量,容易管理
官方网站:https://containerd.io
操作系统:AnolisOS-8.8-x86_64
一、使用yum源安装containerd
#配置阿里云yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#查看yum源中containerd软件
yum list | grep containerd
#使用yum命令安装
#实际上安装了2个包containerd.io和container-selinux
yum -y install containerd.io
#使用rpm -qa命令查看是否安装
rpm -qa | grep containerd
containerd.io-1.6.32-3.1.el8.x86_64
#拷贝配置文件并编辑
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
disabled_plugins = [] #修改
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6" #修改
SystemdCgroup = true #修改
:wq! #保存退出
#设置containerd服务启动及开机自启动
systemctl daemon-reload
systemctl enable containerd
systemctl start containerd
systemctl restart containerd
#查看containerd服务启动状态
systemctl status containerd
#拉取pause镜像
ctr -n k8s.io images pull --platform=amd64 registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
#验证可用性
使用ctr命令查看containerd客户端及服务端相关信息
ctr version
#拉取镜像
#containerd 默认使用 k8s.io 命名空间来存储 Kubernetes 相关的镜像
ctr -n k8s.io images pull --platform=amd64 docker.rainbond.cc/nginx:latest
#查看默认命名空间的镜像
ctr -n k8s.io images ls
#检测镜像
ctr images check
#修改镜像标签
ctr -n k8s.io i tag docker.rainbond.cc/nginx:latest nginx:latest
二、使用二进制方式安装containerd
Containerd有两种安装包:
第一种是containerd-xxx,不包含runc,需要单独安装,runc 是 containerd 的默认容器运行时
第二种是cri-containerd-cni-xxxx,包含runc和k8s里的所需要的相关文件,k8s集群里需要用到此包
建议安装cri-containerd-cni-xxxx
wget https://github.com/containerd/containerd/releases/download/v1.7.23/cri-containerd-1.7.23-linux-amd64.tar.gz
解压到根目录
tar -C / -zxf cri-containerd-1.7.23-linux-amd64.tar.gz
#生成配置文件并修改
mkdir -p /etc/containerd #创建配置文件目录
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
disabled_plugins = [] #修改
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8" #修改
SystemdCgroup = true #修改
:wq! #保存退出
systemctl daemon-reload
systemctl enable containerd
systemctl start containerd
systemctl restart containerd
systemctl status containerd
#拉取pause镜像
ctr -n k8s.io images pull --platform=amd64 registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8
#查看版本信息
ctr version
安装runC
由于二进制包中的runC默认需要系统中安装seccomp支持,不同版本runC对seccomp版本要求不一样
建议单独下载runC 二进制包进行安装,里面包含了seccomp模块支持
wget https://github.com/opencontainers/runc/releases/download/v1.1.15/runc.amd64
mv runc.amd64 /usr/sbin/runc
chmod +x /usr/sbin/runc
runc -v #查看版本
三、安装containerd的命令行工具nerdctl
nerdctl是一个与docker cli风格兼容的containerd的cli工具
nerdctl 官方发布包含两个安装版本:
最小(nerdctl-1.7.7-linux-amd64.tar.gz):仅限 nerdctl
完整(nerdctl-full-1.7.7-linux-amd64.tar.gz):包括 containerd、runc 和 CNI 等依赖项
我们已经安装了 containerd ,所以选择nerdctl-1.7.7-linux-amd64.tar.gz
wget https://github.com/containerd/nerdctl/releases/download/v1.7.7/nerdctl-1.7.7-linux-amd64.tar.gz
tar -C /usr/local/bin -zxf nerdctl-1.7.7-linux-amd64.tar.gz
nerdctl version #查看版本
#配置nerdctl 命令自动补全
yum install bash-completion -y
nerdctl completion bash > /etc/bash_completion.d/nerdctl
source /etc/bash_completion.d/nerdctl
#添加nerdctl别名为 docker
vi /usr/local/bin/docker
#!/bin/bash
/usr/local/bin/nerdctl $@
:wq! #保存退出
chmod +x /usr/local/bin/docker
#测试
nerdctl image
docker image
至此,Linux下安装k8s容器运行时Containerd完成。