在树莓派上构建你的专属K8S集群!
在本文中,我们将在家庭WIFI网络中使用K3s在树莓派上设置私有Kubernetes集群。我们的设置几位简单:单个master节点和worker节点。当然,如果你愿意的话也可以添加更多节点。
下图是我们本文采用的大致架构:
简而言之,我们会借助K3s绑定两个树莓派并且将他们连接到本地WLAN。然后我们可以使用客户端(也就是你的笔记本)来部署我们的工作负载,该客户端将与Kubernetes API通信,就像其他K8S集群一样。
请注意,在本文中显示的本地地址可能会与你在自己的家庭网络中有所不同。
在闪存SD卡之前,你可以启动ssh、设置hostname和无线网络凭据。快捷键Cmd+Shift+X(Mac)或Ctrl+Shift+X(Windows)获取高级选项窗口。完成这项操作后,下文中的Step1、Step 3和Step 8都可以不用进行。以防你想手动设置他们,我在文中依旧保留这些步骤。
Step 0:初始设置
首先,我们需要设置树莓派以启动SSH,并进行一些配置以使用K3s。我使用的specs和OS版本已经列在下方:
2个树莓派4 Model B- 4GB RAM
2张128G 小型SD卡
Raspbian OS Lite 版本(基于Debian Buster)
下图是我构建完成的情况:
现在你可以使用树莓派Imager(https://www.raspberrypi.org/software/)来闪存小型SD卡。它可以更轻松地选择OS版本和闪存流程。
总而言之,我们会根据以下步骤进行操作:
在两个树莓派上启用ssh
启用cgroups
设置无线
在内核级别设置64位模式
启动
设置IP列表
分配静态IP
更改hostname
在Master上安装K3s Server
在Worker上安装K3s Agent
在启动之前,我们需要进行一些配置。
Step 1:启动SSH
打开你刚刚刷新的micro SD卡的根目录(这将被保存为boot)。在该文件夹的根部创建一个名为ssh的空白文件。
touch ssh
Step 2:启用cgroups
cgroups是内核层级的核心功能,这是对容器化技术的支持。它允许进程在隔离状态下运行,并为其分配一组特定的资源。
让我们打开你刚刚保存的micro SD卷的根目录(这将被保存为boot),并编辑cmdline.txt文件。
在文件末尾添加以下命令行:
cgroup_memory=1 cgroup_enable=memory
你可能在想为什么要这样操作。可以参考K3s文档:
标准的Raspbian Buster安装时不会启用cgroups。K3S需要cgroups来启动systemd服务。cgroup可以通过在 /boot/cmdline.txt 中添加cgroup_memory=1 cgroup_enable=memory来启用。
Step 3:设置无线模式
我没有随身携带树莓派设置,所以我选择使用家里的WiFi网络而不是以太网。
在/boot/卷的根目录中,创建一个名为wpa_supplicant.conf的新文件并添加以下命令行:
country=AU
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="your-networks-SSID"
psk="your-networks-password"
}
请注意country字段(你可以在链接中找到他们:https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements)并确保将其替换为适合你的相应国家/地区代码。ssid 和 psk 将分别是您的无线网络名称和密码。
Step 4:在64位模式中运行内核
接下来,我们将在64位模式中在Raspbian OS上运行内核。这对K3s来说是必要的。
打开config.txt文件并添加以下命令行到底部。
arm_64bit=1
告一段落了!现在将小型SD卡插入树莓派中并启动它。
Step 5:启动
当你首次启动树莓派时,它可能会花费数分钟的时候才出现在你的家庭网络中。
如果你登录到路由器面板,你会看到树莓派及其IP地址。你可以通过ssh登录他们,如下所示:
ssh pi@10.0.0.100
请注意pi是默认用户,raspberry是默认密码。
当你首次登录两个节点时,请使用passwd命令修改默认密码
Step 6:启动静态IP配置
当我们启动树莓派时,K3s通过使用工作节点的IP连接到工作节点。由于我们将使用WLAN,如果我们重新启动我们的节点,IP会不同,这种设置将无法工作。因此,我们需要添加一段配置,为它们分配静态IP。
有几种方式可以执行此类操作,但最好的选择是使用你的路由器的DHCP服务器功能,进行地址预订。你需要树莓派的设备名称和MAC地址。
如果没有,你可以编辑/etc/dhcpcd.conf文件,让树莓派知道要给自己分配哪个IP。我建议在 "静态IP配置示例 "部分下面加上这一点,这样将来就会更容易找到它。
interface wlan0
static ip_address=10.0.0.100
static routers=10.0.0.1
static domain_name_servers=8.8.8.8
完成后,如下所示:
确保给每个树莓派更新了IP地址。
Step 7:设置IP列表
sudo iptables -F
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
Step 8:更改hostname
sudo vi /etc/hostname
这一文件进包含一行命令,所以你可以将其任意命名。在master节点上我将我的重命名为controlplane,worker节点则是node01。接下来,把/etc/hosts文件中写着raspberrypi的地方改为你的节点名称。
sudo vi /etc/hosts
下面是node01节点的一个例子。
完成所有更改之后,需要重启树莓派。
Step 9:在Master节点上安装K3s
要在master节点上安装 K3s,请运行以下命令:
curl -sfL https://get.k3s.io | sh -
顺便说明一下,在安装任何东西之前我都会运行sudo apt update && sudo apt upgrade。
Step 10:worker节点设置及agent注册
在设置worker节点之前,我们需要从server上获取token。你需要在master节点上运行以下命令,以便获得这个token:
sudo cat /var/lib/rancher/k3s/server/token
然后你需要在worker节点上运行以下命令。确保根据你的环境对他们进行更新:
curl -sfL https://get.k3s.io | K3S_NODE_NAME="node01" K3S_URL="https://10.0.0.100:6443" K3S_TOKEN="token from above step" sh -
变量解释:
K3S_NODE_NAME : 你要配置的工作节点的名称。记住,我们在第7步设置了hostname。
K3S_URL : master节点的IP地址,默认K3s server端口是6443,保持不变
K3S_TOKEN: 我们从K3S server接收到的Token。例如:K10141483xxxxxxxxxx::server:xxxxxxxxxxxx
你将会看到这样一条信息:[INFO] systemd: Starting k3s-agent,这意味着已经可以运行了!sudo su 之后即可主节点上运行命令。
kubectl get nodes
参考链接
https://docs.rancher.cn/docs/k3s/installation/install-options/server-config/_index
https://docs.rancher.cn/docs/k3s/installation/install-options/agent-config/_index
https://www.electrondust.com/2017/11/25/setting-raspberry-pi-wifi-static-ip-raspbian-stretch-lite/
https://thepihut.com/blogs/raspberry-pi-tutorials/19668676-renaming-your-raspberry-pi-the-hostname
https://www.tomshardware.com/how-to/fix-cannot-currently-show-desktop-error-raspberry-pi
扫码添加k3s中文社区助手
加入官方中文技术社区
官网:https://k3s.io