k8s---pod的水平自动伸缩HPA

这篇具有很好参考价值的文章主要介绍了k8s---pod的水平自动伸缩HPA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HPA:Horizontal Pod Autoscaling是pod的水平自动伸缩。是k8s自带的模块

pod占用CPU的比率到达一定的阈值会触发伸缩机制。

replication controller:副本控制器。控制pod的副本数

deployment controller:节点控制器。部署pod

hpa控制副本的数量以及控制如何部署pod

  1. hpa基于kube-controller-manager服务。周期性检测pod的cpu使用率,默认是30秒

  1. hpa和replication controller以及deployment controller都属于k8s的资源对象。通过跟踪分析副本控制器和deployment的pod负载变化。针对性的调整目标副本数。

阀值:正常情况下,pod的副本数,以及达到阀值之后,pod的扩容最大数量。

  1. metrics-server部署到集群中

实验部署

将metrics-server传入每个节点
docker load -i metrics-server.tar

master01---
kubectl apply -f components.yaml
vim hpa-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: centos-test
  labels:
    test: centos1
spec:
  replicas: 1
  selector:
    matchLabels:
      test: centos1
  template:
    metadata:
      labels:
        test: centos1
    spec:
      containers:
        - name: centos
          image: centos:7
          command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]
          resources:
            limits:
              cpu: 1000m
              memory: 512Mi
#设置资源限制。使用hpa必须添加资源限制字段,否则无法判断

---

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-centos
spec:
  scaleTargetRef:
    apiVersion: apps/v1
#表示需要监控的类型是什么,基于什么控制器创建的
    kind: Deployment
    name: centos-test
#这里表示你需要监控谁
  minReplicas: 1
#表示最小有几个
  maxReplicas: 5
#超过副本最大有几个
  targetCPUUtilizationPercentage: 50
#设定cpu使用的阀值

kubectl apply -f hpa-test.yaml

进入容器使容器占满2个cpu测试

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

此时停止扩充测试缩容

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

HPA的规则

  1. 定义pod的时候必须要有资源限制,否则HPA无法进行监控

  2. 扩容是即时的,只要超过阀值就会立刻扩容,不是立刻扩容到最大副本数。他会在最小值和最大值波动,如果扩容数量满足了需求,则不会在扩容。

  3. 缩容是缓慢的。如果业务的峰值较高,回收的策略太积极的话,可能会产生业务的崩溃。

周期性的获取数据,缩容的机制问题。

如果业务的峰值较高,回收的策略太积极的话,可能会产生业务的崩溃。

pod的副本数扩缩容有两种方式:

1、 手动的方式修改控制器的副本数。

  1. 命令行可以通过 kubectl scale deployment pod名称 --replicas=5

  2. 修改yaml文件。通过apply -f部署更新

2、 自动扩缩容HPA

hpa监控的是cpu

资源限制

pod的资源限制:在部署pod的时候加入resources字段,通过limits/request来对pod进行限制。

除了pod的资源限制还有命名空间的资源限制

命名空间资源限制

如果你有一个lucky-cloud项目部署在test1的命名空间。如果lucky-cloud不做限制或者命名空间不做限制,他依然会占满所有集群资源。

k8s集群部署pod的最大数量:1万个

实验举例:

vim ns.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: centos-test2
  namespace: test1
  labels:
    test: centos2
spec:
  replicas: 11
  selector:
    matchLabels:
      test: centos2
  template:
    metadata:
      labels:
        test: centos2
    spec:
      containers:
        - name: centos
          image: centos:7
          command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]
          resources:
            limits:
              cpu: 1000m
              memory: 512Mi

---

apiVersion: v1
kind: ResourceQuota
metadata:
  name: ns-resource
  namespace: test1
spec:
  hard:
#硬限制
    pods: "10"
#表示在这个命名空间内只能部署10个pod
    requests.cpu: "2"
#最多只能占用多个个cpu
    requests.memory: 1Gi
#最多只能占用多少内存
    limits.cpu: "4"
#最大需要多少cpu
    limits.memory: 2Gi
#最大需要多少内容
    configmaps: "10"
#当前命名空间内能创建最大的configmap的数量 10个
    persistentvolumeclaims: "4"
#当前命名空间只能使用4个pvc
    secrets: "9"
#创建加密的secrets。只能9个
    services: "5"
#创建service只能5个
    services.nodeports: "2"
#nodeport类型的svc只能2个

设置副本数为11个测试。当命名空间限制了之后,最多只能部署10个

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

kubectl describe ns test1
#查看命名空间的限制

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

通过命名空间的方式对容器进行限制

实验举例:

vim ns2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: centos-test
  namespace: test2
  labels:
    test: centos2
spec:
  replicas: 1
  selector:
    matchLabels:
      test: centos1
  template:
    metadata:
      labels:
        test: centos1
    spec:
      containers:
        - name: centos
          image: centos:7
          command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]

---

apiVersion: v1
kind: LimitRange
#表示使用limitrange来进行资源控制的类型
metadata:
  name: test2-limit
  namespace: test2
spec:
  limits:
  - default:
      memory: 512Mi
      cpu: "1"
    defaultRequest:
      memory: 256Mi
      cpu: "0.5"
    type: Container
#对所有部署在这个命名空间内的容器统一进行资源限制
#default: limit
#defaultRequest: request
#type: Container、Pod、Pvc都可以

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

通过命名空间对pod进行统一限制:

好处是不需要对每个pod进行限制

缺点是不够灵活

HPA自动伸缩如果使用nodeName的方式将固定在一个node上观察扩容之后,阀值是否会下降?

实验举例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: centos-test
  labels:
    test: centos1
spec:
  replicas: 1
  selector:
    matchLabels:
      test: centos1
  template:
    metadata:
      labels:
        test: centos1
    spec:
      containers:
        - name: centos
          image: centos:7
          command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]
          resources:
            limits:
              cpu: 1000m
              memory: 512Mi
      nodeName: node01
#设置资源限制。使用hpa必须添加资源限制字段,否则无法判断

---

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-centos
spec:
  scaleTargetRef:
    apiVersion: apps/v1
#表示需要监控的类型是什么,基于什么控制器创建的
    kind: Deployment
    name: centos-test
#这里表示你需要监控谁
  minReplicas: 1
#表示最小有几个
  maxReplicas: 5
#超过副本最大有几个
  targetCPUUtilizationPercentage: 50
#设定cpu使用的阀值

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

占满第二个pod测试

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

他们都处在同一个节点上

查看是阀值是否会下降

k8s---pod的水平自动伸缩HPA,kubernetes,java,容器

测试即使在同一个node节点上阀值还是会下降。实验完成

总结

HPA自动扩缩容

命名空间的两种方式:

  1. ResourceQuota:可以对命名空间进行资源限制

  2. LimitRange:直接声明在命名空间中创建的pod,容器的资源限制。这是一种统一限制。所有的pod都受这个条件的制约。

只要是在命名空间内不管创建多少,都需要使用我声明的资源限制。

pod的资源限制:resources、limit

  1. pod的资源限制是我们创建时候声明好的,这时必加选项。

  1. 对命名空间、使用cpu、内存一定会做限制

命名空间的资源限制:ResourceQuota

  1. 一般是对命名空间的cpu和内存做限制

命名空间统一资源限制:LimitRange

核心:pod一定要做资源限制否则会占用集群的全部资源,命名空间也需要做限制否则还是会占用集群的全部资源。防止整个集群的资源被一个服务或者一个命名空间占满。

HPA自动伸缩文章来源地址https://www.toymoban.com/news/detail-819889.html

到了这里,关于k8s---pod的水平自动伸缩HPA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • HPA (Horizontal Pod Autoscaler) In K8s

    没准正在建设中哈哈哈 作为一位城市观察者和设计师,我想借助Kubernetes的HPA机制思想来描述城市红绿灯自动调节的场景。 在这个故事中,我们的城市面临着日益增长的交通流量和挤塞问题。为了应对这一挑战,城市决定引入智能化红绿灯系统,以更好地管理交通流量和提高

    2024年02月07日
    浏览(30)
  • Kubernetes 笔记(17)— 系统监控、使用Metrics Server、hpa 自动伸缩 Pod 数量、Prometheus 的使用

    Kubernetes 笔记(17)— 系统监控、使用Metrics Server、hpa 自动伸缩 Pod 数量、Prometheus 的使用

    如果你对 Linux 系统有所了解的话,也许知道有一个命令 top 能够实时显示当前系统的 CPU 和内存利用率,它是性能分析和调优的基本工具,非常有用。 Kubernetes 也提供了类似的命令,就是 kubectl top ,不过默认情况下这个命令不会生效,必须要安装一个插件 Metrics Server 才可以。

    2024年02月01日
    浏览(12)
  • 如何在K8s中实现 Pod 的自动扩展

    在 Kubernetes 中实现 Pod 的自动扩缩,你可以使用 HorizontalPodAutoscaler 资源。以下是一个简单的例子: 首先,你需要确保你的 Kubernetes 集群中已经安装了 Metrics Server,因为 HPA 需要它来获取 Pod 的资源使用情况。 1、部署 Metrics Server(如果尚未部署): kubectl apply -f https://github.com/

    2024年03月27日
    浏览(7)
  • k8s---HPA

    Horizontal Pod Autoscing:pod的水平自动伸缩,这是k8s自带的模块 pod占用cpu比率到达一定的阀值,会触发伸缩机制 replication controller 副本控制器 pod的副本数 deployment controller 节点控制器 部署pod hpa控制数量以及控制部署pod 1、hpa基于kube-controll-manager服务,周期的检测pod的cpu使用率 默

    2024年01月24日
    浏览(10)
  • K8S的HPA

    K8S的HPA

    horiztal Pod Autoscaling:pod的水平自动伸缩,这是k8s自带的模块,它是根据Pod占用cpu比率到达一定的阀值,会触发伸缩机制 Replication controller  副本控制器:控制pod的副本数 Deployment controller 节点控制器:部署pod Hpa:控制副本的数量以及控制部署pod 如何检测 Hpa是基于kube-contrroll

    2024年01月24日
    浏览(11)
  • k8s- HPA应用

    部署 HPA HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。 (1)HPA 基于 Master 上的 kube-controller-manager 服务启动参数 horizontal-pod-autoscaler-sync-period 定义的时长(

    2024年02月16日
    浏览(10)
  • 现场问题排查-k8s(docker)上某服务pod频繁自动重启

    根因:应用内存占用不合理(个人认为)+现场配置内存不够导致频繁触发OOM引发该现象。 为啥要写这个文章? 之前没有k8s下pod频繁重启的问题处理经验,这次实战沉淀思路及过程,供后续自己处理相同问题提供参考资料 为其他遇到类似问题的人提供一些排查思路 现场反馈

    2024年02月03日
    浏览(12)
  • K8S中HPA详解

    K8S中HPA详解

    HPA全称是 Horizontal Pod Autoscaler,也就是对k8s的workload的副本数进行自动水平扩缩容(scale)机制,也是k8s里使用需求最广泛的一种Autoscaler机制,在开始详细介绍HPA之前,先简单梳理下k8s autoscale的整个大背景。 k8s被誉为新一代数据中心操作系统(DCOS),说到操作系统我们自然想到其

    2024年02月05日
    浏览(7)
  • k8s---HPA 命名空间资源限制

    k8s---HPA 命名空间资源限制

     HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。 (1)HPA 基于 Master 上的 kube-controller-manager 服务启动参数 horizontal-pod-autoscaler-sync-period 定义的时长(默认为

    2024年01月24日
    浏览(14)
  • 如何优化k8s中HPA的弹性速率?

    如何优化k8s中HPA的弹性速率?

    本文分享自华为云社区《K8s 核心资源指标HPA性能优化之路》,作者:可以交个朋友。 以弹性指标为cpu、memory为例。在Kubernetes 1.7版本中引入了聚合层,允许第三方应用程序注册相关API接口到kube-apiserver上。其中 /apis/metrics.k8s.io/v1beta1 一般由metrics-server程序提供,以插件的形式

    2024年02月22日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包