赞
踩
目录
HPA(Horizontal Pod Autoscaling,Pod水平自动伸缩)是Kubernetes中的一个核心功能,它允许用户根据当前Pod的资源使用率(如CPU、内存等)或其他自定义指标来自动调整Pod的副本数量,以实现资源的动态扩展和缩减。
为防止等下镜像拉取失败,先下载并加载镜像至每个node上
如节点k8s-node-2
[root@k8s-node-2 ~]# docker load -i hpa-example.tar
运行 php-apache 服务器并暴露服务
为了演示 HorizontalPodAutoscaler,首先启动一个 Deployment 用 hpa-example 镜像运行一个容器, 然后使用以下yaml文件将其暴露为一个 服务(Service)
[root@k8s-master-1 hpa]# mkdir /hpa
[root@k8s-master-1 hpa]# cd /hpa
[root@k8s-master-1 hpa]# vim hpa.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: php-apache
- spec:
- selector:
- matchLabels:
- run: php-apache
- template:
- metadata:
- labels:
- run: php-apache
- spec:
- containers:
- - name: php-apache
- image: k8s.gcr.io/hpa-example:latest
- imagePullPolicy: IfNotPresent
- 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
[root@k8s-master-1 hpa]# kubectl apply -f php-apache.yaml
deployment.apps/php-apache created
service/php-apache created
[root@k8s-master-1 hpa]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
php-apache-f5b448469-kldd8 1/1 Running 0 12s 10.224.140.78 k8s-node-2 <none> <none>
创建一个以cpu为资源限制的HorizontalPodAutoscaler
- apiVersion: autoscaling/v2
- kind: HorizontalPodAutoscaler
- metadata:
- name: php-apache
- spec:
- scaleTargetRef: # 指定了 HPA 要调整的目标资源
- apiVersion: apps/v1
- kind: Deployment
- name: php-apache #指明了 Deployment 的名称为 php-apache。
- minReplicas: 1 #定义了 HPA 可以缩放到的最小副本数为1
- maxReplicas: 10 #定义了 HPA 可以扩展到的最大副本数为10
- metrics:
- - type: Resource
- resource:
- name: cpu #指明了具体的资源类型为 CPU
- target:
- type: Utilization #目标类型为使用率。
- averageUtilization: 50
averageUtilization: 50:定义了 CPU 使用率的目标值为 50%。这意味着,如果 php-apache Deployment 中所有 Pod 的平均 CPU 使用率超过了 50%,HPA 将增加副本数以尝试降低 CPU 使用率。相反,如果平均 CPU 使用率低于 50%,HPA 将尝试减少副本数以节省资源。
如果要以内存为限制资源,以下是一个yaml示例:
- apiVersion: autoscaling/v2
- kind: HorizontalPodAutoscaler
- metadata:
- name: php-apache
- spec:
- scaleTargetRef:
- apiVersion: apps/v1
- kind: Deployment
- name: php-apache
- minReplicas: 1
- maxReplicas: 10
- - type: Resource
- resource:
- name: memory
- target:
- type: AverageValue
- averageValue: 500Mi
检查新制作的 HorizontalPodAutoscaler 的当前状态:
[root@k8s-master-1 hpa]# kubectl get hpa
注意当前的 CPU 利用率是 0%,这是由于我们尚未发送任何请求到服务器 (TARGET
列显示了相应 Deployment 所控制的所有 Pod 的平均 CPU 利用率)
此时,副本数量为1个
[root@k8s-master-1 hpa]# kubectl run -i --tty load-generator --rm --image=busybox:latest --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
启动一个不同的 Pod 作为客户端。 客户端 Pod 中的容器在无限循环中运行,向 php-apache 服务发送查询。
这条 kubectl run
命令用于在 Kubernetes 集群中启动一个临时的 busybox
容器,该容器会不断地向 http://php-apache
发送 HTTP GET 请求,模拟一个负载生成器。
这时,由于请求增多,CPU 利用率持续上升,
可以看到,Deployment 的副本数量已经增长到了 6个
在创建 busybox
容器的终端中,输入 <Ctrl> + C
来终止负载的产生。
证结果状态(大约一分钟后):
一旦 CPU 利用率降至 0,HPA 会自动将副本数缩减为 1
VPA(Vertical Pod Autoscaler)即垂直Pod自动扩缩容,是Kubernetes中一种用于自动调节Pod中容器资源请求(CPU和内存)的工具。
VPA根据Pod的实际使用情况自动调整其CPU和内存资源请求,以确保应用程序具有足够的资源运行,并同时避免资源的浪费。
与Horizontal Pod Autoscaler(HPA)不同,VPA通过调整单个Pod的资源请求来应对负载变化,主要关注于单个Pod内部资源的垂直扩展。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。