节点安装 Containerd 容器运行时
本文介绍在节点上安装并配置 containerd 作为容器运行时的完整流程,覆盖 ubuntu / centos、amd64 / arm64 在线与离线安装,以及 nerdctl、buildkit、CNI 网络插件的安装与镜像加速、私有仓库配置。
说明:如果节点需要接入 GPU,请在装好 containerd 后参考 GPU 节点接入与初始化 追加 NVIDIA 运行时配置。
1. ubuntu 安装 containerd
1.1 卸载旧版本 containerd
sudo apt-get remove -y docker docker-engine docker.io containerd runc
sudo rm -rf /var/lib/docker /etc/docker/
sudo rm -rf /var/lib/containerd /etc/containerd/
1.2 ubuntu 安装 containerd
# 国内使用阿里源
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
# amd64机器
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# arm机器
sudo add-apt-repository "deb [arch=arm64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 更新源
sudo apt-get update
# 查看版本
apt-cache madison containerd
# 安装containerd
sudo apt-get install -y containerd.io
# sudo apt-get install containerd=<VERSION>
# 例如 apt-get install containerd=1.7.20-..
# 查看运行状态
systemctl start containerd
systemctl enable containerd
systemctl status containerd
2. centos 安装 containerd
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
# amd64安装containerd
# 使用阿里源,arm64 版本是比较老的版本
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update -y
yum -y install containerd.io # 安装 1.7.20 相近版本
systemctl start containerd
systemctl enable containerd
systemctl status containerd
3. arm64 和 amd64 离线下载安装
离线包包含 nerdctl、containerd、runc,但不包含 cni。建议使用 nerdctl full 包,参考:https://github.com/containerd/nerdctl/releases
arch=arm64
rm -rf nerdctl-full-1.7.7-linux-${arch}.tar.gz
wget https://githubfast.com/containerd/nerdctl/releases/download/v1.7.7/nerdctl-full-1.7.7-linux-${arch}.tar.gz
tar xf nerdctl-full-1.7.7-linux-${arch}.tar.gz -C /usr/local
cp /usr/local/lib/systemd/system/*.service /etc/systemd/system/
# 自启动 buildkit 和 containerd 服务
systemctl enable containerd buildkit
systemctl start containerd buildkit
# 查看状态
systemctl status buildkit containerd
4. 配置 containerd
# 生成默认配置,如果已经生成了配置文件,先删除再重新生成,因为之前自带的配置文件基本是空的
mkdir /etc/containerd
containerd config default | tee /etc/containerd/config.toml
vi /etc/containerd/config.toml
需要在 /etc/containerd/config.toml 中修改/添加如下配置:
1、修改 sandbox_image 的地址
# sandbox_image = "k8s.gcr.io/pause:3.8"
# 注释上面那行,添加下面这行,注意看一下后面的版本号
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8"
2、配置 containerd 使用 systemd 管理 cgroup
ubuntu / centos 需要配置 Containerd 直接使用 systemd 去管理 cgroup,而不是直接使用 cgroupfs:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
# 修改下面这行
SystemdCgroup = true
3、添加镜像源,拉取 dockerhub 镜像
[plugins."io.containerd.grpc.v1.cri".registry] # 此行下修改
config_path = "/etc/containerd/certs.d" # 改为此路径,并在每个路径下创建 hosts.toml 文件,存放镜像加速信息
创建 /etc/containerd/certs.d 下的 hosts 文件:
mkdir -p /etc/containerd/certs.d/docker.io
tee /etc/containerd/certs.d/docker.io/hosts.toml << 'EOF'
server = "https://docker.io"
[host."https://docker.1panel.live"]
capabilities = ["pull", "resolve"]
[host."https://hub.rat.dev/"]
capabilities = ["pull", "resolve"]
[host."https://docker.chenby.cn"]
capabilities = ["pull", "resolve"]
[host."https://docker.m.daocloud.io"]
capabilities = ["pull", "resolve"]
EOF
4、配置私有镜像仓库
只需给 config_path 添加对应的地址(注意与上一步保持一致,统一为 /etc/containerd/certs.d,源文件 install/kubernetes/rancher/install_containerd.md:123 此处误写为 cert.d,少了一个 s,两处不一致会导致镜像加速/私有仓库配置不生效):
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
# ip写成自己内网仓库的ip
mkdir -p /etc/containerd/certs.d/172.17.0.4:88
tee /etc/containerd/certs.d/172.17.0.4:88/hosts.toml << 'EOF'
server = "http://172.17.0.4:88"
[host."http://172.17.0.4:88"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
EOF
# 重启配置生效
systemctl daemon-reload
systemctl restart containerd
5. 安装 nerdctl
首先查看 containerd 与 nerdctl 的对应关系,下载对应的版本。查看下面地址的 “Compatible containerd versions” 部分,确认对应的 containerd 版本并获取下载地址:https://github.com/containerd/nerdctl/releases
比如这里查到适用的 nerdctl 版本是 version=1.7.6,那么 nerdctl 的下载地址如下:
version=1.7.6
# amd64版本
wget https://githubfast.com/containerd/nerdctl/releases/download/v${version}/nerdctl-${version}-linux-amd64.tar.gz
tar zxvf nerdctl-${version}-linux-amd64.tar.gz -C /usr/local/bin
# arm64版本
wget https://githubfast.com/containerd/nerdctl/releases/download/v${version}/nerdctl-${version}-linux-arm64.tar.gz
tar zxvf nerdctl-${version}-linux-arm64.tar.gz -C /usr/local/bin
也可以直接在页面上找到相应版本,复制链接下载。
配置 nerdctl:
mkdir -p /etc/nerdctl/
cat > /etc/nerdctl/nerdctl.toml << 'EOF'
namespace = "k8s.io"
insecure_registry = true
EOF
6. 安装构建器 buildkit
首先查看 containerd 与 buildkit 的对应关系,下载对应的版本。获取下载地址:https://github.com/moby/buildkit/releases
version=v0.15.1
# amd64版本
wget https://githubfast.com/moby/buildkit/releases/download/${version}/buildkit-${version}.linux-amd64.tar.gz
tar zxvf buildkit-${version}.linux-amd64.tar.gz -C /usr/local/
# arm64版本
wget https://githubfast.com/moby/buildkit/releases/download/${version}/buildkit-${version}.linux-arm64.tar.gz
tar zxvf buildkit-${version}.linux-arm64.tar.gz -C /usr/local/
编辑 /etc/systemd/system/buildkit.service,内容如下:
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true
[Install]
WantedBy=multi-user.target
# 启动
systemctl enable buildkit
7. 安装 CNI 网络插件
# 创建目录
mkdir -p /opt/cni/bin /etc/cni/net.d/
# 下载 CNI 插件 amd,可能网络问题下载失败,记得删除旧文件,重新下载几次
wget https://githubfast.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
# wget https://cube-studio.oss-cn-hangzhou.aliyuncs.com/install/containerd/cni-plugins-linux-amd64-v1.1.1.tgz
tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v1.1.1.tgz
# 下载 CNI 插件 arm
wget https://githubfast.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-arm64-v1.1.1.tgz
tar -C /opt/cni/bin -xzvf cni-plugins-linux-arm64-v1.1.1.tgz
修正 containerd 的配置 vi /etc/containerd/config.toml:
[plugins."io.containerd.grpc.v1.cri".cni]
# ConfDir is the directory to search CNI config files
conf_dir = "/etc/cni/net.d"
# BinDir is the directory to search CNI plugin binaries
bin_dir = "/opt/cni/bin"
# 重启配置生效
systemctl daemon-reload
systemctl restart containerd
8. 注意事项
1、如果镜像源没有生效,那在拉取 dockerhub 镜像的前面加上 docker.anyhub.us.kg/library/。
例如:
# 原本拉取
nerdctl pull nginx
# 本质拉取的是
nerdctl pull docker.io/library/nginx
# 替换为
nerdctl pull docker.anyhub.us.kg/library/nginx
说明:文中的 githubfast.com 镜像加速域名、各 dockerhub 加速地址、containerd/nerdctl/buildkit/cni 的具体版本号均为安装时的示例,可能随网络环境与上游发布变化,请以官方 releases 页面为准。