在 Kubernetes 使用 containerd 作为容器运行时,可以通过配置 containerd 来使用镜像网站(镜像仓库)拉取镜像。这可以通过修改 containerd 的配置文件来实现。以下是详细步骤:
步骤 1:安装 containerd (如果已安装,这一步略过)
如果尚未安装 containerd,可以使用以下命令安装(以 CentOS 为例):
sudo yum update -y
sudo yum install -y containerd
步骤 2:配置 containerd
-
创建 containerd 配置文件(如果还没有):
sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml
-
编辑配置文件:
打开
/etc/containerd/config.toml
文件:sudo nano /etc/containerd/config.toml
-
配置镜像加速:
找到
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
部分,并添加你的镜像网站地址。例如,使用docker.io
镜像仓库:[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://your-mirror-url"]
示例配置,使用阿里云镜像加速:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://registry.aliyuncs.com"]
如果这个生效,可以换成别的镜像网站,比如:
endpoint = [“https://l51yxa8e.mirror.aliyuncs.com”]以下是一个包含多种镜像加速配置的示例
config.toml
文件:[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://registry.aliyuncs.com", "https://mirrors.cloud.tencent.com", "https://reg-mirror.qiniu.com"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]endpoint = ["https://gcr.mirrors.aliyuncs.com"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]endpoint = ["https://quay.mirrors.aliyuncs.com"]
步骤 3:重启 containerd 服务
为了使配置生效,需要重启 containerd 服务:
systemctl daemon-reload
systemctl restart containerd
systemctl status containerd
步骤 4:验证配置
可以通过 crictl
工具验证镜像是否从配置的镜像仓库拉取。
-
安装
crictl
:VERSION="v1.24.0" # 使用最新版本或根据需要选择特定版本 wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
-
配置
crictl
:创建或编辑配置文件
/etc/crictl.yaml
:runtime-endpoint: unix:///run/containerd/containerd.sock
-
使用
crictl
拉取镜像并验证:crictl pull nginx crictl images
示例配置步骤
以下是一个完整的示例,假设使用阿里云的镜像加速:
-
安装 containerd:
sudo yum update -y sudo yum install -y containerd
-
生成默认配置文件:
sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml
-
编辑配置文件:
sudo nano /etc/containerd/config.toml
添加阿里云镜像加速配置:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://registry.aliyuncs.com"]
-
重启 containerd 服务:
sudo systemctl restart containerd
-
安装并配置
crictl
:VERSION="v1.24.0" wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/binsudo bash -c 'echo "runtime-endpoint: unix:///run/containerd/containerd.sock" > /etc/crictl.yaml'
-
使用
crictl
验证:sudo crictl pull nginx sudo crictl images
通过这些步骤,你可以配置 containerd 使用指定的镜像网站来拉取镜像,并在 Kubernetes 集群中使用这些镜像。
但是,虽然 crictl pull nginx可以成功从docker.io拉取镜像,但安装calico的时候貌似还是报错:
Failed to pull image "docker.io/calico/kube-controllers:v3.25.0": rpc error: code = DeadlineExceeded desc = failed to pull and unpack image "docker.io/calico/kube-controllers:v3.25.0": failed to copy: httpReadSeeker: failed open: failed to do request: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/5e/5e785d005ccc1ab22527a783835cf2741f6f5f385a8956144c661f8c23ae9d78/data?verify=1719483856-0VGptNFSuWdcvFKfC1P%!F(MISSING)QVFLXJo%!D(MISSING)": dial tcp 108.160.167.174:443: i/o timeout
看上去是在下载过程中还访问了docker.com,因为访问不了导致超时,上述配置仅仅是对docker.io做了镜像加速。
注意
如果k8s有多个节点,每个节点,包括master ,node等,都需要这么配置一下。
否则会出现问题。