构建家用kubernetes集群(上)

背景

之前家里仅仅放了一台Qnap的四槽NAS。用来存放一些照片,旅游的视频,绰绰有余。
傻瓜式的NAS一条龙服务的确很便利。但是一旦有了安全的问题就不是自己能够解决的了。

最近针对Qnap的勒索软件闹得沸沸扬扬,我的Qnap也不慎中招,所有小于20M的文件都被强制加密了。

好不容易打上不补丁升级系统清扫完毕,
一波未平一波又起,最近google的新闻又开始给我推送一些Qnap又遭新型勒索软件攻击的新闻。

看开是时候升级一下工具了。
于是打算整合一些二手PC,搭建一个kubetnetes集群,利用一些开源的项目,自己host所需存储服务。

硬件构成

设备 数量 价格(JPY)
intel-nuc7i7bnh 2 52,000
intel-nuc5i3ryh 1 23,000
Toshiba HDD 1T 2.5Inchi 5400rpm 3 6,900
散装 DDR4-2133 8G 5 1,5000

总共花费10万日元上下吧。

预先准备

操作系统

三台机器分别装上ubuntu server 20.04 LTS。

连接上家里的无线热点

因为家里路由器放在了电视机旁边,为了不拉拉扯扯一堆网线,准备让三台NUC通过WIFI连接到路由器。
由于ubuntu server没有图形界面,这一切需要在terminal上进行。
由于安装系统之后需要用apt install安装一些常用的工具,所以不可避免我们先得把机器用有线暂时先连接到路由器上。

1
2
sudo apt update && sudo install net-tools && \
sudo apt install wireless-tools

查看一下无线网卡接口的名称。

1
2
iwconfig
=> wlp1s0

然后打开 /etc/netplan/00-installer-config-wifi.yaml, 编辑文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
network:
version: 2
renderer: networkd
wifis:
wlp1s0:
dhcp4: no
dhcp6: no
addresses: [192.168.0.87/24]
gateway4: 192.168.0.1
nameservers:
addresses: [192.168.0.1,8.8.8.8]
access-points:
"your wifi ssid":
password: "you password"

其实已经很明明白白了,还是多解释一下,这里不使用DHCP,直接给机器绑定固定地址。因为作为K8s的node,我们不希望node的ip发生变化。
同时,得指明dns 服务器的ip,一般默认用路由器的ip就好,实在不放心,把谷歌的8.8.8.8 也放上去。

保存之后,执行sudo netplan apply, 查看一下ifconfig,默默等待无线网卡连上wifi,获取到指定的ip地址。

然后把网线拔了,继续准备下一台机器。

使用RKE安装k8s

ssh免密

ssh到每一台机器中。以下称为node。

使用RKE安装K8s的时候,需要一个用户能够ssh进入到每个节点中。假设我们已经有了这么一个用户,叫做kubeuser。

我们把mac本地的ssh公钥放入到每个node的用户home下面,以实现免密码ssh进入node。

1
2
# mac 本地
cat ~/.ssh/id_rsa.pub| pbcopy
1
2
3
4
5
# 各node
ssh-keygen
vi ~/ssh/authorized_keys
#粘贴mac本地的公钥
chmod 600 ./ssh/authorized_keys

安装docker

每个node安装docker,并把之前提到的rke需要用到的用户加到Docker用户组中。

为什么呢?因为rke需要到每个node里面执行docker,所以rke操作的用户必须不用sudo就能使用docker。

1
sudo useradd -aG docker kubeuser

创建k8s

在mac上下载rke。brew install rke

rke config 会展开一个对话模式,询问每个节点信息和你所想要的配置。

我的配置是

node ip role
k8s-1 192.168.0.87 ectd, contropanel, worker, ingress
k8s-2 192.168.0.88 worker
k8s-3 192.168.0.89 worker, ingress

配置完成之后会生成一个cluster.yml, 这个时候就可以执行rke up了。

执行完成会生成一个kube_config_cluster.yml文件,这个就是你的kubeconfig文件了。把它放到 ~/kube/config, 试着看一下是否k8s已经起来。

这里推荐k9s这个工具,我们可以直接 brew install k9s, 然后执行k9s,就可以看到我们的cluster全貌啦。

接下来

我们需要ingress-nginx实现七层LB,同时使用MentalLB实现四层LB,同时使用Longhorn快速创建Persist volumn的。

更重要一点,我们还需要将去往NAS的request转发给NAS。由于篇幅过长,就在下一篇介绍了。

这里留一点提示,三台node,只有两台配置了ingress controller, 想必有一台是要用来直接承接外部所有request的了。