如何使用Kops,Cluster-Autoscaler自动调整K8s群集的大小以动态增加Masters

时间:2018-12-17 10:03:14

标签: amazon-web-services kubernetes autoscaling kops

我们已使用kops工具(https://github.com/kubernetes/kops)并根据AWS帖子(https://aws.amazon.com/blogs/compute/kubernetes-clusters-aws-kops/)和其他资源在AWS账户的EC2计算机上配置了Kubernetes集群。

我们想要设置一个K8s主节点和从节点的集群,以便:

  1. 它将根据系统负载自动调整大小(主节点和从节点)。
  2. 以多可用区模式运行,即在同一区域中的每个可用区(可用区)中至少有一个主机和一个从机,例如us-east-1a,us-east-1b,us-east-1c等。

我们尝试通过以下方式配置集群以实现上述目标。

  1. 使用以下配置在kops上在AWS EC2机器上创建K8s集群:节点数= 3,主数= 3,区域= us-east-1c,us-east-1b,us-east-1a。我们观察到,创建了一个具有8个主节点和3个从节点的K8s集群。主服务器和从属服务器分别位于3个可用区中。

  2. 然后,我们尝试使用(https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-run-on-master.yaml)来调整集群中节点/从节点的大小。我们将node_asg_min设置为3,将node_asg_max设置为5。当我们增加从站的工作负载以触发自动扩展策略时,我们看到产生了其他(在设置过程中创建了默认的3之后)从站节点,并且它们确实加入了聚集在各个可用区中。这按预期工作。毫无疑问。

  3. 我们还希望设置集群,以便根据系统负载来增加主服务器的数量。有什么办法可以做到这一点?我们尝试了几种方法,结果在下面共享:

A)我们不确定集群自动缩放器是否在此有所帮助,但是仍然尝试使用(https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-run-on-master.yaml)来调整集群中Master的大小。这在创建新集群时很有用,但在调整现有集群中的主服务器数量时却没有用。我们没有找到一个参数来指定Master的node_asg_min,node_asg_max的方式,就像为从属节点一样。有什么办法可以做到这一点?

B)我们将ASG(自动缩放组)中的MIN计数从1增加到3,与每个主设备的三个IG(实例组)之一相关联。我们发现创建了新实例。但是,他们没有加入主集群。有什么办法可以做到这一点?

请问我们如何正确执行操作的步骤和资源,以便我们可以配置要根据系统负载自动调整大小且处于多可用区模式的主设备数量?

亲切的问候, 沙什

2 个答案:

答案 0 :(得分:2)

无需扩展Master个节点。

  

主组件提供集群的控制平面。主组件对群集进行全局决策(例如,调度),并检测和响应群集事件(在不满足复制控制器的“副本”字段时启动新的Pod)。

     

主组件可以在集群中的任何计算机上运行。但是,为简单起见,设置脚本通常在同一台计算机上启动所有主组件,并且不在该计算机上运行用户容器。有关多主虚拟机设置的示例,请参见Building High-Availability Clusters

主节点包含以下组件:

kube-apiserver

  

主机上的组件,用于公开Kubernetes API。它是Kubernetes控制平面的前端。

etcd

  

一致且高度可用的键值存储用作所有集群数据的Kubernetes的后备存储。

kube-scheduler

  

主节点上的组件,该组件监视未分配节点的新创建的Pod,并选择要在其上运行的节点。

kube-controller-manager

  

运行controllers的主服务器上的组件。

cloud-controller-manager

  

运行与基础云提供商交互的控制器。 cloud-controller-manager二进制文件是Kubernetes 1.6版中引入的alpha功能。

有关详细说明,请阅读Kubernetes Components文档。 另外,如果您正在考虑HA,可以阅读Creating Highly Available Clusters with kubeadm

答案 1 :(得分:0)

我认为您的假设是,与kubernetes节点类似,高手负责彼此之间的工作。事实并非如此,因为主人的主要任务是彼此达成共识。这是通过etcd(分布式键值存储)完成的。维护这样的存储的问题对于一台机器来说很容易,但是随着添加的机器越多,这个问题就越难解决。

添加主服务器的优势在于,能够以使所有主服务器更胖(更多的CPU / RAM ...)为代价,使更多的主服务器故障幸存下来。