【无标题】

HPA控制过程和控制原理
K8s中的MetricsServer会持续采集Pod的指标数据,HPA 控制器通过 Metrics Server 的 API(Heapster 的 API 或聚合 API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标 Pod 副本数量。当目标 Pod 副本数量与当前副本数量不同时,HPA 控制器就向 Pod 的副本控制器(Deployment、RC 或 ReplicaSet)发起 scale 操作,然后副本控制器会调整 Pod 的副本数量,完成扩缩容操作。

HPA版本
目前版本有:autoscaling/v1、autoscaling/v2beta1和autoscaling/v2beta2 三个大版本 。

autoscaling/v1只支持CPU一个指标的弹性伸缩

autoscaling/v2beta1支持自定义指标

autoscaling/v2beta2支持外部指标

hpa示例
以autoscaling/v2beta2为例:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: web
namespace: default
spec:
behavior:
scaleDown:
policies:
periodSeconds: 15
type: Percent
value: 100
stabilizationWindowSeconds: 300
scaleUp:
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max
stabilizationWindowSeconds: 0
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: d1
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- type: ContainerResource
containerResource:
container: C1
name: memory
target:
type: AverageValue
averageValue: 300Mi
- type: Pods
pods:
metric:
name: Pods_second
selector:
- matchExpressions:
- key: zone
operator: In
values:
- foo
- bar
target:
type: AverageValue
averageValue: 1k
- type: External
external:
metric:
name: External_second
selector: “queue=worker_tasks”
target:
type: Value
value: 20
- type: Object
object:
describedObject:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
name: main-route
metric:
name: ingress_test
target:
type: Value
value: 2k
HPA名词解释
maxReplicas: 是autoscaler可以扩展到的副本数的上限。

minReplicas: 是自动缩放程序将复制到的副本数的下限,默认是1

scaleTargetRef: 需要动态伸缩的scale所在的K8S资源。

metrics
指动态伸缩的控制指标,

有以下几种类型

resource:指的是当前伸缩对象下的pod的指标。target.type只支持Utilization和AverageValue类型的阈值
containerResource:指的是当前伸缩对象下的container的cpu和memory指标,只支持Utilization和AverageValue类型的阈值
pods: 指的是伸缩对象Pods的指标,数据需要第三方的adapter提供,只允许AverageValue类型的阈值
external:指的是k8s外部的指标,数据同样需要第三方的adapter提供。只支持Value和AverageValue类型的阈值
object: 指的是指定k8s内部对象的指标,数据需要第三方adapter提供,例如Ingress。只支持Value和AverageValue类型的阈值
metrics的目标值有以下几类:

averageUtilization: 当整体的资源利用率超过这个百分比的时候,会进行扩容
averageValue: 当指标的平均值或资源的平均利用率超过这个的时候,会进行扩容
Value: 当指标的值超过这个的时候,会进行扩容
pods、external、object支持使用筛选器进行筛选,允许进行条件选择。

behavior
用来精确控制HPA的扩容和缩容的速度

behavior中包括:scaleDown:(缩容速度策略)和scaleU()扩容速度策略)

上面的实例中:

缩容按照百分比,每15秒最多减少currentReplicas*100%个副本(但最终不可小于minReplicas),且缩容后的最终副本不得低于过去300s内计算的历史副本数的最大值

扩容则采用快速扩容,不考虑历史计算值(窗口时间为0),每15秒副本翻倍或者每15秒新增4个副本(取最大值),即:max(2*currentReplicas,4)

使用CPU指标缩放
使用cpu指标缩放时,必须要启动K8S-api聚合

k8s api 聚合
k8s 1.7 版本设计了APIAggregator组件(其实APIAggreator组件还包括代理后端服务等功能),来实现外部服务的集成,这样开发人员不用修改k8s代码,也可以来自定义服务信息。k8s允许第三方应用把自己注册到apiserver中,且依然使用APIserver的HTTP URL进行访问操作 。api聚合层主要就是将拓展api的访问请求转发到用户服务上。

比如当你访问 apis/http://metrics.k8s.io/v1beta1 的时候,实际上访问到的是一个叫作 kube-aggregator 的代理。而 kube-apiserver,正是这个代理的一个后端;而 Metrics Server,则是另一个后端 。其实他的作用主要就是为了拓展k8s的api功能。

使用kubeadm部署的集群默认会开启该功能,二进制方式部署的需要增加一些启动参数在kube-apiserver.conf文件中,再重启apiserver服务即可

–requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \ #指定的根证书,需要访问聚合层需要的认证,可信任的Ca。
–requestheader-allowed-names=kubernetes \ #客户端证书常用名称列表。允许在–requestheader-username-headers指定的标头中提供用户名,如果为空,则允许在–requestheader-client-ca文件中通过当局验证的任何客户端证书
–requestheader-extra-headers-prefix=X-Remote-Extra- \ #和下面的两个一起都是请求头里面用于识别是否可信的字段
–requestheader-group-headers=X-Remote-Group
–requestheader-username-headers=X-Remote-User
–enable-aggregator-routing=true \ #启用聚合层的路由
–proxy-client-cert-file=/opt/kubernetes/ssl/server.pem --proxy-client-key-file=/opt/kubernetes/ssl/server-key.pem \ # 用于证明aggregator或kube-apiserver在请求期间发出呼叫的身份的客户端证书和用于证明聚合器或kube-apiserver的身份的客户端证书的私钥 可以用上面的ca单独颁发,也可以直接用apiserver的证书,只要是ca颁发的就可以
#上面的参数在kube-admin文件中也是有的。
Metrics Server
Metric server是由用户开发的一个api server,集群范围的资源使用情况的指标监控器。

Metric server本身不是k8s的组成部分,是托管运行在k8s上的一个pod。

Metric server从每个节点上Kubelet公开的API收集指标。

Metrics server通过Kubernetes聚合器注册在Master APIServer中。

用户可通过Metrics API在Kubernetes中获得资源使用率指标,例如容器CPU和内存使用率。这些指标既可以由用户直接访问(例如,通过使用kubectl top命令),也可以由集群中的控制器(例如,Horizontal Pod Autoscaler)使用。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: main-data-after
  namespace: oss-mahao-touming-pro
spec:
  behavior: 
    scaleDown: 
      policies: 
      - type: Percent   #百分比,缩容是采用百分比的方式,还可以采用指定pods数量的方式
        periodSeconds: 120   #指定缩容一次的时间,定义为120s,缩容100%
        value: 100        #指定periodSeconds时间的扩缩容的数量,或百分比
      stabilizationWindowSeconds: 300  #缩容时的狂口时间
    scaleUp: 
      policies:
      - type: Percent
        value: 100
        periodSeconds: 30
      - type: Pods
        value: 4
        periodSeconds: 30
      selectPolicy: Max
      stabilizationWindowSeconds: 0
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef: 
    apiVersion: apps/v1
    kind: Deployment
    name: main-data-after
  metrics: 
  - type: Resource 
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值