Kubernetes单点故障和负载平衡

时间:2016-06-20 18:52:04

标签: tomcat nginx load-balancing kubernetes high-availability

我对Kubernetes几乎没有基本的疑问。

考虑以下部署。第7层负载均衡器将通过Kubernetes服务将请求路由到NGINX服务器,NGINX将路由到Tomcat,Kubernetes服务。

enter image description here

查询:

  1. 如果Kubernetes服务于单点故障,或者因为配置了kube-proxy且服务只是虚拟层的多个pod支持它,那么它不能被视为单点故障?

  2. 上图是单个Kubernetes集群,这是一个单点故障,还是我应该为系统规划多个Kubernetes集群,我需要支持HA,停机时间为零。

  3. 上图利用了Kubernetes服务,默认情况下仅支持L4负载均衡(仅限循环)。因此说tomcat服务器负载很重,循环不会根据使用情况均匀分配负载。如何根据系统资源消耗或使用情况实现负载分配或不实现。上述拓扑中的开放连接?

  4. 注意:没有。上图中的矩形框仅是代表性的。我将在每层部署10到20个pod以满足我的工作量。

2 个答案:

答案 0 :(得分:0)

  
      
  1. 如果Kubernetes服务单点故障,或者因为配置了kube-proxy且服务只是虚拟层的多个pod支持它,那么它不能被视为单点故障?
  2.   

我认为你的后一种解释是正确的。

  
      
  1. 上图是单个Kubernetes集群,这是单点故障,还是我应该为系统规划多个Kubernetes集群,我需要在零停机时间内支持HA。
  2.   

k8s群集不是HA,因为主节点是单点故障。主节点上的重要组件包括apiserver和控制器管理器,如果没有它们,则无法创建更多的pod或服务。也就是说,即使主节点关闭,您部署的服务也应该继续工作。

有关如何在HA模式下设置k8s群集的指南,我还没有亲自尝试过:http://kubernetes.io/docs/admin/high-availability/。还有Ubernetes (WIP),它允许您在云提供商之间联合多个k8群集。

  
      
  1. 上图利用了Kubernetes服务,默认情况下仅支持L4负载均衡(仅限循环)。
  2.   

事实并非如此,kubernetes拥有名为ingress的beta功能,它支持L7负载均衡,看看它是否有帮助http://kubernetes.io/docs/user-guide/ingress/:)

答案 1 :(得分:0)

在下面的Kubernetes已成功部署了50多个pods(计划在不久的将来扩展到250+)的内部部署,这是我从经验和我的团队聚集的观察结果:

  
      
  1. 如果Kubernetes服务于单点故障或因为它是   由配置了kube-proxy的多个pod支持   服务只是一个虚拟层,它不能被视为单一的   失败点?
  2.   

如果负载均衡器(LB)映射到单个节点IP,那将是单点故障,因为该VM /物理服务器的故障将导致整个应用程序崩溃。因此,将LB指向至少2个不同的节点IP。

  
      
  1. 上图是单个Kubernetes集群,这是一个单点   失败或我应该为系统规划多个Kubernetes集群   我需要在没有停机的情况下支持HA。
  2.   

使用负载均衡器配置HA中的Kubernetes

  
      
  1. 上图利用了Kubernetes服务,默认情况下仅支持L4负载均衡(仅限循环)。因此说一个tomcat   服务器负载很重,循环不会均匀分配负载   根据用途。如何实现基于系统的负载分配   资源消耗或使用或否。在上面的开放连接   拓扑结构?
  2.   

是的,目前仅支持循环负载均衡。 Ingress处于测试阶段,在我上次检查时尚未准备好生产。 NGINX +可用于负载平衡,忽略Kubernetes负载平衡,并使用Kubernetes API,可以对其进行配置,以便在运行时在NGINX +中更新或删除Tomcat Pod,而不会出现任何停机。 (我还没有尝试过这个,但如果当前的设置会引发任何挑战,将来可能会考虑)

参考:https://www.nginx.com/blog/load-balancing-kubernetes-services-nginx-plus/