在同一台服务器上运行 Kubernetes 主节点和节点(在 Kubernetes 主节点上调度 pod)

lai*_*son 2 kubernetes

如果您在 Kubernetes master 上运行 taint 命令:

kubectl taint nodes --all node-role.kubernetes.io/master-
Run Code Online (Sandbox Code Playgroud)

它允许您安排 pod。所以它充当节点和主节点。

我试图运行 3 个服务器集群,其中所有节点都有两个角色。从第一眼看,我没有注意到任何问题。

你认为现在这个解决方案可以用来运行生产服务的小集群吗?如果不是,真正的缺点是什么?与标准设置相比,此设置在哪些情况下会失败?

假设 etcd 在所有三台服务器上运行。

谢谢

Dav*_*aze 7

运行单独的主节点和工作节点的标准原因是为了防止繁忙的工作负载干扰集群。

假设您有建议的三个节点。一个最终运行一个数据库;一个运行 Web 服务器;第三个运行一个异步工作 pod。突然间,您的系统收到了大量流量,Rails 应用程序使用了 100% CPU,Sidekiq 工作程序正在使用 100% CPU,MySQL 数据库正试图处理一些复杂的连接,既占用高 CPU 资源,也在使用所有可用的磁盘带宽。您运行kubectl get pods:哪个节点实际上能够为这些请求提供服务?如果您的应用程序触发了 Linux 内存不足杀手,您能否保证它不会杀死etcdkubelet,这两者对集群的工作都至关重要?

如果它在云环境中运行,您通常可以使用较小(更便宜)的节点作为主节点。(Kubernetes 本身不需要大量的处理能力,但它确实需要它可靠地可用。)

  • 谢谢,这个答案足够广泛了。假设我使用 resources.limit 来限制每个 pod 的 RAM 和 CPU 以及裸机服务器上的大量 RAM、应用程序的单独磁盘、更广泛但合理的用户 ulimit 参数(从 Linux 主机角度来看,容器可以使用不同的用户,因此它们被隔离)和监控到位。我们是否看到任何损坏的可能性,特别是从 k8s 组件的角度来看,例如“etcd”和“kubelet”? (2认同)
  • 使用了半年,没有发现没有节点的生活有什么问题。如果您知道如何限制工作负载,我不会将此解决方案归类为有问题的。这些是可以修复的资源管理和安全问题。我仍然同意,对于大型产品,在生产中分离节点是有意义的,并且如果相对而言/节省时间,通常不会花费更多。 (2认同)