在 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 卡,并在每个 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 允许这样做,但不直接提供此类服务。 Rancher Labs 默认安装 Traefik 是一项不错的举措。 这使得默认的 k3s 安装完全完整且可立即使用!

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

接下来要阅读什么
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 模式下使用嵌入式 DB(实验性)。
不幸的是,这占用了 30% 的 CPU 和 50% 的 RAM,所以我不得不迅速退出。

也许有一天。

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

谢谢!

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

回复 ,作者是 JamesF

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

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

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

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

我还要更多在天空中的 RPi,拜托。
PiRexTech

回复 ,作者是 carpie

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

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