构建家用kubernetes集群(上)

  1. 1. 背景
  2. 2. 硬件构成
  3. 3. 预先准备
    1. 3.1. 操作系统
    2. 3.2. 连接上家里的无线热点
  4. 4. 使用RKE安装k8s
    1. 4.1. ssh免密
  5. 5. 安装docker
  6. 6. 创建k8s
  7. 7. 接下来

背景

之前家里仅仅放了一台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的了。

如果你觉得本文对你有帮助,请给我点赞助。