containerd安装.md

新版本的k8s使用containerd作为容器管理,不再使用docker。containerd的安装并不复杂,复杂的是如何配置镜像加速和本地镜像库。

安装containerd的过程不复杂:

1
2
3
4
5
6
7
8
9
# 安装containerd
sudo apt-get update
sudo apt-get install -y containerd

# 配置containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

接下来需要配置镜像加速,新版本的containerd将配置保存在config_path中,所以需要编辑/etc/containerd/config.toml文件,设置路径:

1
2
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"

还需要修改 sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.10”

[plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options]
SystemdCgroup = true

修改完成后,创建保存配置文件的目录:

1
sudo mkdir /etc/containerd/certs.d

然后为每个需要配置的镜像网站创建目录:

1
sudo mkdir /etc/containerd/certs.d/docker.io

在这个目录中创建hosts.toml

1
sudo vim /etc/containerd/certs.d/docker.io/hosts.toml

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
server = "https://docker.io"

[host."https://docker.1ms.run"]
capabilities = ["pull", "resolve"]
skip_verify = true

[host."https://docker.m.daocloud.io"]
capabilities = ["pull", "resolve"]
skip_verify = true

[host."https://dockerhub.anzu.vip"]
capabilities = ["pull", "resolve"]
skip_verify = true

如果已经设置了私有镜像库,可以在这里设置http支持,假如私有镜像库地址是192.168.31.57:5000,首先创建目录,然后编辑文件hosts.toml:
sudo mkdir /etc/containerd/certs.d/192.168.31.57:5000
sudo vim /etc/containerd/certs.d/192.168.31.57:5000/hosts.toml

1
2
3
4
server = "http://192.168.31.57:5000"

[host."http://192.168.31.57:5000"]
capabilities = ["pull", "resolve", "push"]

设置完成后,需要重新启动containerd:
sudo systemctl restart containerd

可以检查containerd的运行状态:

1
2
3
4
5
# 检查 containerd 服务状态
systemctl status containerd

# 检查 containerd 日志,寻找 CRI 相关的错误
journalctl -u containerd -f

可以使用 sudo containerd config dump 检查当前的配置,如果配置文件中有错误,没有生效,使用这种方式可以检查。

sudo ctr images pull docker.lan:5555/bmi_gateway:1.0.0 –hosts-dir=/etc/containerd/certs.d

sudo mkdir /etc/containerd/certs.d/docker.lan:5555

server = “http://docker.lan:5555

[host.”http://docker.lan:5555"]
capabilities = [“pull”, “resolve”, “push”]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  #!/bin/bash

# 1. 创建目标目录(使用-p选项避免目录已存在时的错误)
sudo mkdir -p /etc/containerd/certs.d/docker.lan

# 2. 在目录中创建hosts.toml并写入指定内容
# 使用tee命令配合sudo确保写入权限,Here Document(<<EOF)保持内容格式
sudo tee /etc/containerd/certs.d/docker.lan/hosts.toml <<EOF
server = "http://docker.lan"

[host."http://docker.lan"]
capabilities = ["pull", "resolve", "push"]
EOF

echo "操作完成:目录和文件已创建"