关键词:
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相关服... 查看详情