docker - 如何以最佳方式在多台物理机上部署 Kubernetes 集群?
问题描述
我最近完成了一个项目,我创建了一个由多个 docker 容器组成的应用程序。该应用程序的目的是收集一些数据并将其保存到数据库中,并允许用户通过简单的 Web gui 进行交互。该应用程序托管在四个不同的 Raspberry Pi 上,并且可以通过 api 从所有物理机器中收集数据。此外,您还可以执行一些简单的机器学习任务,例如计算 Pi 传感器数据中的异常情况。
现在我正在尝试下一步,并使用 kubernetes 进行一些负载平衡和远程更新。我的主要目标是从我的主节点远程更新所有覆盆子。从理论上讲,这将是一个非常方便的功能。我还想在集群内共享 Pi 的资源以进行计算。
我阅读了很多关于 Kubernets、Minikube、K3、Kind 以及所有设置 Kubernetes 集群的不同方法的文章,但我觉得我错过了“最后一块拼图”。
因此,据我了解,我需要一种方法来设置本地(因为所有机器都放在我的桌子上/不需要云)多节点集群。我的主节点(理想情况下)是我的笔记本电脑,在虚拟机中运行 Ubuntu。我的 rasberry 将是我的奴隶/工作节点。如果我想更新我的集群,我可以使用 kubernetes 远程更新功能。
所以我的问题是:在 kubernetes 集群中使用几个树莓作为节点并从一个主节点(笔记本电脑)管理它们是否有意义,您对实现此设置的方式有任何建议吗?
我通常不喜欢那些我自己不包含任何特定代码或问题的问题,但觉得一个简单的提示可以加速我的项目值得注意。如果发错地方,请随时删除此问题。
最好的祝福
解决方案
您没有提到您正在使用哪些 rpi 模型,但我假设您没有使用 rpi zeros。
我的主要目标是从我的主节点远程更新所有覆盆子。
假设您的意思是更新在 rpi 上安装的 kubernetes 中运行的应用程序,然后继续阅读。否则忽略我写的所有内容,您可能需要的是 ansible 或其他类似的配置/配置管理/应用程序部署工具。
现在回答你的问题:
在 kubernetes 集群中使用几个树莓作为节点是否有意义
是的,这就是人们创建 k3s 的原因,所以这样的设置可以使用更少的资源。
并从一个主节点(笔记本电脑)管理它们
假设您将使用它来学习目的,那为什么不呢。这是可能的,但请注意,当主节点关闭时(例如,当您关闭笔记本电脑时),所有集群都会关闭(或者至少是 api-server 通信,因此您将无法更改集群的状态)。还要确保您为 VM 使用桥接网络接口,以便它在本地网络中作为独立实例可见。
您对实现此设置的方式有什么建议吗?
在您的情况下,在所有节点上安装 k3s 将是最简单的。互联网上有很多资源解释了如何实现它。
我想解释的最后一件事是更新。
说到 kubernetes 更新,您需要知道 kubernetes 不会自动更新自身。您需要显式更新它。新的 k8s 版本每 3 个月发布一次,有时会“破坏”一些东西并且不可能向后兼容(所以在更新东西之前总是阅读变更日志,因为除非你之前备份了 etcd 集群,否则可能无法回滚)。
说到更新应用程序 - 要运行您的应用程序,您只需将描述您的应用程序的 yaml 文件发送到 k8s,它会处理其余的。因此,如果您想更新您的应用程序,只需将容器映像上的标签更新为较新的版本,k8s 将处理更新。在此处阅读有关 k8s 更新策略的更多信息。
推荐阅读
- c# - 使用 JSON.NET 进行递归 JSON 解析
- swift - 如何使用 SwiftUI 使行用一些填充填充屏幕宽度?
- unit-testing - 为 http.post 创建单元测试的问题
- python-3.x - 如何将函数的推导替换为值?
- excel - 如何从分号分隔的字符串中提取第一个和最后一个数字?
- css - 带有 CSS 的 div 类选择器
- sql - 使用 group by 获取类别计数,但输出表中缺少一个类别,因为数据不可用
- sql - 相对于表中相似行的数量为行添加计数
- python - 如何在 pytest 中检索功能测试结果以写入我自己的日志文件
- python - 将掩码应用于张量时 Lambda 层中的 NoneType 错误