k8s折腾笔记——树莓派集群安装k3s
写在前面
上个月和班主任聊天,知道了k8s(Kubernetes),瞬间来了折腾的兴趣。脑子一热买了三台树莓派4B。
由于其对初心者及其不友善的特点,断断续续拖了一个月,昨天刚弄好。
想到博客万年没更新了,来写一下。
封面图来自:画师JW —— 人总分不清梦境与现实。
前置准备
硬件准备
- 电脑一台(系统随意)
- 树莓派4B*3(我的是4GB的版本)
- 交换机
- 网线*4(树莓派连交换机3根,交换机连路由器1根)
- SD卡*3(我是64GB的闪迪)
鞋盒*1
此处树莓派供电我用的是绿联的三个快充头,以保证充足的供电。
有买亚克力的架子,组装后大概如下
软件
- 各系统自带终端(用于ssh连接树莓派)
- Debian-Pi-Aarch64 ★ 全新树莓派64位系统 项目地址
- balenaEtcher – 一个跨平台镜像烧录工具(Mac、Windows、Linux)官方网址
- 各种k8s相关的软件
注意:接下去的内容能够正常使用的前提是要有“良好的网络环境”,例如要能顺畅地pull到dockerHub上的镜像,否则将有极大概率无法完成安装!
系统设置
这里使用的是Debian-Pi-Aarch64 ★ 全新树莓派64位系统的基础版无桌面镜像,烧录进SD卡后插电开机
默认账户:pi
,默认密码:raspberry
首先需要找到树莓派的IP地址,可以登录路由器后台查看。建议知道地址后将其固定下来,不固定也没事,之后会将其设置为静态IP。
以我的为例,我将三台树莓派分别命名为rpi1
、rpi2
、rpi3
,其IP固定为如下
在k8s集群中,节点分为Master
和node
两种,Master
节点是集群中负责调度任务等工作的控制面节点,node
是工作节点。后续向集群中添加应用程序时,会由Master
将任务指派给node
。
接下去的内容默认是在root用户下执行,请使用sudo -i
将用户变更为root并设置root用户密码
更改主机名
首先要把三台主机的主机名更改回来(此处仅以rpi1为例)
ssh连接rpi1这里有两个文件内容要更改,第一个是/etc/hosts
将文件中的
更改为
第二个文件是/etc/hostname
将内容改为rpi1
即可。其他两台操作相同
更改网络设置
打开配置文件
将文件内容修改为如下(此处依旧以rpi1为例,如果你的网段与我不同,请更改为自己的网段!请勿照抄)
接着将三台机器的IP地址添加到/etc/hosts
文件中,并重启网络
修改ssh设置
默认情况下,这个镜像是不允许直接使用root账号连接的,为了方便省事,需要允许直接使用root账号进行ssh连接
进入配置文件,将
修改为
并重启服务
打开IPv4转发
将文件中的这行注释去掉
关闭防火墙
关闭一些服务
安装常用软件
启用docker
关闭Swap
直接注释掉,简单粗暴
至此,系统配置已全部完成
重启一遍系统后,正式开始集群的部署
集群部署
从这里开始,才算进入正片。由于k8s对于树莓派而言有点过于臃肿了(主要部署起来太折腾了),所以我使用的是k3s。
k3s脚本安装
对于没有网络问题的同学可以直接使用官方脚本进行安装,(请注意不要直接复制下面这行命令,我们需要加上相关参数执行!)
同时,如果网络有问题,可以参考官方文档使用国内镜像。
此处不直接使用这个脚本,而是预先添加参数,分别在Master
和node
执行
Master机执行
Master
机脚本如下
如果网络有问题请在命令中添加参数INSTALL_K3S_MIRROR=cn
,以使用国内镜像
此处K3S_NODE_NAME
为指定此机器在集群中的名字,为方便识别这里设置为和主机名rpi1
一样的名字。
等待执行完后,需要获取Token
,给后续添加进集群的机器使用。请保存好这个Token
,接下去要用到。
node机执行
前面我们在Master
机获取到了Token
,假设它为
那么在rpi2
、rpi3
这两个node
节点上的执行命令为
参数K3S_URL
为Master
结点(即这里的rpi1
结点),参数K3S_TOKEN
填入上面的Token
如果网络有问题请在命令中添加参数INSTALL_K3S_MIRROR=cn
,以使用国内镜像
回到Master机查看集群状态
如果没有问题将会看到如下显示,三个结点都已在集群中,并已ready
使用以下命令查看pods
是否已正常运行
基本如下所示就是正常的
至此k3s的安装也就告一段落了。
安装一些管理应用
到目前为止,k3s
还只能在命令行使用,由于其复杂程度非常不利于初心者的使用,对于学习来说,快速开始使用是挺重要的,这里介绍Kubernetes Dashboard
和Kuboard
的部署。对于k8s集群来说,部署任务只需要在Master
机上执行即可,Master
节点会向node
节点指派任务。所以以下操作均是在Master
机上执行的(在我的集群中是rpi1
)
安装Kubernetes Dashboard
执行以下命令
执行完后需要等待一段时间,集群拉取镜像和指派任务需要一点时间
可以通过以下命令查看部署情况
如果为ready
则说明已经部署完成了
使Kubernetes Dashboard在集群外部可用
在部署完成后,在Master
机上执行kubectl proxy
可以使其在Master
机上访问(地址) ,但这对于我们来说是不够的。大公司可以用带桌面的系统,在机房中直接操作Master
机,但平穷如我只能使用无桌面镜像的树莓派组集群,所以我们至少要让它暴露在集群外,至少在局域网下可以使用。
此时就需要对其配置进行修改。执行以下命令
这个命令的意义在于让Kubernetes Dashboard
的端口暴露在nodePort
(节点端口)30443
上,是我们可以通过访问rpi1
(192.168.6.91
)的30443
端口,执行完后,就可以通过访问 https://192.168.6.91:30443 使用Kubernetes Dashboard
了。
但是!
但是由于目前集群使用的是自签名的ssl证书,对于浏览器而言是不受信任的,还无法直接访问。对于Firefox浏览器而言可以配置例外情况进行访问,而Google Chrome呢,它没给我们选项怎么办?
不用怕,其实Google Chrome有留“秘籍”!
点击以下页面的空白处,然后在键盘上敲thisisunsafe并回车就可以访问!非常有Google的风格。
登录使用Kubernetes Dashboard
Kubernetes Dashboard
提供了两种登录方式,一种是Token
,另一种是Kubeconfig
。这里我只说Token
的方法。
执行以下命令
然后通过以下命令获取到Token
将输出的Token
填写在网页中即可。接下去就可以开始使用了
安装Kuboard
看了Kubernetes Dashboard
的安装以及进入Kubernetes Dashboard
的页面后是不是感觉还是很麻烦?是不是觉得看到一大堆各种各样的洋文无从下手?没错,我也这么觉得。所以这里我们安装Kuboard
方便我们之后的使用。 不过这里就不在k8s中部署了,而是直接在
rpi1上使用
docker部署。这里只介绍
docker`上的部署,其他的方式请参阅官方文档。
部署Kuboard镜像
在rpi1上执行以下命令
参数KUBOARD_ENDPOINT
中的地址为之后Web界面的访问地址,命令中的各部分可根据实际需求自由替换,详情参阅官方文档
部署完成之后直接访问 http://192.168.6.91:60080 即可开始使用。比官方的Kubernetes Dashboard
属实方便多了。Kuboard
的默认用户名:admin
,默认密码:Kuboard123
现在开始,你也可以使用反向代理、内网穿透、端口映射等手段让管理界面在公网上可用。
添加集群
当我们完成了上面的设置,并不代表我们可以直接使用Kuboard
对集群进行管理,还需要在设置中添加集群。Kuboard
提供了两种方法
这里我们选择agent
的方式
填写名称和描述,其他默认,直接点确定,然后根据提示在Master
机执行命令即可,基本无脑点确定就行,非常方便。
集群导入成功后即可开始使用
后话
为了玩这个真的投入了不少时间和金钱,确实折腾人。目前还没搞懂k8s的很多概念,有非常多不理解的地方,对于任务的部署其实还完全不了解,回头理解了再发新的文章介绍。估计要明年发了