Kubernetes 使用私有镜像库配置 crictl 镜像源

该文章已生成可运行项目,

目录

前言

实验环境

正确配置 crictl 使用私有镜像库

步骤1:配置 containerd 镜像源

步骤2:添加 TLS 证书配置

步骤3:验证 crictl 拉取镜像

步骤4:如果镜像不存在

总结


前言

在 Kubernetes 中使用 crictl 拉取镜像时,默认使用存在于公共镜像库(如 Docker Hub 或 Google Container Registry)的镜像。如果想使用私有镜像库,可通过配置 containerdcrictl 来实现。本文举例证明如何将镜像源配置为私有镜像库。

实验环境

运行下列环境设置:

  • Kubernetes 版本: 1.24+
  • Container Runtime: containerd
  • 私有镜像库地址: https://172.16.20.20

根据您说明,您将私有镜像库设为 172.16.20.20 ,并在 containerd 配置中实现自动切换。

正确配置 crictl 使用私有镜像库

步骤1:配置 containerd 镜像源

在 Kubernetes 中,默认是通过 containerd 进行镜像拉取。您需要修改 containerd 配置文件:

  1. 打开 /etc/containerd/config.toml

    sudo nano /etc/containerd/config.toml
    
  2. 找到 [plugins."io.containerd.grpc.v1.cri".registry.mirrors],添加私有镜像库配置:

    [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
        endpoint = ["https://172.16.20.20"]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
        endpoint = ["https://172.16.20.20"]
    
    
    
    完整的路径应该是下面这样的 , 但是有时遇到  /etc/containerd/config.toml 文件内容很少的情况, 按如下方式写却又不生效
    
    
    [plugins]
       [plugins."io.containerd.grpc.v1.cri"]
          [plugins."io.containerd.grpc.v1.cri".registry]
             [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
                [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
                   endpoint = ["https://docker.1ms.run"]
                [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
                   endpoint = ["https://docker.1ms.run"]
    
    
    
    如果未生效, 使用命令 containerd config dump 查看是否修改成功, 如果没有, 则说明文件位置不正确
    
    通过如下命令覆盖配置文件, 从系统默认值中获取配置 sudo containerd config default > /etc/containerd/config.toml, 然后出来的配置文件就比较全了 然后找到  [plugins."io.containerd.grpc.v1.cri".registry.mirrors] , 在下面添加新的mirrors
    
    
    
    然后 重启 sudo systemctl restart containerd
    检查是否生效 sudo containerd config dump 发现生效了
    
    
    然后测试 crictl pull nginx:latest , 可以正常获取了
    
    
    
    
  3. 重启 containerd :

    sudo systemctl restart containerd
    

步骤2:添加 TLS 证书配置

如果私有镜像库使用的是非证书的 HTTP,需要配置允许不安全连接:

  1. 修改 /etc/containerd/config.toml,在相应镜像源配置中添加 TLS 选项:

    [plugins."io.containerd.grpc.v1.cri".registry.configs."172.16.20.20".tls]
      insecure_skip_verify = true
    
  2. 重启 containerd :

    sudo systemctl restart containerd
    

步骤3:验证 crictl 拉取镜像

在修改完成 containerd 配置后,通过 crictl 检查镜像源是否配置正确。

  1. 下载指定镜像:

    crictl pull nginx:latest
    
  2. 检查镜像是否已成功下载:

    crictl images
    

如果拉取成功,返回中的镜像应该包含前缀 172.16.20.20

IMAGE                                      TAG     IMAGE ID            SIZE
172.16.20.20/library/nginx                 latest  <IMAGE_ID>          <SIZE>

如果拉取失败,检查私有镜像库是否存在相应镜像,参考下文添加手动上传部分。

步骤4:如果镜像不存在

报错信息

root@master:/etc/containerd# crictl pull nginx:latest

E1231 17:27:29.937259    5597 remote_image.go:180] "PullImage from image service failed" err="rpc error: code = NotFound desc = failed to pull and unpack image \"docker.io/library/nginx:latest\": failed to resolve reference \"docker.io/library/nginx:latest\": docker.io/library/nginx:latest: not found" image="nginx:latest"
FATA[0000] pulling image: rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/library/nginx:latest": failed to resolve reference "docker.io/library/nginx:latest": docker.io/library/nginx:latest: not found 

如果私有镜像库中不存在 nginx:latest,需要将镜像上传到私有镜像库:

  1. 拉取镜像

    docker pull nginx:latest
    
  2. 重命名为私有镜像库的路径

    docker tag nginx:latest 172.16.20.20/library/nginx:latest
    
  3. 提交到私有镜像库

    docker push 172.16.20.20/library/nginx:latest
    
  4. 重新通过 crictl pull 拉取:

    crictl pull nginx:latest
    

总结

通过修改 containerd 配置,可以完成 Kubernetes 环境下 crictl 的私有镜像库配置。如果镜像不存在,可以通过手动提交或配置镜像代理来解决。将上进的步骤举行完成,即可使 Kubernetes 在私有环境下正常拉取镜像。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值