新版K8s:v1.28拉取Harbor仓库镜像以及本地镜像(docker弃用改用containerd,纯纯踩坑)

目录

一、项目概述

使用Kuboard作为k8s集群的管理平台,Harbor作为镜像仓库,拉取Harbor镜像仓库的镜像运行。

从K8s1.24版本之后,k8s就逐渐弃用了docker,采用containerd来管理,这个很重要。

二、环境

服务器 IP地址 备注
K8sMaster 192.168.2.138 kuboard,Master管理节点
K8sWorker01 192.168.2.139 Worker工作节点
K8sWorker02 192.168.2.140 Worker工作节点
Harbor 192.168.2.142 Harbor镜像仓库

三、项目样式

Harbor
kuboard
运行样式

四、核心点

Harbor安装

Harbor安装网上有很多教程,可以使用http的,也可以使用https的,自行选择,我这里使用的http的,不过问题有点多,不过拉取镜像也能用,测试环境可以用http的,但是深生产环境建议使用https的。

config.toml文件修改(containerd)

K8s:v1.24版本以后拉取镜像采用containerd,所以你需要修改containerd的配置文件,记得每个节点都需要修改,修改一份后,使用scp或者ansible命令进行复制就可以

bash 复制代码
#scp
scp /etc/containerd/config.toml root@k8sworker01:/etc/containerd
scp /etc/containerd/config.toml root@k8sworker02:/etc/containerd

#ansible
ansible k8s -m copy -a "src=/etc/containerd/config.toml dest=/etc/containerd"

1、自动生成config.toml文件

bash 复制代码
# 生成默认配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

2、修改镜像源

bash 复制代码
# vi编辑配置文件
sudo vi /etc/containerd/config.toml

# 将 pause 修改为国内源镜像,找到 sanbox_image修改前缀为国内源
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"

# 找到 SystemdCgroup
SystemdCgroup = true

3、修改Habor镜像仓库相关配置:拉取Harbor镜像仓库,还需要修改如下信息,在文件144行左右,修改完成记得保存,重启containerd

bash 复制代码
systemctl daemon-reload
systemctl restart containerd
ctr、nerdctl相关命令

使用containerd,需要使用ctr与nerdctl命令来进行查看镜像,命名空间,进行推送等,k8sV1.24版本拉取本地镜像是从containerd镜像库里面拉取的,不是从docker images里面拉取的,如果你没有Harbor,要确保每个工作节点上面k8s.io命名空间有镜像都有镜像,这里是新版本k8s的坑

bash 复制代码
#下载镜像nginx
ctr image pull docker.io/library/nginx:alpine
#查看命名空间
ctr ns ls
#查看default空间镜像
ctr image ls
#查看k8s.io空间镜像
ctr -n k8s.io image ls
#打标签
ctr -n k8s.io images tag docker.io/library/flaskweb:v1.0.0 192.168.2.142:8800/test/flaskweb:v1.0.0
#导入到k8s.io空间镜像
ctr -n k8s.io image import flaskweb.tar.gz
#从镜像仓库下载镜像,http需要如下写法,不然会报错
ctr images pull --plain-http=true --skip-verify  --user admin:Harbor12345 192.168.2.142:8800/test/flaskweb:v1.0.0
#推送镜像
ctr -n k8s.io image push --plain-http=true --skip-verify  --user admin:Harbor12345 192.168.2.142:8800/test/flaskweb:v1.0.0
#nerdctl命令与docker命令很像
nerdctl images
nerdctl run
kuboard工作负载

kuboard新建工作负载,在选择容器镜像时,新建一个密文,如果你有Harbor可以始终拉取新镜像,如果你走本地k8s.io空间的镜像时,改成Never从不拉取镜像。如果保存后,提示镜像无法拉取Error: ErrImagePull,可以在每台工作节点上面使用ctr images pull来拉取镜像实施试试。

五、总结

说实话有点后悔装Kubernetes:V1.28版本了,在1.24版本后弃用docker,改用containerd,在我完成整个实验前80%的时间我是不晓得的,所以就一直傻乎乎的使用docker login登录Harbor,docker pull 拉取镜像,docker images来查看镜像,所有节点都是可以从Harbor拉取镜像,登录Harbor,但就是k8s无法自动拉取Harbor镜像与本地镜像,查了很多资料,但都是说docker的配置,很少提到containerd的概念,最后查到k8s官网才晓得这个概念,最后换了一个思路才解决K8s1.28版本使用kuboard来拉取Harbor镜像仓库镜像。抱怨归抱怨,一个星期的尝试,对kubectl命令,k8s的架构也越来越熟悉,继续加油!

相关推荐
minsin15 分钟前
【linux】【docker】Docker默认网段配置导致无法访问
docker
悲伤的创可贴2 小时前
Docker安装以及简单使用
linux·docker·centos
方圆师兄2 小时前
docker快速搭建kafka
docker·容器·kafka
小的~~3 小时前
k8s使用本地docker私服启动自制的flink集群
docker·flink·kubernetes
诚诚k4 小时前
docker存储
运维·docker·容器
sorel_ferris4 小时前
Ubuntu-24.04中Docker-Desktop无法启动
linux·ubuntu·docker
数据智能老司机4 小时前
Kubernetes从入门到精通系列——外部 DNS 和全局负载均衡
云原生·容器·kubernetes
多多*5 小时前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
NiNg_1_2345 小时前
使用Docker Compose一键部署
运维·docker·容器
FLGB5 小时前
Flink 与 Kubernetes (K8s)、YARN 和 Mesos集成对比
大数据·flink·kubernetes