配置 Containerd 镜像加速域名,提高镜像拉取速度
说明
-
不推荐在 k8s 网络配置前加速,可能会导致无法拉取镜像(原因可能是镜像的原因,或者是配置的原因,可以考虑事先或报错时手动拉取镜像)
-
开始使用 Containerd
-
Containerd 配置 Docker 加速镜像
-
crictl 用户指南
-
Containerd hosts 配置
-
在
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]中配置域名,仅支持crictl
命令 -
在
[plugins."io.containerd.grpc.v1.cri".registry]中配置config_path,同时支持ctr、crictl
命令- 在
[plugins."io.containerd.grpc.v1.cri".registry]中配置config_path时,需要 文件夹、文件 必须存在,否则命令无法运行 - 在
[plugins."io.containerd.grpc.v1.cri".registry]中配置config_path、
在[plugins."io.containerd.grpc.v1.cri".registry.mirrors]中配置域名对于 crictl 是等效的
- 在
配置 crictl
-
编辑
/etc/containerd/config.toml文件vim /etc/containerd/config.toml在
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]后面添加镜像,注意前面的缩进(空格),配置 docker.io 的示例如果
/etc/containerd/config.toml配置很少,可能需要使用命令containerd config default
生成默认配置,替换原始的/etc/containerd/config.toml文件(慎重操作,注意备份历史配置文件)[plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] # 根据需要,可填写多个,如:["https://hnkfbj7x.mirror.aliyuncs.com", "https://registry-1.docker.io"] endpoint = ["https://hnkfbj7x.mirror.aliyuncs.com"] -
重启服务
systemctl restart containerd -
检查
crictl配置查看是否配置 crictl
cat /etc/crictl.yaml如果没有配置,则执行命令进行配置
# 开启 crictl 配置 # 安装完 k8s 后,才有 crictl 命令 # 参考: # GitHub:https://github.com/containerd/containerd/blob/main/docs/cri/crictl.md # 生成配置文件 cat <<EOF > /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: true EOF # 查看生成的配置文件 cat /etc/crictl.yaml查看配置是否生效
crictl info -
使用
crictl测试# 拉取镜像测试 crictl pull docker.io/library/maven:3.6.3-openjdk-17 # 查看拉取的结果 crictl image
配置 ctr、crictl
-
以加速 docker.io 为例
-
创建文件夹
mkdir -p /etc/containerd/certs.d/docker.io -
创建配置文件
cat <<EOF > /etc/containerd/certs.d/docker.io/hosts.toml server = "https://docker.io" [host."https://hnkfbj7x.mirror.aliyuncs.com"] capabilities = ["pull", "resolve"] # 跳过证书验证 skip_verify = true EOF # 查看生成的配置文件 cat /etc/crictl.yaml -
使用
ctr测试# 拉取镜像 ctr --debug i pull --hosts-dir "/etc/containerd/certs.d" docker.io/library/maven:3.6.3-jdk-8 # 查看镜像 # ctr i list -
编辑
/etc/containerd/config.toml文件,使crictl命令也能生效vim /etc/containerd/config.toml修改
[plugins."io.containerd.grpc.v1.cri".registry]的config_path[plugins."io.containerd.grpc.v1.cri".registry] # 配置 config_path 时,需要 文件夹、文件 必须存在,否则命令无法运行 # plugins."io.containerd.grpc.v1.cri".registry 中的 config_path 与 plugins."io.containerd.grpc.v1.cri".registry.mirrors 对于 crictl 是等效的 config_path = "/etc/containerd/certs.d" -
重启服务
systemctl restart containerd -
检查
crictl配置查看是否配置 crictl
cat /etc/crictl.yaml如果没有配置,则执行命令进行配置
# 开启 crictl 配置 # 安装完 k8s 后,才有 crictl 命令 # 参考: # GitHub:https://github.com/containerd/containerd/blob/main/docs/cri/crictl.md # 生成配置文件 cat <<EOF > /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: true EOF # 查看生成的配置文件 cat /etc/crictl.yaml查看配置是否生效
crictl info -
使用
crictl测试# 拉取镜像测试 crictl pull docker.io/library/nginx:1.25.1 # 查看拉取的结果 crictl image