k8s_如何配置 containerd 使用镜像加速拉取docker.io上的镜像

发布于:2024-06-27 ⋅ 阅读:(292) ⋅ 点赞:(0)

在 Kubernetes 使用 containerd 作为容器运行时,可以通过配置 containerd 来使用镜像网站(镜像仓库)拉取镜像。这可以通过修改 containerd 的配置文件来实现。以下是详细步骤:

步骤 1:安装 containerd (如果已安装,这一步略过)

如果尚未安装 containerd,可以使用以下命令安装(以 CentOS 为例):

sudo yum update -y
sudo yum install -y containerd

步骤 2:配置 containerd

  1. 创建 containerd 配置文件(如果还没有):

    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
    
  2. 编辑配置文件

    打开 /etc/containerd/config.toml 文件:

    sudo nano /etc/containerd/config.toml
    
  3. 配置镜像加速

    找到 [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 = [“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 工具验证镜像是否从配置的镜像仓库拉取。

  1. 安装 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
    
  2. 配置 crictl

    创建或编辑配置文件 /etc/crictl.yaml

    runtime-endpoint: unix:///run/containerd/containerd.sock
    
  3. 使用 crictl 拉取镜像并验证

    crictl pull nginx
    crictl images
    

示例配置步骤

以下是一个完整的示例,假设使用阿里云的镜像加速:

  1. 安装 containerd

    sudo yum update -y
    sudo yum install -y containerd
    
  2. 生成默认配置文件

    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
    
  3. 编辑配置文件

    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"]
    
  4. 重启 containerd 服务

    sudo systemctl restart containerd
    
  5. 安装并配置 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
    
    sudo bash -c 'echo "runtime-endpoint: unix:///run/containerd/containerd.sock" > /etc/crictl.yaml'
    
  6. 使用 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做了镜像加速。


网站公告

今日签到

点亮在社区的每一天
去签到