4台RaspberryPi4B搭建K8s(K3s)容器集群(四)使用Docker部署Rancher2.5.8导入K3s集群
4台RaspberryPi4B搭建K8s(K3s)容器集群(四)使用Docker部署Rancher2.5.8导入K3s集群
使用Docker部署Rancher2.5.8
为了更方便的使用K8S,我们可以部署Rancher作为管理平台来使用。
Rancher官网
企业级多集群Kubernetes管理平台
Rancher文档 | K8S文档 | Rancher | Rancher文档
目前官网上能看到的最新版是v2.5.8,下面在Docker下来进行部署。
为了省事我就放在四台树莓派中的主节点上了,但是在这里建议为了分配一下负载压力,应该把Rancher部署在其他节点上。(事实上后来我也是把Rancher重新放在了192.168.31.82这台设备上了)
我们直接来到dockerhub上去找Rancher的镜像
可以看到v2.5.8最新有个v2.5.8-patch2而且第一个刚好就是linux-arm64的,适用于我们的树莓派4arm64位的OS,也就是目前装的Raspbian Buster这个系统。
所以我们直接到Matser那台机器上直接去拉镜像就好
docker pull rancher/rancher:v2.5.8-patch2-a44c77e8ddca69155df78c7226f33f388ce8452f-linux-arm64
注意
部署rancher:v2.5.8-patch2这个版本的时候,实际上踩了坑。
下面的内容中,会有解决的过程。
如果不想趟坑,请直接去拉取后面说到的v2.5.8这个 Tag
docker pull rancher/rancher:v2.5.8@sha256:d8802d9fd23eb062ab0a30c7e53f7c995b2e4df981299b6c14d21347f30ceb86
这里多说一下,docker pull 镜像的时候最好提前去dockerhub上查一下Tags。
很多时候发布版的镜像是同时支持不同的系统的,比如下面这种,我们需要留意一下 OS/ARCH 这里
我们需要的是下面这个arm64的,而不是amd64的。
因此这时候生拉硬拽不可以,需要在 docker pull 命令中加上DIGEST,这样就可以指定要拉取的是哪个系统的镜像了
然后把上面这段DIGEST的内容复制到 docker pull 命令里的镜像名后面,像这样
docker pull rancher/rancher:v2.5.8@sha256:d8802d9fd23eb062ab0a30c7e53f7c995b2e4df981299b6c14d21347f30ceb86
镜像名TAG后面有个 @ 然后才是DIGEST的内容
回到我们刚才的rancher:v2.5.8-patch2这里
docker pull rancher/rancher:v2.5.8-patch2-a44c77e8ddca69155df78c7226f33f388ce8452f-linux-arm64
镜像拉取下来之后,就可以跑一跑看看了。
先查看一下镜像,然后用镜像ID跑起来一个容器。这里给Rancher的对外端口是8080和8443
docker run -d --restart=unless-stopped -p 8080:80 -p 8443:443 --name=rancher2.5.8-patch2 --privileged a33ba7143766
等一小会儿让服务启动起来。
这时也可以看一下容器日志看看启动过程中有没有什么问题
docker logs -f rancher2.5.8-patch2
浏览器访问一下 https://192.168.31.81:8443/
依旧提示不安全,点高级——继续前往 或者秘籍 thisisunsafe
成功访问到了Rancher页面,给admin设置个登录密码
设置好URL,直接保存就可以,然后我们就看到主页面了
上来就是集群列表,此处的local就是安装Rancher的时候自动部署的一个k3s集群,其中只有一个server节点来支持Rancher的运行。
下面我们来导入刚才自己部署好的K3S集群
Rancher 导入K3S集群
点击集群列表上面的添加集群,选择导入
给新集群起个名字然后点击创建
然后来到了这里
搭建实验室测试环境,要什么安全不安全的,问就是不信任,不安全。
复制最后这行命令,到K3S集群里的那台Master节点机器上去执行,这样4台节点机上会依次安装好对接Rancher用的server和agent服务。
偶尔会出现 error: no objects passed to apply 的情况,再试几次就好
回到Rancher页面上,点一下完成
可以看到我们导入的新集群正在 Pending
注意这里如果运气好的话,会在后面的几十秒内陆续看到这个状态变成 Waiting 和 Active
然而并没有,Pending了几分钟,依旧没有任何变化。
为什么会搞成这样
掉坑里了
我们回到Master上,查看k3s下的服务状态
kubectl get deployment -A
结果发现cattle-cluster-agent压根就没启动起来
于是再查看一下pod的状态
kubectl get pods -A
能看到 cattle-cluster-agent 的状态始终是 ImagePullBackOff
由此推测应该是镜像拉取的时候出了问题
我们通过describe命令 进一步查看一下这个pod的情况
格式 kubectl describe pods -n NAMESPACE NAME
kubectl describe pods -n cattle-system cattle-cluster-agent-ccf68598b-8d4zs
可以看到问题时出现在拉取rancher-agent镜像的时候出现了问题
拉取用的镜像路径是这个
rancher/rancher-agent:v2.5.8-patch2-a44c77e8ddca69155df78c7226f33f388ce8452f-head
这个最后面的 head 就非常的形迹可疑
于是我们又来到了dockerhub上,查看一下rancher-agent的相关Tags
用我们装的
v2.5.8-patch2-a44c77e8ddca69155df78c7226f33f388ce8452f
这个版本来查
根本就没有
v2.5.8-patch2-a44c77e8ddca69155df78c7226f33f388ce8452f-head
不过我们顺手找到了
v2.5.8-patch2-a44c77e8ddca69155df78c7226f33f388ce8452f-linux-arm64
这个Tag是我们适用的,那么我们接下来就需要让K3S主节点在执行Rancher导入新集群的命令时使用这个镜像就好了
回到Rancher的页面上,去找刚才有问题的那个命令
在集群列表里,点击新集群最右侧的三个点儿,选择导入主机,就可以再次看到命令页面了
既然我们已经知道问题出在这个YAML中的镜像地址上,那么我们就直接把这个YAML的内容复制出来看看
直接把yaml的url复制到浏览器里去访问就好
能看到 containers 下面的 image 内容就是刚才出错的那个Tag
既然自动生成的文件有问题,那我们就改一改然后自己执行一下就好。
来到Master里面,去找到manifests目录
cd /var/lib/rancher/k3s/server/manifests/
然后创建个yaml文件(这里命名为temp.yaml),把浏览器里看到的刚才那个问题文件内容复制进去就好。
vi temp.yaml
这里image的tag修改为刚才从dockerhub上找到的正确的那个
v2.5.8-patch2-a44c77e8ddca69155df78c7226f33f388ce8452f-linux-arm64
保存文件
:wq
赋权
chmod 777 -R temp.yaml
应用一下
kubectl apply -f temp.yaml
去看一眼cattle-cluster-agent的服务已经正常启动了
注意
如果还有问题
例如cattle-cluster-agent始终会提示 ErrImagePull
那么就要考虑使用更稳定的Tag
如 rancher/rancher:v2.5.8
rancher/rancher:v2.5.8@sha256:d8802d9fd23eb062ab0a30c7e53f7c995b2e4df981299b6c14d21347f30ceb86
回到Rancher页面上,新的集群也已经是 Active 状态
点开看一下
点击上面的仪表盘我们的节点机和部署过的服务都可以在这里看到了
前面搭建K3S的时候开启的那个kubernetes-dashboard在这里也看到了,还有之前配置的Nginx服务
到这里,我们的树莓派K8s(K3s)集群环境算是搭建完成了。
后面的文章中,会从应用开发的角度逐步把这套环境使用起来。
顺带一提,后来我买了乐高拼了个壳