k8s pod容器自动伸缩

kubernetes 弹性伸缩布局

有三种弹性伸缩:

(1) CA(Cluster Autoscaler): Node级别自动扩/缩容cluster-autoscaler组件。
(2) HPA(Horizontal Pod Autoscaler): Pod个数自动扩/缩容,自动增加Pod副本数量
(3) VPA(Vertical Pod Autoscaler): Pod配置自动扩/缩容,主要是CPU、内存。addon-resizer组件

为什么要自动扩缩容?
在实际的业务场景中,我们经常会遇到某个服务需要扩容的场景(例如:测试对服务压测、电商平台秒杀、大促活动、或由于资源紧张、工作负载降低等都需要对服务实例数进行扩缩容操作)。

我们一般会使用 Deployment 中的 replicas 参数,设置多个副本集来保证服务的高可用,但是这是一个固定的值,比如我们设置 10 个副本,就会启 10 个 pod 同时 running 来提供服务。如果这个服务平时流量很少的时候,也是 10 个 pod 同时在 running,而流量突然暴增时,又可能出现 10 个 pod 不够用的情况。

HPA冷却周期
在弹性伸缩中,冷却周期是不能逃避的一个话题, 由于评估的度量标准是动态特性,副本的数量可能会不断波动。有时被称为颠簸, 所以在每次做出扩容缩容后,冷却时间是多少。在 HPA 中,默认的扩容冷却周期是 3 分钟,缩容冷却周期是 5 分钟。
可以通过调整 kube-controller-manager 组件启动参数设置冷却时间。
–horizontal-pod-autoscaler-downscale-delay // 扩容冷却
–horizontal-pod-autoscaler-upscale-delay // 缩容冷却


apiVersion: autoscaling/v1       #只支持CPU一个指标的弹性伸缩。
kind: HorizontalPodAutoscaler
metadata:
  name: horse-oss      #表示 deploy 服务名称
  namespace: yanxuan
spec:
  maxReplicas: 10        #最多 10 个 pod
  minReplicas: 1         #最少一个 pod
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: horse-oss
  targetCPUUtilizationPercentage: 80   #当整体的资源利用率超过80%的时候,会进行扩容。

或者

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: horse-oss
spec:
  # 指定缩放的对象是horse-oss Deployment
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: horse-oss
  minReplicas: 1
  maxReplicas: 10
  metrics:
  # 每个 Pod 的 CPU 利用率在 50% 以内
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  # 每个 Pod 的内存利用率在 60% 以内
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 60
  # 每个 Pod 每秒能够服务 1000 个数据包请求
  - type: Pods
    pods:
      metric:
        name: packets-per-second
      target:
        type: AverageValue
        averageValue: 1k
  # Ingress 后的 Pod 每秒能够服务的请求总数达到 10000 个        
  - type: Object
    object:
      metric:
        name: requests-per-second
      describedObject:
        apiVersion: networking.k8s.io/v1beta1
        kind: Ingress
        name: main-route
      target:
        type: Value
        value: 10k
或者
kubectl autoscale deployment horse-oss -n yanxuan \
--min=1 --max=10 --cpu-percent=80 --dry-run=client \
-o yaml > hpa.yaml

kubectl autoscale deployment horse-oss --cpu-percent=50 --min=1 --max=10
#上面命令解释说明

--cpu-percent=50(表示 cpu 使用率不超过 50%)
-min=1(最少一个 pod)
--max=10(最多 10 个 pod)



[root@node1 ~]# kubectl  get hpa -n yanxuan
NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horse-oss   Deployment/horse-oss   13%/80%   1         10        1          170m

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值