首页 > 解决方案 > 如何以最佳方式在多台物理机上部署 Kubernetes 集群?

问题描述

我最近完成了一个项目,我创建了一个由多个 docker 容器组成的应用程序。该应用程序的目的是收集一些数据并将其保存到数据库中,并允许用户通过简单的 Web gui 进行交互。该应用程序托管在四个不同的 Raspberry Pi 上,并且可以通过 api 从所有物理机器中收集数据。此外,您还可以执行一些简单的机器学习任务,例如计算 Pi 传感器数据中的异常情况。

现在我正在尝试下一步,并使用 kubernetes 进行一些负载平衡和远程更新。我的主要目标是从我的主节点远程更新所有覆盆子。从理论上讲,这将是一个非常方便的功能。我还想在集群内共享 Pi 的资源以进行计算。

我阅读了很多关于 Kubernets、Minikube、K3、Kind 以及所有设置 Kubernetes 集群的不同方法的文章,但我觉得我错过了“最后一块拼图”。

因此,据我了解,我需要一种方法来设置本地(因为所有机器都放在我的桌子上/不需要云)多节点集群。我的主节点(理想情况下)是我的笔记本电脑,在虚拟机中运行 Ubuntu。我的 rasberry 将是我的奴隶/工作节点。如果我想更新我的集群,我可以使用 kubernetes 远程更新功能。

所以我的问题是:在 kubernetes 集群中使用几个树莓作为节点并从一个主节点(笔记本电脑)管理它们是否有意义,您对实现此设置的方式有任何建议吗?

我通常不喜欢那些我自己不包含任何特定代码或问题的问题,但觉得一个简单的提示可以加速我的项目值得注意。如果发错地方,请随时删除此问题。

最好的祝福

标签: dockerkubernetesraspberry-picluster-computingminikube

解决方案


您没有提到您正在使用哪些 rpi 模型,但我假设您没有使用 rpi zeros。

我的主要目标是从我的主节点远程更新所有覆盆子。

假设您的意思是更新在 rpi 上安装的 kubernetes 中运行的应用程序,然后继续阅读。否则忽略我写的所有内容,您可能需要的是 ansible 或其他类似的配置/配置管理/应用程序部署工具。

现在回答你的问题:

在 kubernetes 集群中使用几个树莓作为节点是否有意义

是的,这就是人们创建 k3s 的原因,所以这样的设置可以使用更少的资源。

并从一个主节点(笔记本电脑)管理它们

假设您将使用它来学习目的,那为什么不呢。这是可能的,但请注意,当主节点关闭时(例如,当您关闭笔记本电脑时),所有集群都会关闭(或者至少是 api-server 通信,因此您将无法更改集群的状态)。还要确保您为 VM 使用桥接网络接口,以便它在本地网络中作为独立实例可见。

您对实现此设置的方式有什么建议吗?

在您的情况下,在所有节点上安装 k3s 将是最简单的。互联网上有很多资源解释了如何实现它。


我想解释的最后一件事是更新。

说到 kubernetes 更新,您需要知道 kubernetes 不会自动更新自身。您需要显式更新它。新的 k8s 版本每 3 个月发布一次,有时会“破坏”一些东西并且不可能向后兼容(所以在更新东西之前总是阅读变更日志,因为除非你之前备份了 etcd 集群,否则可能无法回滚)。

说到更新应用程序 - 要运行您的应用程序,您只需将描述您的应用程序的 yaml 文件发送到 k8s,它会处理其余的。因此,如果您想更新您的应用程序,只需将容器映像上的标签更新为较新的版本,k8s 将处理更新。在此处阅读有关 k8s 更新策略的更多信息。


推荐阅读