使用 k3s 在树莓派上运行 Kubernetes

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

Opensource.com

长期以来,我对用一堆廉价的树莓派构建一个 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,并将各种好东西部署到我们的集群中。敬请关注!

接下来阅读什么
User profile image.
Lee 首先是基督徒、丈夫和父亲,其次是软件工程师,最后是一位修补匠/创造者。

10 条评论

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

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

感谢您的帖子。太棒了。

关于 Kubernetes 的精彩信息。

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

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

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

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

回复 sgtrock

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

也许有一天。

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

谢谢!

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

回复 JamesF

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

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

现在一切都好。非常感谢您。现在我可以继续学习,而不是安装在其他网站上找到的每一个不成功和不完整的步骤的变体

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

我还要更多那个“天空中的树莓派”,谢谢。
PiRexTech

回复 ,作者是 carpie

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

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© 2025 open-source.net.cn. All rights reserved.