「开源摘星计划」containerd拉取harbor中的私有镜像,云原生进阶必备技能

键客李大白 键客李大白     2022-11-28     829

关键词:

「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能_Containerd

 【摘要】 配置 Containerd 拉取 harbor 私有仓库中的镜像,打工人必备技能!

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。

活动链接:​​https://github.com/weopenprojects/WeOpen-Star​


前言


在k8s的1.20版本发布之后,对外宣称在1.23.x不再使用doker shim作为默认的底层容器运行时,而是通过Container Runtime Interface(CRI)使用containerd来作为容器运行时, 因此原来在docker中配置的个人仓库环境不再起作用,导致k8s配置pods时拉取镜像失败, 本文将进行演示如何在 containerd 配置从Harbor私有仓库拉取镜像。


环境说明

 Containerd使用二进制安装的方式,安装步骤见:​​https://blog.51cto.com/lidabai/5408290​

 Harbor使用https证书认证的方式部署的,部署文档见:​​https://blog.51cto.com/lidabai/5173694​

修改containerd配置


配置Harbor私有镜像仓库地址

[root@lidabai ~]# vim /etc/containerd/config.toml
...
version = 2
...

[plugins]
[plugins."io.containerd.grpc.v1.cri"]
[plugins."io.containerd.grpc.v1.cri".cni]
...
########################################################配置以下部分:
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = ""

[plugins."io.containerd.grpc.v1.cri".registry.auths]

[plugins."io.containerd.grpc.v1.cri".registry.headers]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://kvuwuws2.mirror.aliyuncs.com","http://hub-mirror.c.163.com"]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.lidabai"] #名称
endpoint = ["https://192.168.2.22:443"] #Harbor的Url地址
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugin."io.containerd.grpc.v1.cri".registry.configs."harbor.lidabai".tls] #tle,harbor 证书认证配置
insecure_skip_verify = true #是否跳过证书认证
ca_file = "/etc/containerd/harbor/ca.crt" # CA 证书
cert_file = "/etc/containerd/harbor/harbor.crt" # harbor 证书
key_file = "/etc/containerd/harbor/harbor.key" # harbor 私钥

[plugin."io.containerd.grpc.v1.cri".registry.configs."harbor.lidabai".auth] #auth,配置注册表凭据
username = "admin" #Harbor用户名
password = "Harbor12345" #Harbor密码
auth = ""
identitytoken = ""

「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能_Containerd_02

重启containerd.service服务


重新加载载 systemd 的 daemon守护进程并重启containerd.service服务,然后k8s集群节点便可正常从Harbor拉取镜像了。

$ systemctl daemon-reload && systemctl restart containerd.service

拉取镜像


  虽然上面的方式可以使k8s直接拉取镜像,但是在利用 ctl命令 进行手动拉取镜像此时会报如下错误(巨坑-经过无数次失败测试,原本以为是CA证书签发的harbor证书问题),即使你在config.toml中配置insecure_skip_verify为true也是不行的,可以添加-k参数跳过证书校验。

[root@lidabai ~]# ctr -n harbor.lidabai i pull 192.168.2.22:443/library/prepare:v2.5.1 -k


查看下载的镜像

刚才我们下载镜像时通过-n参数指定了namespace。在查看时也要通过-n指定namespace,否则看不到。

[root@lidabai ~]# ctr -n harbor.lidabai images ls

「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能_运维_03

踩坑记录


unexpected status code [manifests 1.28]: 401 Unauthorized

【问题描述】

下载Harbor中的私有镜像时报错:

[root@lidabai app]# ctr -n harbor.lidabai  images  pull 192.168.2.22:443/lidabai/busybox:1.28 -k
ctr: failed to resolve reference "192.168.2.22:443/lidabai/busybox:1.28": unexpected status code [manifests 1.28]: 401 Unauthorized

「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能_云原生_04

【原因】401未经授权

【解决】通过-u参数指定Harbor用户名和密码。

$ ctr -n harbor.lidabai  images  pull 192.168.2.22:443/lidabai/busybox:1.28  -u admin:Harbor12345 -k

「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能_Containerd_05

x509: certificate signed by unknown authority

【报错描述】在拉取镜像时报出错误:

[root@lidabai ~]# ctr images pull  192.168.2.22:443/library/prepare:v2.5.1
error="failed to do request: Head \\"https://192.168.2.22:443/v2/library/prepare/manifests/v2.5.1\\": x509: certificate signed by unknown authority" host="192.168.2.22:443"
ctr: failed to resolve reference "192.168.2.22:443/library/prepare:v2.5.1": failed to do request: Head "https://192.168.2.22:443/v2/library/prepare/manifests/v2.5.1": x509: certificate signed by unknown authority

「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能_运维_06

【解决办法】:

1)通过-k参数跳过证书校验。

[root@lidabai ~]# ctr -n harbor.lidabai i pull 192.168.2.22:443/library/prepare:v2.5.1 -k

「开源摘星计划」Containerd拉取Harbor中的私有镜像,云原生进阶必备技能_Containerd_07

2)指定CA证书、Harbor相关证书文件路径。

$ mkdir /etc/containerd/harbor/   #创建证书存放目录
$ scp /app/harbor-cert/ca.pem,harbor.pem,harbor-key.pem 192.168.2.41:/etc/containerd/harbor/
$ ctr -n harbor.lidabai images pull 192.168.2.22:443/library/prepare:v2.5.1 \\
--tlscacert /etc/containerd/harbor/ca.pem \\ #或ca.crt
--tlscert /etc/containerd/harbor/harbor.pem \\ #或harbor.crt
--tlskey /etc/containerd/harbor/harbor-key.pem #或harbor.key


精品文章阅读

​Harbor高可用集群设计及部署(实操+视频),基于离线安装方式​

​Harbor进阶:使用Harbor存储Helm chart​

​Python实现Harbor私有镜像仓库的垃圾自动化​

​Harbor jobservice组件异常问题处理​

​Harbor高可用设计: 使用外部Redis缓存部分​

​阿里云镜像迁移到Harbor详细的操作步骤​

​如何将dockerhub上的镜像迁移到Harbor私有镜像仓库中?​



「开源摘星计划」loki实现harbor日志的高效管理

本文已参与「​​开源摘星计划​​​」,欢迎正在阅读的你加入。​​​​​​​​前言在Harbor的使用Loki实现Harbor日志的管理,在Grafana页面查询Harbor的日志。环境:已通过Helm在Kubernetes集群中安装Harbor,Harbor服务部署在Harbor... 查看详情

「开源摘星计划」华为云swr镜像同步到harbor

在SWR创建组织(Projects)华为容器镜像服务(SWR)中的"组织"概念和Harbor中的"项目"是一样的,不同的"组织"用来存放不同应用的镜像。操作:【容器镜像服务】—【组织管理】—【创建组织】,然后填写组织名称,点击【确定】... 查看详情

「开源摘星计划」jaeger实现harbor的链路监控(代码片段)

...tel)两种实现方式。1.2Jaeger简单介绍  Jaeger是一个开源的分布式追踪系统,它可以在复杂的分布式系统中进行监控和故障排查。Jae 查看详情

「开源摘星计划」优麒麟系统(国产)部署harbor私有镜像仓库服务(代码片段)

  一、环境描述  随着国产化浪潮的兴起,企业都逐步将服务部署在国产的操作系统上。  本篇文章则在优麒麟20.04操作系统上部署Harbor2.6.0私有镜像仓库服务,其它版本的Harbor亦可参考本文档。关于优麒麟的详细信息可... 查看详情

k3s使用containerd运行时拉取镜像失败

参考技术A问题:为什么:代理网络不稳定、dockerhub拉取次数限制等。通常是由于事先设置代理环境变量,在方便拉取镜像或文件的同时,如果出现该问题请检查容器运行时使用的代理配置。解决办法:多次尝试或更换代理节点、删... 查看详情

containerd安装及使用

参考技术A这步主要是为了kubeadm初始化时能从k8s.gcr.io拉取镜像。kubernetes的命名空间是k8s.io 查看详情

docker组件介绍

...sr/bin/dockerd一句话概括:docker和dockerd组成了dockerengine二、Containerd(容器)管理容器的生命周期(从创建容器到销毁容器)拉取/推送容器镜像存储管理(管理镜像及容器数据的存储)调用runC运行容器(与runC等容器运行时一句话概括:doc... 查看详情

containerd入门基础操作

参考技术AContainerd被Docker、KubernetesCRI和其他一些项目使用Containerd旨在轻松嵌入到更大的系统中。Docker在后台使用containerd来运行容器。Kubernetes可以通过CRI使用containerd来管理单个节点上的容器。生成默认配置配置镜像加速器ctr相... 查看详情

Bamboo:创建拉取请求时创建“计划分支”,但按目标分支过滤

】Bamboo:创建拉取请求时创建“计划分支”,但按目标分支过滤【英文标题】:Bamboo:create"planbranch"whenpullrequestiscreated,butfilterbytargetbranch【发布时间】:2021-09-2907:48:35【问题描述】:我希望我的BitBucket实例在创建拉取请求... 查看详情

dockerimage可以直接给containerd使用?

您好,是的,dockerimage可以直接给containerd使用。Containerd是一个开源的容器运行时,它可以帮助开发人员更轻松地管理容器,从而更快地部署应用程序。Dockerimage是一种可以在容器中运行的镜像,它可以包含应用程序、依赖项和配... 查看详情

harbor和containerd的最佳实栈(代码片段)

...m,对该版本的支持则会再延长一年。\\  本文基于Containerd为容器运行时的kubernetes集群,分析Co 查看详情

从docker到containerd:容器运行时的下一步

...进行替代,也成为了一个热门话题。在众多备选产品中,containerd无疑是其中最受欢迎的方案之一。如果你对containerd还不熟悉,那么本文将带你揭开它的神秘面纱!​一.产品介绍containerd是由Docker Inc.开发的容器运行时,最初... 查看详情

如何用sourcetree的ssh拉取和提交开源项目

使用SSH访问开源git从2021年开始不能直接http验证提交了或者官方也提供其他方法但是我们还是搞下SSH吧那在SourceTree要怎么做呢(应该不用git代码)以某开源,类似Github的git服务网站为例子先在SourceTree生成公钥点击[Gene... 查看详情

containerd容器环境搭建教程

containerd容器环境搭建教程一、containerd介绍1.主流的容器技术2.containerd官网3.containerd介绍4.containerd下载地址二、安装containerd1.下载containerd2.查看tar包3.解压软件包4.启动服务5.查看containerd状态三、配置containerd1.生成配置文件2.配置... 查看详情

腾讯开源项目wepy实习生招募计划

查看详情

Containerd:将文件从 containerd 容器复制到主机

】Containerd:将文件从containerd容器复制到主机【英文标题】:Containerd:Copyingfilesfromcontainerdcontainertohost【发布时间】:2021-08-3113:04:30【问题描述】:我正在containerd中寻找与dockercp命令等效的命令。例如,在containerd中相当于下面的... 查看详情

containerd的安装和配置

参考技术AContainerdGithub:containerd/containerd直接将压缩包解压到系统目录中:添加环境变量生成配置文件containerd安装包中含有containerd.server文件在etc/systemd/system/containerd.service下,所以我们能通过systemd来配置containerd作为守护进程运行... 查看详情

openharmony开源开发者成长计划,寻找改变世界的开源新生力

OpenAtomOpenHarmony(以下简称“OpenHarmony”)开源开发者成长计划,是一项为鼓励开发者积极参与开发维护开源软件共建,助力开发者成长的人才培养计划。首期开源开发者成长计划完满收官首期OpenHarmony开源开发者... 查看详情