kubernetes服务自动伸缩-HPA
实验环境
安装好k8s集群
HPA:Pod水平自动伸缩(pod副本伸缩)
VPA:Pod垂直自动伸缩(pod资源伸缩)
一、Kubernetes Pod水平自动伸缩 HPA
官方网址:Pod 水平自动扩缩 | Kubernetes
1、HPA简介
HPA全称 Horizontal Pod Autoscaler,可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。
Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。
Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。
控制器会周期性的调整副本控制器或 Deployment 中的副本数量,以使得 Pod 的平均 CPU 利用率与用户所设定的目标值匹配。
HPA 定期检查内存和 CPU 等指标,自动调整 Deployment 中的副本数。
实际生产中,广泛使用这四类指标:
(1)Resource metrics - CPU和内存利用率指标
(2)Pod metrics - 例如网络利用率和流量
(3)Object metrics - 特定对象的指标,比如Ingress, 可以按每秒使用请求数来扩展容器
(4)Custom metrics - 自定义监控,比如通过定义服务响应时间,当响应时间达到一定指标时自动扩容
2、metircs-server部署
下载地址:wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
(1)上传high-availability-1.21+.yaml文件到/root目录(master1)
(2)上传metrics-server.tar包到/root目录并导入(master1、worker1、worker2)
docker load -i metrics-server.tar
(3)禁用 Kubelet 的 TLS 证书验证
kubelet 证书需要由集群证书颁发机构签名,或者通过向 Metrics Server 传递参数 --kubelet-insecure-tls 来禁用证书验证
vim high-availability-1.21+.yaml
添加:
- --kubelet-insecure-tls
(4)创建资源
kubectl apply -f high-availability-1.21+.yaml
kubectl get pod -n kube-system
查看 Kubernetes 集群中节点资源使用情况(CPU 和内存)
kubectl top nodes
查看指定命名空间(kube-system)中所有 Pod 的资源使用情况(CPU 和内存)
kubectl top pod -n kube-system
3、HPA演示示例
(1)部署一个服务
mkdir hpa
cd hpa
vim 01-nginx.yaml
添加:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 200m
memory: 100Mi
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
app: nginx
kubectl apply -f 01-nginx.yaml
kubectl get pod
(2)创建HPA对象
vim 02-nginx-hpa.yaml
添加:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
这是一个 HorizontalPodAutoscaler (HPA) 对象的配置,它将控制Deployment "nginx" 的副本数量。当 CPU 使用率超过 50% 时,HPA 将自动增加 Pod 的副本数量,最高不超过 10 个。
创建资源
kubectl apply -f 02-nginx-hpa.yaml
查看 Kubernetes 集群中所有 HorizontalPodAutoscaler(HPA)资源
kubectl get hpa
(3)执行压测
yum -y install httpd-tools
kubectl get svc
ab -c 1000 -n 1000000 http://192.168.10.11:32512/
复制会话
kubectl get pod
kubectl get hpa
返回字段解析:
NAME: HPA 的名称。
REFERENCE: HPA 管理的目标资源(如 Deployment)。
TARGETS: 当前资源使用率与目标值的对比(例如,CPU 使用率)。
MINPODS: Pod 副本数的最小值。
MAXPODS: Pod 副本数的最大值。
REPLICAS: 当前的 Pod 副本数。
AGE: HPA 的创建时间。
终止压力测试完成查看
kubectl get hpa
CPU 利用率已经降到 0,所以 HPA 将自动缩减副本数量至 1。
因为在创建HPA时,指定了副本数范围,这里是minReplicas: 1,maxReplicas: 10。