kubernetes(k8s)之hpa(代码片段)

Tuki_a Tuki_a     2022-12-18     665

关键词:

HPA简介

Horizontal Pod Autoscaler 可以根据 CPU 利用率自动扩缩 ReplicationController、 Deployment、ReplicaSet 或 StatefulSet 中的Pod 数量 (也可以基于其他应用程序提供的度量指标,目前这一功能处于 beta 版本即测试版本)。
官方文档:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

HPA伸缩过程

1、收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization)
2、对比在扩容条件里记录的cpu限额(CPUUtilization)
3、调整实例数(必须要满足不超过最大/最小实例数)
4、每隔30s做一次自动扩容的判断

CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过metrics可以直接获取到)除以cpu request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod CPU核心的使用占比。

HPA进行伸缩算法

计算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)
ceil()表示取大于或等于某数的最近一个整数。

每次扩容后冷却3分钟才能再次进行扩容,而缩容则要等5分钟后。
当前Pod Cpu使用率与目标使用率接近时,不会触发扩容或缩容:
触发条件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9

演示环境

server1:172.25.38.1	harbor仓库端
server2:172.25.38.2	k8s master端
server3:172.25.38.3	k8s node端
server4:172.25.38.4	k8s node端

单条资源限制

Hpa会根据Pod的CPU使用率动态调节Pod的数量。
先拉取一个镜像为之后做测试用

改标签上传到仓库

创建一个新目录

编写创建控制器和服务的定义文件,使用Deployment生成php-apache,开放端口80。内容如下:

[root@server2 hpa]# vim deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: library/hpa-example		#刚刚拉取的镜像地址
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache

应用文件,控制器和服务创建成功

访问IP,效果如下,镜像里有一个php文件,内容就是OK!

现在,php-apache 服务器已经运行,我们将通过 kubectl autoscale 命令创建 Horizontal Pod Autoscaler。 以下命令将创建一个 Horizontal Pod Autoscaler 用于控制我们上一步骤中创建的 Deployment,使 Pod 的副本数量维持在 1 到 10 之间。 大致来说,HPA 将(通过 Deployment)增加或者减少 Pod 副本的数量以保持所有 Pod 的平均 CPU 利用率在 50% 左右(由于每个 Pod 请求 200 毫核的 CPU,这意味着平均 CPU 用量为 100 毫核)

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

可以查看hpa,只有一个pod

现在进行压力测试,不断写入,增大cpu负载

新开一个shell,实时查看pod状态

可以看到CPU占用率上升又下降(建立pod的过程)

超过限定之值,随着负载增大,hpa开始扩容,pod数量增多,用于缓解压力


会慢慢变化,最终趋于50%这个值左右


关闭测试pod,开始冷却,负载下降,单个pod cpu占用降低,但pod数量没有下降,负载最终降至零,pod数量减少。

多条资源限制

文件内容如下:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        averageUtilization: 60	#cpu占用率cpu:60
        type: Utilization
  - type: Resource
    resource:
      name: memory
      target:
        averageValue: 50Mi		#内存占用 mem:50
        type: AverageValue

应用文件创建hpa,监控内容为内存和cpu

k8s集群基于heapster的hpa测试(代码片段)

...单个实例可以使用的资源的增减。HPA属于前者。2、HPA是Kubernetes中实现POD水平自动伸缩的功能。云计算具有水平弹 查看详情

linux学习-kubernetes之资源清单定义(代码片段)

资源:对象workload:Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、Cronjob,…服务发现及均衡:Service、Ingress配置及存储:Volume、CSIConfigMap、SecretDownwardAPI集群级资源NameSpace、Node、Role、ClusterRole、RoleBinding、ClusterRol... 查看详情

k8s群集之动态扩缩容——hpa(代码片段)

博文大纲:一、HPA介绍二、实现pod扩容与缩容的示例一、HPA介绍HPA的全称为HorizontalPodAutoscaling,它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。当pod负载达到... 查看详情

自动扩容之horizontalpodautoscaling(hpa)(代码片段)

...可预料的,所以手动控制的方式是不现实的。-因此,在Kubernetes1.1版本中首次发布了这一重量级新特性-----HorizontalPodAutoscaler。-HorizontalPodAutoscaler简称HAP,意 查看详情

(2022版)一套教程搞定k8s安装到实战|hpa(代码片段)

...来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!附上汇总... 查看详情

kubernetes之k8s核心原理--第一篇(代码片段)

...,好吧,只能通过两篇文章向大家介绍K8s核心原理。一、KubernetesAPIServer原理分析1.kubernetesAPIServer介绍  kubernetesAPIserver的和核心功能是提供了kubernetes各类资源对象(pod、RC、service等)的增、删、改、查以及watch等HTTP 查看详情

linux企业运维——kubernetes(十七)hpa容器水平伸缩(代码片段)

Linux企业运维——Kubernetes(十七)HPA容器水平伸缩文章目录Linux企业运维——Kubernetes(十七)HPA容器水平伸缩一、HPA简介二、HPA实例2.1、HPA部署2.2、压力测试2.3、同时监控cpu和内存一、HPA简介HPA的全称为(Horiz... 查看详情

linux企业运维——kubernetes(十七)hpa容器水平伸缩(代码片段)

Linux企业运维——Kubernetes(十七)HPA容器水平伸缩文章目录Linux企业运维——Kubernetes(十七)HPA容器水平伸缩1、HPA简介2、HPA实例2.1、HPA部署2.2、压力测试2.3、同时监控cpu和内存1、HPA简介HPA的全称为(HorizontalP... 查看详情

kubernetes(k8s)之service(服务)(代码片段)

Servicek8s中的ServiceService中涉及到的名词Service的实现演示环境IPVS以ClusterIP模式创建svc外部访问service的方式1、通过NodePort访问2、通过LoadBalance访问3、通过ExternalName访问kube-dnsHeadlessService(无头服务)k8s中的ServiceService可以看... 查看详情

kubernetes(k8s)集群安全机制之访问控制(代码片段)

集群安全机制之访问控制访问控制流程访问k8s的APIServer的客户端使用代理查看API信息ServiceAccount创建ServiceAccount账户给SA添加仓库认证UserAccount创建UserAccount账户RBAC(RoleBasedAccessControl)授权RBAC的三个基本概念Role和ClusterRole... 查看详情

kubernetes(k8s)之部署让k8s图形化的dashboard(代码片段)

...可视化的Web界面来查看当前集群的各种信息。用户可以用KubernetesDashboard部署容器化的应用、监控应用的状态、执行故障排查任务以及管理Kubernetes各种资源。网址:https://github.com/kubernetes/dashboard部 查看详情

kubernetes(k8s)之容器资源限制(代码片段)

...源限制ResourceQuota为namespace设置资源配额资源限制的实现Kubernetes对资源的限制实际上是通过cgroup来控制的,cgroup是容器的一组用来控制内核如何运行进程的相关属性集合。针对内存、CPU和各种设备都有对 查看详情

kubernetes(k8s)之k8s的部署(代码片段)

k8s的部署前提准备部署k8sserver2、3、4均需做的准备工作仓库端上传镜像master端初始化在master端安装网络组件添加后端节点前提准备我使用了四台虚拟机server1 172.25.38.1 harbor仓库端server2 172.25.38.2 k8s的master端server3 172.25.38.3 k8s的node... 查看详情

kubernetes(k8s)之volume(卷)(代码片段)

Volumek8s中的volume为什么要用volumevolume特点K8s支持多种类型的Volume演示环境emptyDir卷多容器共享卷emptyDir卷缺点hostPath卷hostPath卷应用场景使用hostPath卷时,需要注意的点:hostPath卷的type创建hostPath卷NFS共享文件PersistentVolume持... 查看详情

kubernetes之k8s核心原理--第二篇(代码片段)

六、共享存储原理  Kubernetes对有状态或者对数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者empDir临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便于容器应用重建以后,... 查看详情

kubernetes(k8s)之pod管理(代码片段)

pod管理Kubernetes基础知识实验环境直接创建Pod应用创建控制器的方法来管理podpod扩容镜像更新Kubernetes基础知识可以查看上一篇文章实验环境server1:harbor仓库端server2:Master端server3:node节点1server4:node节点2直接创建... 查看详情

kubernetes(k8s)之资源监控(代码片段)

资源监控Metrics-ServerMetrics-Server演示环境Metrics-Server部署Metrics-ServerMetrics-Server是集群核心监控数据的聚合器,用来替换之前的heapster。容器相关的Metrics主要来自于kubelet内置的cAdvisor服务,有了Metrics-Server之后,用户就可... 查看详情

云原生之kubernetes实战在k8s集群下部署wordpress(代码片段)

【云原生之kubernetes实战】在k8s集群下部署wordpress一、wordpress介绍1.wordpress简介2.wordpress的优点3.wordpress使用场景二、检查本地kubernetes集群状态三、配置nfs共享存储1.安装nfs2.创建共享目录3.配置共享目录4.使配置生效5.重启nfs相关服... 查看详情