新版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的架构也越来越熟悉,继续加油!

相关推荐
955.2 小时前
k8s从入门到放弃之k3s轻量级
云原生·容器·kubernetes
悟纤13 小时前
Docker 操作容器[SpringBoot之Docker实战系列] - 第538篇
spring boot·docker·容器
Tony66668888815 小时前
【基于阿里云上Ubantu系统部署配置docker】
阿里云·docker·云计算
伊成16 小时前
详解docker挂载目录常用方式
docker·容器·eureka
风清再凯16 小时前
docker镜像的构建image
运维·docker·容器
风清再凯16 小时前
docker 网络
网络·docker·容器
饭碗、碗碗香16 小时前
【开发常用命令】:docker常用命令
linux·运维·笔记·学习·docker·容器
天外来物17 小时前
实战分享:用CI/CD实现持续部署
前端·nginx·docker
郝同学的测开笔记17 小时前
一次业务投诉引发的思考:如何优雅地将K8s服务暴露给外部?
后端·kubernetes