长期以来,我对用一堆廉价的树莓派构建一个 Kubernetes 集群很感兴趣。按照网上各种教程的步骤,我成功地在一个三节点树莓派集群中安装并运行了 Kubernetes。然而,主 节点上的 RAM 和 CPU 要求压垮了我的树莓派。这导致在执行各种 Kubernetes 任务时性能不佳。这也使得 Kubernetes 的就地升级变得不可能。
因此,我很高兴看到 k3s 项目。K3s 被誉为轻量级 Kubernetes,用于资源受限的环境。它也针对 ARM 处理器进行了优化。这使得运行基于树莓派的 Kubernetes 集群变得更加可行。事实上,我们将在本文中创建一个。
所需材料
要创建本文描述的 Kubernetes 集群,我们需要
- 至少一台树莓派(带 SD 卡和电源适配器)
- 以太网电缆
- 一个交换机或路由器,用于连接所有树莓派
我们将从互联网安装 k3s,因此它们需要能够通过路由器访问互联网。
集群概述
对于这个集群,我们将使用三个树莓派。第一个命名为 **kmaster**,并分配一个静态 IP 地址 192.168.0.50(因为我们的本地网络是 192.168.0.0/24)。第一个 worker 节点(第二个树莓派)命名为 **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 镜像。我不会在这里解释这一点,但是如果您需要,我有一篇详细文章介绍如何操作。所以请安装 Raspbian,启用 SSH 服务器,将主机名设置为 **kmaster**,并分配一个静态 IP 地址 192.168.0.50。
现在 Raspbian 已经安装在 master 节点上,让我们启动我们的 master 树莓派并使用 **ssh** 连接到它
ssh pi@kmaster
现在我们准备安装 **k3s**。在 master 树莓派上,运行
curl -sfL https://get.k3s.io | sh -
当命令完成时,我们已经设置并运行了一个单节点集群!让我们来看看。仍然在树莓派上,运行
sudo kubectl get nodes
您应该会看到类似于以下的内容
NAME STATUS ROLES AGE VERSION
kmaster Ready master 2m13s v1.14.3-k3s.1
提取加入令牌
我们要添加几个 worker 节点。在这些节点上安装 **k3s** 时,我们需要一个加入令牌。加入令牌存在于 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
在树莓派上,我们将像以前一样安装 **k3s**,但我们将为安装程序提供额外的参数,以使其知道我们正在安装 worker 节点,并且我们希望加入现有集群
curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \
K3S_TOKEN=join_token_we_copied_earlier sh -
将 **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
如果您不熟悉,上面的命令会为 Kubernetes 添加一个 Debian 存储库,获取其 GPG 密钥以确保安全,然后更新软件包列表并安装 **kubectl**。现在,我们将通过标准软件更新机制收到有关 **kubectl** 的任何更新的通知。
现在我们可以从我们的 PC 检查我们的集群了!运行
kubectl get nodes
您应该看到类似以下的内容
NAME STATUS ROLES AGE VERSION
kmaster Ready master 12m v1.14.3-k3s.1
knode1 Ready worker 103s v1.14.3-k3s.1
knode1 Ready worker 103s v1.14.3-k3s.1
恭喜!您拥有一个工作的三节点 Kubernetes 集群!
k3s 的奖励
如果您运行 **kubectl get pods --all-namespaces**,您将看到 Traefik 的一些额外的 pod。 Traefik 是一个反向代理和负载均衡器,我们可以使用它从单个入口点将流量定向到我们的集群中。 Kubernetes 允许这样做,但不直接提供此类服务。默认情况下安装 Traefik 是 Rancher Labs 的一个不错的举措。这使得默认的 **k3s** 安装完全完整且可立即使用!
我们将在未来的文章中探索通过 Kubernetes **ingress** 规则使用 Traefik,并将各种好东西部署到我们的集群中。敬请关注!
10 条评论