1、搭建k8s集群,经过千辛万苦终于把集群搭建好了,虽然把nginx跑起来了,但是还是一脸懵逼
2、先弄清楚一些概念 node pod service deployment ingresses namespace,node表示集群节点;pod 是最小的资源管理组件,它代表集群中运行的一个进程;service负责将pod进行对外暴露;deployment负责管理和控制pod;namespace负责组织和资源的隔离。
3、利用deployment把pod创建好,然后利用service将pod暴露出去,service的类型需要了解清楚
4、然后jar应该怎样利用k8s进行部署呢?刚才是想的是将jar传到k8s节点上利用-v挂载宿主机目录然后进行部署,百度了一堆,才发现不是这样,还是固有思维在考虑,应该用docker的方式考虑才是正确的方向,并且是docker仓库的方式才行,普通的docker的build+start的方式并不能行得通,后来相同了,这样并不适合大规模集群运维
5、找到镜像仓库的方向了, 现在是朝这个方向前进,镜像仓库有dockerhub公有库、docker-registry私库、harbor私库,显然公有库不适合我们部署应用的场景,docker-registry私库看起来更简单一些,更容易上手,当然选择docker-registry
6、docker-registry初步部署很容易,注意是初步部署,后面还有两层,一是https,二是身份认证,初步部署完成然后加上daemon.json的配置,发现docker的push和pull是可以的了,但是deployment始终构建不了pod,原因是镜像拉取失败,不允许从http请求https,但是明明daemon.json是配置了不安全地址的,并且网上很多文章都是这样说的,后来仔细看了下那些文章的时间都是2-3年前的,那时候可能k8s没有弃用docker,再进一步想到k8s使用的不是docker了,而是docker下面的containerd,所以我配置了docker的daemon.json,在docker中是生效的,但是在k8s中是不生效的,所以我应该修改k8s中的镜像仓库相关的配置。
7、然后去k8s官网看了下kebelet的配置,没有发现镜像仓库相关的配置,差点放弃了,然后之前上面提到的containerd的配置,一直没有去百度和尝试,突然就感觉很有可能是这里,然后最终找到了正确的配置方式,修改这个配置文件 /etc/containerd/config.toml,找到里面的[plugins."io.containerd.grpc.v1.cri".registry.mirrors]关建行,在这下面添加
"192.168.1.2:5000" = { "endpoint" = ["http://192.168.1.2:5000"] }
注意格式,以上配置是针对特定registry的配置,对于从这些registry拉取的镜像,containerd会尝试使用http协议而不是默认的https。
然后重启生效 sudo systemctl restart containerd
8、至此折腾了3天的私有镜像仓库终于有了正确的答案
总结一下,出现这个问题并被卡住3天的原因,一是对k8s本身的理解不够,不然在deployment构建pod时拉取镜像时和利用docker拉取镜像结果不一样的时候,应该就要反应过来,k8s用的是containerd,而不是docker;二是百度出来的很多资料时间比较久了,部分资料已经完全不适应现在的版本了,被误导了,当然主要还是自己太菜了
本文是专门为解决私有镜像仓库的问题而写的,把过程草草的记录一遍,以便后来人有点浅薄的经验可以借鉴,而且可以防止以后自己忘记了
另外后面有空了,会完善本人关于k8s搭建相关文章