在 Raspberry Pi 上使用 k3s 运行 Kubernetes

按照这些简单易懂的说明创建您自己的三节点 Kubernetes 集群。
210 位读者喜欢这篇文章。
How Kubernetes became the solution for migrating legacy applications

Opensource.com

长期以来,我对使用一堆廉价的 Raspberry Pi 构建 Kubernetes 集群非常感兴趣。 按照网络上各种教程的步骤,我成功地在一个由三台 Pi 组成的集群中安装并运行了 Kubernetes。 然而,主 节点 上的 RAM 和 CPU 需求使我的 Pi 不堪重负。 这导致在执行各种 Kubernetes 任务时性能不佳。 这也使得 Kubernetes 的就地升级变得不可能。

因此,我非常高兴看到 k3s 项目。 K3s 被誉为用于资源受限环境的轻量级 Kubernetes。 它还针对 ARM 处理器进行了优化。 这使得运行基于 Raspberry Pi 的 Kubernetes 集群变得更加可行。 事实上,我们将在本文中创建一个。

所需材料

要创建本文中描述的 Kubernetes 集群,我们需要:

  • 至少一台 Raspberry Pi(带有 SD 卡和电源适配器)
  • 以太网线
  • 交换机或路由器,用于连接所有 Pi

我们将从互联网安装 k3s,因此它们需要能够通过路由器访问互联网。

我们的集群概述

对于此集群,我们将使用三台 Raspberry Pi。 第一个我们将命名为 kmaster,并分配静态 IP 地址 192.168.0.50(因为我们的本地网络是 192.168.0.0/24)。 第一个工作节点(第二个 Pi),我们将命名为 knode1,并分配 IP 地址 192.168.0.51。 最后一个工作节点我们将命名为 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

安装主节点

现在我们准备安装主节点。 第一步是安装最新的 Raspbian 镜像。 我不打算在这里解释这一点,但我有一篇详细文章,如果您需要,可以参考如何执行此操作。 因此,请安装 Raspbian,启用 SSH 服务器,将主机名设置为 kmaster,并分配静态 IP 地址 192.168.0.50。

现在 Raspbian 已安装在主节点上,让我们启动我们的主 Pi 并 ssh 进入它

ssh pi@kmaster

现在我们准备安装 k3s。 在主 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

提取加入令牌

我们想要添加几个工作节点。 在工作节点上安装 k3s 时,我们将需要一个加入令牌。 加入令牌存在于主节点的文件系统中。 让我们复制它并将其保存在我们可以稍后访问的地方

sudo cat /var/lib/rancher/k3s/server/node-token

安装工作节点

为两个工作节点准备一些 SD 卡,并在每个节点上安装 Raspbian。 对于其中一个,将主机名设置为 knode1 并分配 IP 地址 192.168.0.51。 对于另一个,将主机名设置为 knode2 并分配 IP 地址 192.168.0.52。 现在,让我们安装 k3s

启动您的第一个工作节点并 ssh 进入它

ssh pi@knode1

在 Pi 上,我们将像以前一样安装 k3s,但我们将为安装程序提供额外的参数,以告知它我们正在安装工作节点,并且我们想要加入现有集群

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 到主节点来运行 kubectl,这会很烦人。 因此,我们希望在我们的 PC 上安装 kubectl。 但首先,让我们从我们的主节点获取我们需要的配置信息。 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

恭喜! 您已经拥有一个可正常运行的 3 节点 Kubernetes 集群!

k3s 奖励

如果您运行 kubectl get pods --all-namespaces,您将看到一些额外的 pod 用于 Traefik。 Traefik 是一个反向代理和负载均衡器,我们可以使用它将流量从单个入口点定向到我们的集群中。 Kubernetes 允许这样做,但不直接提供此类服务。 默认安装 Traefik 是 Rancher Labs 的一个贴心之处。 这使得默认的 k3s 安装完全完整且可立即使用!

我们将在未来的文章中探讨如何通过 Kubernetes ingress 规则使用 Traefik,并将各种好东西部署到我们的集群中。 敬请期待!

接下来阅读什么
User profile image.
Lee 首先是基督的追随者、丈夫和父亲,其次是软件工程师,并且内心深处是一个修补匠/创客。

10 条评论

K3s 是个好东西,我在几个小型 VPS 上使用了它。 现在我需要弄清楚如何将其与 Let's Encrypt 集成 - 您知道这样的解决方案吗?

是的! 请关注这里,我关于这个主题的文章将于 3 月 12 日发布!

感谢您的这篇文章。 这太棒了。

关于 Kubernetes 的精彩信息。

到目前为止,我还没有成功地将工作节点与主节点连接起来。 之前尝试过 Pi 2,现在使用 Pi 4。 两种都没有成功,尽管我能够解决 Pi 4 上的一个最初的问题,这个问题曾经让我困扰在 Pi 2 上。

我希望我能弄清楚为什么! 我可以去哪里开始与一些知识渊博的人进行对话!

附注:感谢您让我知道这确实是可能的! 到目前为止,我找到的所有线索都是安装旧版本的 k3s。 :(

@sgtrock,这似乎很奇怪。 如果您有 Twitter 帐户,请在 Twitter 上给我发消息 (@elcarpie),或者在 YouTube 视频的评论中回复具体信息,我会看看我是否可以提供帮助。

回复 作者:sgtrock

我尝试在 3 个 × Rock64 1GB 上运行它,但在 HA 模式下使用嵌入式数据库(实验性的)。
不幸的是,这占用了 30% 的 CPU 和 50% 的 RAM,所以我不得不赶紧放弃。

也许有一天。

我可能错过了... 您能说明您用于初始设置的 Pi 版本吗? 哪些节点角色需要更多功率? 我是否可以假设工作节点是那些可以使用更多 ram/cpu 功率的节点?

谢谢!

最初我使用的是带有 1GB RAM 的 Raspberry Pi 3B。 工作节点很好。 主节点是受影响的节点。 我在这些节点上使用了标准的裸机 Kubernetes 安装。 我让事情“正常工作”,但部署,有时甚至对 kubectl 的响应都非常缓慢,有时部署根本不起作用。 我有一个屏幕截图,显示我 ssh 进入主节点的位置。 它的正常运行时间为 23 天,使用了 969M 内存中的 913M,负载平均值为 117.08 92.24 73.08。 :o 我认为 RAM 问题可能是问题的根源。 具有 4G RAM 的 Raspberry Pi 4 设置可能还可以,但我没有尝试过。 然而,k3s 在 3B 上运行良好。

回复 作者:JamesF

我很高兴地报告,我一直在尝试找到一种方法来使用一些备用的 RPi-3B 构建我的第一个集群。 在一周的大部分时间里,我一个接一个地跟随兔子洞,但没有成功。 这个帖子解决了我的问题。 我一步一步地按照说明操作,并对通过 ssh 进行远程操作的 x86 笔记本电脑上的 Raspbian 进行了诉讼。

我的设备包含一台从 WD 314GB PiDrive 启动的 RPi-3B+(运行 Buster Standard)和四台从三星 EVO 32 GB SD 卡启动的 RPi-3B 客户端(运行 Buster Lite)。 我花了一些时间,特别注意手动编辑并纠正了错别字,我甚至休息了一下吃午饭! 但是,我仍然在几个小时内完成了这些步骤。 为什么您的帖子没有在上周二出现!! :)

现在一切都很好。 非常感谢您。 现在我可以继续学习,而不是安装在其他站点找到的每个版本的失败和不完整的步骤

哦,我有没有提到... 谢谢您?

我想要更多 RPi-in-the-Sky,拜托。
PiRexTech

回复 作者:carpie

到目前为止,这是我尝试过的最快、最简单的选择。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.