Kubernetes cluster-autoscaler 解析

版权声明:本文为博主原创文章,转载请注明来自 http://blog.csdn.net/hello2mao https://blog.csdn.net/hello2mao/article/details/80418625

一、什么是cluster-autoscaler

CA( cluster-autoscaler)是用来弹性伸缩kubernetes集群的。我们在使用kubernetes集群经常问到的一个问题是,我应该保持多大的节点规模来满足应用需求呢? cluster-autoscaler的出现解决了这个问题,它可以自动的根据部署的应用所请求的资源量来动态的伸缩集群。

二、CA架构

CA由以下几个模块组成:

  • autoscaler:核心模块,负责整体扩缩容功能
  • Estimator:负责评估计算扩容节点
  • Simulator:负责模拟调度,计算缩容节点
  • CA Cloud-Provider:与云交互进行节点的增删操作。社区目前仅支持AWS和GCE,其他云厂商需要自己实现CloudProvider和NodeGroup相关接口。
    CA的架构如下图所示:
    CA架构

三、其他细节

3.1 什么时候CA改变集群大小

扩容: 由于资源不足,pod调度失败,即有pod一直处于Pending状态。
缩容:node的资源利用率较低时,且此node上存在的pod都能被重新调度到其他node上运行。

3.2 什么样的节点不会被CA删除

  • 节点上有pod被PodDisruptionBudget控制器限制。
  • 节点上有命名空间是kube-system的pods。
  • 节点上的pod不是被控制器创建,例如不是被deployment, replica set, job, stateful set创建。
  • 节点上有pod使用了本地存储
  • 节点上pod驱逐后无处可去,即没有其他node能调度这个pod
  • 节点有注解:”cluster-autoscaler.kubernetes.io/scale-down-disabled”: “true”

3.3 如何防止节点被CA删除

可以通过给节点打上特定注解保证节点不给CA删除:

kubectl annotate node <nodename> cluster-autoscaler.kubernetes.io/scale-down-disabled=true

3.4 CA如何与HPA协同工作

HPA(Horizontal Pod Autoscaling)是k8s中pod的水平自动扩展,HPA的操作对象是RC、RS或Deployment对应的Pod,根据观察到的CPU等实际使用量与用户的期望值进行比对,做出是否需要增减实例数量的决策。
当CPU负载增加,HPA扩容pod,如果此pod因为资源不足无法被调度,则此时CA出马扩容节点。
当CPU负载减小,HPA减少pod,CA发现有节点资源利用率低甚至已经是空时,CA就会删除此节点。

四、部署使用CA

直接在集群中部署即可,简化的yaml如下所示,启动参数按需添加,其中{{MIN}}是最小节点数,{{MAX}}是最大节点数

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cluster-autoscaler
  labels:
    k8s-app: cluster-autoscaler
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: cluster-autoscaler
  template:
    metadata:
      labels:
        k8s-app: cluster-autoscaler
    spec:
      containers:
        - image: cluster-autoscaler:latest
          name: cluster-autoscaler
          command:
            - ./cluster-autoscaler
            - --nodes={{MIN}}:{{MAX}}:k8s-worker-asg-1

五、Ref

【1】https://github.com/kubernetes/autoscaler

猜你喜欢

转载自blog.csdn.net/hello2mao/article/details/80418625