在很长一段时间里,我对于在树莓派上搭建Kubernetes集群极为感兴趣。在网络上找到一些教程并且跟着实操,我已经能够将Kubernetes安装在树莓派上,并在三个Pi集群中工作。然而,在master节点上对于RAM和CPU的要求已经超过了我的树莓派所能提供的,因此在执行Kubernetes任务时性能并不优异。这也使得就地升级Kubernetes成为不可能。
所以,我看到业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs推出轻量级Kubernetes发行版K3s时,十分兴奋,它专为资源受限场景而设计,还针对ARM处理器进行了优化,这使得在树莓派上运行Kubernetes更加可行。在本文中,我将使用K3s和树莓派创建一个Kubernetes集群。
前期准备要创建本文中的Kubernetes集群,我们需要准备:
至少一个树莓派(带有SD卡和电源适配器)
以太网电缆
将我们所有的树莓派连接在一起的交换机或路由器
我将从网络上安装K3s,所以需要通过路由器访问互联网。
集群架构对于这一集群,我们将使用3个树莓派。第一个树莓派我把它命名为kmaster,并分配一个静态IP 192.168.0.50(因为我的本地网络是192.168.0.0/24)。第一个worker节点(也就是第二个Pi),我们称它为knode1并分配IP 192.168.0.51。最后一个worker节点,我们称它为knode2并分配IP 192.168.0.52。
当然如果你的网络和我不一样,可以使用你能够获得网络IP。只要在本文使用IP的任何地方替换你自己的值即可。
为了不必再通过IP引用每个节点,我们将其主机名添加到PC上的/ etc / hosts文件中。
echo -e "192.168.0.50\tkmaster" | sudo tee -a /etc/hosts echo -e "192.168.0.51\tknode1" | sudo tee -a /etc/hosts echo -e "192.168.0.52\tknode2" | sudo tee -a /etc/hosts 安装master节点现在我们已经准备好,可以开始安装master节点。第一步,安装最新的Raspbian镜像。我之前写过一篇详细的文章介绍为什么需要最新的镜像,感兴趣的朋友可以在访问链接查看:
https://carpie.net/articles/headless-pi-with-static-ip-wired-edition
接下来,开始安装Raspbian,启用SSH server,为kmaster设置主机名称并分配静态IP 192.168.0.50。
既然Raspbian已经在master节点上安装完毕,让我们启用我们的master Pi并通过ssh进入它:
ssh pi@kmaster现在我们要准备安装K3s。在master Pi上运行:
curl -sfL https://get.k3s.io | sh -命令执行完毕之后,我们就有了一个已经设置好的单节点集群并且正在运行中!让我们检查一下。依旧是在这个Pi上,运行:
sudo kubectl get nodes你应该看到类似以下内容:
NAME STATUS ROLES AGE VERSION kmaster Ready master 2m13s v1.14.3-k3s.1 提取join token我们想要添加一对worker节点。在这些节点上安装K3s,我们需要一个join token。Join token存在于master节点的文件系统上。让我们复制并将它保存在某个地方,稍后我们可以获取它:
sudo cat /var/lib/rancher/k3s/server/node-token 安装worker节点为两个worker节点获取一些SD卡,并在每个节点上安装Raspbian。对于其中一个,将主机名设置为knode1并分配IP 192.168.0.51。对于另一个,将主机名设置为knode2并分配IP 192.168.0.52。现在,让我们安装K3s。
启动你的第一个worker节点,并通过ssh进入它:
ssh pi@knode1在这个Pi上,我们将像之前一样安装K3s,但我们将给安装程序额外的参数,让它了解我们正在安装一个worker节点并且要加入一个现有集群:
curl -sfL | K3S_URL=https://192.168.0.50:6443 \ K3S_TOKEN=join_token_we_copied_earlier sh -使用从上个部分提取出来的join token替换join_token_we_copied_earlier。为knode2重复这些步骤。
从我们的PC访问集群每当我们要检查或修改集群时,都必须通过SSH到master节点来运行kubectl,这很烦人。因此,我们像将kubectl放在我们的PC上,但是首先让我们从master节点获取所需的配置信息。通过SSH进入kmaster,并运行:
sudo cat /etc/rancher/k3s/k3s.yaml复制配置信息并返回到你的PC。为配置创建一个目录:
mkdir ~/.kube保存复制的配置为~/.kube/config。现在编辑文件并更改:
server: https://localhost:6443改为:
server: https://kmaster:6443为了安全起见,请将文件的读/写权限限制为你自己:
chmod 600 ~/.kube/config现在让我们在我们的PC上安装kubectl(如果你还没有)。Kubernetes网站上有针对各种平台执行此操作的说明。由于我正在运行Linux Mint(一个Ubuntu衍生版本),因此我将在此处显示Ubuntu的说明:
sudo apt update && sudo apt install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | \ sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt update && sudo apt install kubectl