更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io

前言

Kubernetes 在 Changelog 中宣布自 ????Kubernetes 1.20 之后将弃用 Docker 作为容器运行时之后,containerd 成为下一个容器运行时的热门选项。虽然 containerd 很早就已经是 Docker 的一部分,但是纯粹使用 containerd 还是给大家带来了诸多困扰,本文将介绍如何使用 containerd 配置镜像仓库和加速器。

本文将以 K3s 为例对 containerd 进行配置,如果您的环境未使用 K3s 而是使用的 Kubernetes,你也可以参考本文来配置 containerd 的镜像仓库,因为 containerd 的配置是通用的。

关于 K3s 和 containerd

K3s 是一个轻量级 Kubernetes 发行版,二进制大小小于 100MB,所需内存不到 Kubernetes 的一半。K3s 为了降低资源消耗,将默认的 runtime 修改为 containerd,同时也内置了 Kubernetes CLI 工具 crictl 和 ctr。

K3s 默认的 containerd 配置文件目录为 /var/lib/rancher/k3s/agent/etc/containerd/config.toml,但直接操作 containerd 的配置文件去设置镜像仓库或加速器相比于操作 docker 要复杂许多。K3s 为了简化配置 containerd 镜像仓库的复杂度,K3s 会在启动时检查/etc/rancher/k3s/中是否存在 registries.yaml 文件,如果存在该文件,就会根据 registries.yaml 的内容转换为 containerd 的配置并存储到 /var/lib/rancher/k3s/agent/etc/containerd/config.toml,从而降低了配置 containerd 镜像仓库的复杂度。

使用 K3s 配置私有镜像仓库

K3s 镜像仓库配置文件由两大部分组成:mirrors 和 configs:

  • Mirrors 是一个用于定义专用镜像仓库的名称和 endpoint 的指令

  • Configs 部分定义了每个 mirror 的 TLS 和证书配置。对于每个 mirror,你可以定义 auth 和/或 tls

containerd 使用了类似 K8S 中 svc 与 endpoint 的概念,svc 可以理解为访问名称,这个名称会解析到对应的 endpoint 上。也可以理解 mirror 配置就是一个反向代理,它把客户端的请求代理到 endpoint 配置的后端镜像仓库。mirror 名称可以随意填写,但是必须符合 IP 或域名的定义规则。并且可以配置多个 endpoint,默认解析到第一个 endpoint,如果第一个 endpoint 没有返回数据,则自动切换到第二个 endpoint,以此类推。

比如以下配置示例:

mirrors:"172.31.6.200:5000":endpoint:- "http://172.31.6.200:5000""rancher.ksd.top:5000":endpoint:- "http://172.31.6.200:5000""docker.io":endpoint:- "https://fogjl973.mirror.aliyuncs.com"- "https://registry-1.docker.io"

可以通过 crictl pull 172.31.6.200:5000/library/alpinecrictl pull rancher.ksd.top:5000/library/alpine 获取到镜像,但镜像都是从同一个仓库获取到的。

root@rancher-server:/etc/rancher/k3s# systemctl restart k3s.service
root@rancher-server:/etc/rancher/k3s# crictl pull 172.31.6.200:5000/library/alpine
Image is up to date for sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e
root@rancher-server:/etc/rancher/k3s# crictl pull rancher.ksd.top:5000/library/alpine
Image is up to date for sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e
root@rancher-server:/etc/rancher/k3s#

非安全(http)私有仓库配置

配置非安全(http)私有仓库,只需要在 endpoint 中指定 http 协议头的地址即可。

在没有 TLS 通信的情况下,需要为 endpoints 指定 http://,否则将默认为 https。

无认证

如果你使用的是非安全(http)私有仓库,那么可以通过下面的参数来配置 K3s 连接私有仓库:

$ cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:"172.31.6.200:5000":endpoint:- "http://172.31.6.200:5000"
EOF
$ systemctl restart k3s

然后可以通过 crictl 去 pull 镜像:

root@ip-172-31-13-117:~# crictl pull 172.31.6.200:5000/my-ubuntu
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee

接下来,在看一下 containerd 的配置,可以看到文件末尾追加了如下配置:

root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors][plugins.cri.registry.mirrors."172.31.6.200:5000"]endpoint = ["http://172.31.6.200:5000"][plugins.cri.registry.mirrors."rancher.ksd.top:5000"]endpoint = ["http://172.31.6.200:5000"]

有认证

如果你的非安全(http)私有仓库带有认证,那么可以通过下面的参数来配置 k3s 连接私有仓库:

$ cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:"35.182.134.80":endpoint:- "http://35.182.134.80"
configs:"35.182.134.80":auth:username: admin # this is the registry usernamepassword: Harbor12345 # this is the registry password
EOF
$ systemctl restart k3s

通过 crictl 去 pull 镜像:

root@ip-172-31-13-117:~# crictl pull 35.182.134.80/ksd/ubuntu:16.04
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee

Containerd 配置文件末尾追加了如下配置:

root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors][plugins.cri.registry.mirrors."35.182.134.80"]endpoint = ["http://35.182.134.80"][plugins.cri.registry.configs."35.182.134.80".auth]username = "admin"password = "Harbor12345"

安全(https)私有仓库配置

以下示例均启用了认证,所以每个示例都配置了 configs.auth,如果实际环境未配置认证,删除 configs.auth 配置即可。

使用授信 ssl 证书

与非安全(http)私有仓库配置类似,只需要配置 endpoint 对应的仓库地址为 https 即可。

root@ip-172-31-13-117:~# cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:"harbor.kingsd.top":endpoint:- "https://harbor.kingsd.top"
configs:"harbor.kingsd.top":auth:username: admin # this is the registry usernamepassword: Harbor12345 # this is the registry password
EOF
root@ip-172-31-13-117:~# systemctl restart k3s

通过 crictl 去 pull 镜像:


root@ip-172-31-13-117:~# crictl pull harbor.kingsd.top/ksd/ubuntu:16.04
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee

Containerd 配置文件末尾追加了如下配置:

root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors][plugins.cri.registry.mirrors."harbor.kingsd.top"]endpoint = ["https://harbor.kingsd.top"][plugins.cri.registry.configs."harbor.kingsd.top".auth]username = "admin"password = "Harbor12345"

使用自签 ssl 证书

如果后端仓库使用的是自签名的 ssl 证书,那么需要配置 CA 证书 用于 ssl 证书的校验。

root@ip-172-31-13-117:~# cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:"harbor-ksd.kingsd.top":endpoint:- "https://harbor-ksd.kingsd.top"
configs:"harbor-ksd.kingsd.top":auth:username: admin # this is the registry usernamepassword: Harbor12345 # this is the registry passwordtls:ca_file: /opt/certs/ca.crt
EOF
root@ip-172-31-13-117:~# systemctl restart k3s

通过 crictl 去 pull 镜像:

root@ip-172-31-13-117:~# crictl pull harbor-ksd.kingsd.top/ksd/ubuntu:16.04
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee

Containerd 配置文件末尾追加了如下配置:

root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors][plugins.cri.registry.mirrors."harbor-ksd.kingsd.top"]endpoint = ["https://harbor-ksd.kingsd.top"][plugins.cri.registry.configs."harbor-ksd.kingsd.top".auth]username = "admin"password = "Harbor12345"[plugins.cri.registry.configs."harbor-ksd.kingsd.top".tls]ca_file = "/opt/certs/ca.crt"

ssl 双向认证

如果镜像仓库配置了双向认证,那么需要为 containerd 配置 ssl 证书用于 镜像仓库对 containerd 做认证。

root@ip-172-31-13-117:~# cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:"harbor-ksd.kingsd.top":endpoint:- "https://harbor-ksd.kingsd.top"
configs:"harbor-ksd.kingsd.top":auth:username: admin # this is the registry usernamepassword: Harbor12345 # this is the registry passwordtls:ca_file: /opt/certs/ca.crt # path to the ca file used in the registrycert_file: /opt/certs/harbor-ksd.kingsd.top.cert # path to the cert file used in the registrykey_file: /opt/certs/harbor-ksd.kingsd.top.key # path to the key file used in the registry
EOF
root@ip-172-31-13-117:~# systemctl restart k3s

通过 crictl 去 pull 镜像:

root@ip-172-31-13-117:~# crictl pull harbor-ksd.kingsd.top/ksd/ubuntu:16.04
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee

Containerd 配置文件末尾追加了如下配置:

root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors][plugins.cri.registry.mirrors."harbor-ksd.kingsd.top"]endpoint = ["https://harbor-ksd.kingsd.top"][plugins.cri.registry.configs."harbor-ksd.kingsd.top".auth]username = "admin"password = "Harbor12345"[plugins.cri.registry.configs."harbor-ksd.kingsd.top".tls]ca_file = "/opt/certs/ca.crt"cert_file = "/opt/certs/harbor-ksd.kingsd.top.cert"key_file = "/opt/certs/harbor-ksd.kingsd.top.key"

加速器配置

Containerd 与 docker 都有默认仓库,均为 docker.io 。如果配置中未指定 mirror 为 docker.io,containerd 后会自动加载 docker.io 配置。与 docker 不同的是,containerd 可以修改 docker.io 对应的 endpoint(默认为 https://registry-1.docker.io),而 docker 无法修改。

Docker 中可以通过 registry-mirrors 设置镜像加速地址。如果 pull 的镜像不带仓库地址(项目名+镜像名:tag),则会从默认镜像仓库去拉取镜像。如果配置了镜像加速地址,会先访问镜像加速仓库,如果没有返回数据,再访问默认的镜像仓库。

Containerd 目前没有直接配置镜像加速的功能,但 containerd 中可以修改 docker.io 对应的 endpoint,所以可以通过修改 endpoint 来实现镜像加速下载。因为 endpoint 是轮询访问,所以可以给 docker.io 配置多个仓库地址来实现 加速地址+默认仓库地址。如下配置示例:

$ cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:"docker.io":endpoint:- "https://fogjl973.mirror.aliyuncs.com"- "https://registry-1.docker.io"
EOF$ systemctl restart k3s

Containerd 配置文件末尾追加了如下配置:

root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors][plugins.cri.registry.mirrors."docker.io"]endpoint = ["https://fogjl973.mirror.aliyuncs.com", "https://registry-1.docker.io"]

完整配置示例

mirrors:"192.168.50.119":endpoint:- "http://192.168.50.119""docker.io":endpoint:- "https://fogjl973.mirror.aliyuncs.com"- "https://registry-1.docker.io"
configs:"192.168.50.119":auth:username: '' # this is the registry usernamepassword: '' # this is the registry passwordtls:cert_file: '' # path to the cert file used in the registrykey_file: '' # path to the key file used in the registryca_file: '' # path to the ca file used in the registry"docker.io":auth:username: '' # this is the registry usernamepassword: '' # this is the registry passwordtls:cert_file: '' # path to the cert file used in the registrykey_file: '' # path to the key file used in the registryca_file: '' # path to the ca file used in the registry

参考

  • K3s 私有镜像仓库配置[1]

  • Containerd 配置镜像仓库[2]

参考资料

[1]

K3s 私有镜像仓库配置: https://docs.rancher.cn/docs/k3s/installation/private-registry/_index

[2]

Containerd 配置镜像仓库: https://github.com/containerd/cri/blob/master/docs/registry.md

你可能还喜欢

点击下方图片即可阅读

容器网络一直在颤抖,罪魁祸首竟然是 ipvs 定时器

云原生是一种信仰 ????

码关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

点击 "阅读原文" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️

配置 containerd 镜像仓库完全攻略相关推荐

  1. containerd 配置镜像仓库完全攻略

    一.前言 Kubernetes 在 Changelog 中宣布自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时之后,containerd 成为下一个容器运行时的热门选项.虽 ...

  2. 配置Maven镜像仓库,国内Maven镜像仓库,Maven中央仓库,国内Maven仓库大全的配置笔记记录

    前言 在以前博主每次遇到环境变更时,博主就要大费周折的去整理以下Maven项目的 settings.xml 配置文件,什么镜像地址啦,仓库地址啦等等,很是浪费时间,在这儿记录哈,以便下次直接复制粘贴即 ...

  3. android彩蛋黑章鱼,DNF彩蛋使命任务玩法攻略_DNF从零开始的镜像阿拉德高攻略_3DM网游...

    当镜像阿拉德所有事件的线索都汇聚到了天帷巨兽的背上时,冒险家在执行这些使命任务的时候已经很难像之前一样保持愉快的心情了--原因无他, 发生在时空裂缝另一头世界里的故事实在是有些离奇了,或者说它们更像一 ...

  4. docker镜像指定安装源_配置docker镜像仓库源

    docker安装完成后,默认配置为官方镜像仓库. 但,默认官方网站下载镜像缓慢,可以切换到官方国内镜像源: 参考自https://www.docker-cn.com/registry-mirror 通 ...

  5. Kubernetes 配置私有镜像仓库时,没有权限访问的问题

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  6. 配置docker镜像仓库

    修改 /etc/docker/daemon.json vim /etc/docker/daemon.json 在文件中加入 {"registry-mirrors": [" ...

  7. Maven配置阿里镜像仓库

    场景 原Maven仓库地址: https://repo1.maven.org/maven2/ 国内阿里镜像 http://maven.aliyun.com/nexus/content/groups/p ...

  8. Manjaro安装、配置、调试超详细攻略

    manjaro是一款非常流行的linux个人桌面版操作系统,它是一款基于arch linux二次开发的系统,manjaro官网上面有3款官方发布的桌面版本,分别是xfce.kde.gnome.xfce ...

  9. 电脑mod_(电脑游戏) 层层恐惧2、冒险游戏——电脑配置要求单机游戏MOD攻略修改器下载...

    点击上方蓝字 关注我们 1.游戏简介 游戏名称:层层恐惧2 游戏类型:冒险游戏 开发发行:Bloober Team 游戏平台:PC 整理时间:2020-07-19 官方网址:https://layer ...

最新文章

  1. 使用cmake组建跨平台项目
  2. 【转】第一类Stirling数和第二类Stirling
  3. java统计多个线程的请求次数_Web并发页面访问量统计实现
  4. java基础(一):谈谈java内存管理与垃圾回收机制
  5. rust核电分解机在哪里_腐蚀RUST个工厂地点位置介绍 腐蚀如何找到相应的工厂
  6. linux中ssh启动报错,Linux(Ubuntu18)中启动ssh时的报错
  7. DreamFacotry 第4章 如何保护REST API
  8. while循环random结合_Python程序控制结构 | 循环结构
  9. 4.性能之巅 洞悉系统、企业与云计算 --- 观测工具
  10. css3弹性盒模型flex快速入门与上手(align-content与align-items)
  11. 票据纸张尺寸对照表_粉丝要求,这期整理一版平面设计必备各种尺寸知识(收藏版))...
  12. 对Python 网络设备巡检脚本的实例讲解
  13. android recyclerView上item的EditextView焦点乱跑和数据混乱
  14. 如何分辨HDD/SSD硬盘接口?
  15. 【ResNet】Deep Residual Learning for Image Recognition
  16. viewpro.php是啥意思,海信 Hi-View Pro系列 画质引擎芯片简介
  17. python 字典循环赋值,Python字典循环添加一键多值的用法实例
  18. 银行术语之“表内”“表外”
  19. 机房建设及装修工程技术
  20. 文盘Rust -- 领域交互模式如何实现

热门文章

  1. 电商商品详情 API(商品主图、sku)
  2. 电子工程师必会的18大技能
  3. cfa考试用计算机,CFA考试计算器的三种高频用法!
  4. vue+electron 跨平台桌面应用开发实战教程
  5. 何谓光电传感器-看看基恩士如何说
  6. 实验四 对等网的组建
  7. Vue项目——Vue开发掘金WebApp(仿掘金App)
  8. 宝塔面板子目录伪静态设置
  9. 冒险岛私人服务器详细架设教程
  10. gis利器之Gdal(一)