使用 k3s 在树莓派上运行 Kubernetes

按照这些易于理解的说明创建您自己的三节点 Kubernetes 集群。
210 位读者喜欢这个。
How Kubernetes became the solution for migrating legacy applications

Opensource.com

长期以来,我对使用一堆廉价的树莓派构建 Kubernetes 集群很感兴趣。按照网络上的各种教程,我能够在三个 Pi 集群中安装并运行 Kubernetes。但是,主 节点上的 RAM 和 CPU 要求压垮了我的 Pi。这导致执行各种 Kubernetes 任务时性能不佳。这也使得 Kubernetes 的原地升级变得不可能。

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

所需材料

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

  • 至少一个树莓派(带有 SD 卡和电源适配器)
  • 以太网电缆
  • 交换机或路由器,用于将所有 Pi 连接在一起

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

我们的集群概述

对于这个集群,我们将使用三个树莓派。第一个我们将命名为 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 会很烦人。所以,我们想把 kubectl 放在我们的 PC 上。但首先,让我们从我们的主节点获取我们需要的配置信息。 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,您将看到一些额外的 Traefik pod。Traefik 是一个反向代理和负载均衡器,我们可以用它来从单个入口点将流量定向到我们的集群中。Kubernetes 允许这样做,但不直接提供这样的服务。默认情况下安装 Traefik 是 Rancher Labs 的一个很好的举措。这使得默认的 k3s 安装完全完整并且可以立即使用!

我们将在未来的文章中探索使用 Traefik 通过 Kubernetes ingress 规则并将各种好东西部署到我们的集群中。敬请关注!

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

10 条评论

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

是的!请密切关注 3 月 12 日发布的关于该主题的文章!

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

关于 Kubernetes 的重要信息。

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

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

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

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

回复 作者 sgtrock

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

也许有一天。

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

谢谢!

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

回复 作者 JamesF

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

我的设备包含一个 RPi-3B+ 作为 Master,从 WD 314GB PiDrive 运行 Buster Standard 启动,以及四个 RPi-3B 客户端,从运行 Buster Lite 的 Samsung EVO 32 GB SD 卡启动。我不慌不忙,特别注意手动编辑并纠正了拼写错误,甚至还休息了一下吃午饭!但是,我仍然在几个小时内完成了这些步骤。为什么你的点击没有在上周二出现!!:)

一切都好了。非常感谢。现在我可以继续学习,而不是安装其他网站上那些不成功和不完整的步骤的各种变体了。

哦,我提到了吗... 谢谢你?

请再来一些 RPi-in-the-Sky。
PiRexTech

回复 ,作者是 carpie

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

Creative Commons License此作品已根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© 2025 open-source.net.cn. All rights reserved.