Kubernetes HPA监控

HPA介绍

HAP通过收集来的监控指标分析所有Pod的负载情况,并且根据我们设定好的标准来自动扩容收缩ReplicationController、 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量。

Metrics Server介绍

在HAP早期版本使⽤的是⼀个叫Heapster组件来提供CPU和内存指标的,在后期的版本k8s转向了使⽤MetrcisServer组件来提供Pod的CPU和内存指标,Metrcis Server通过Metrics API将数据暴露出来,然后我们就可以使⽤k8s的API来获取相应的数据。

Metrics Server安装

下载components.yaml

1
wget https://github.com/kubernetes-sigs/metricsserver/releases/download/v0.4.0/components.yaml

如果下载不了,访问github的项目地址手动下载:https://github.com/kubernetes-sigs/metrics-server/releases?page=2

image-20221002181507321

各节点下载Metrics Server

1
docker pull ccr.ccs.tencentyun.com/mirrors/metrics-server:v0.4.0

修改components.yaml

1
2
设置跳过证书检查:- --kubelet-insecure-tls
修改为腾讯云镜像:ccr.ccs.tencentyun.com/mirrors/metrics-server:v0.4.0

image-20221002175645836

创建资源

1
kubectl apply -f components.yaml

查看node监控信息

1
kubectl top nodes

image-20221002175852424

查看Pod监控信息

1
kubectl -n kube-system top pod

image-20221002182145979

生成测试镜像

创建测试首页

1
2
3
4
5
6
7
8
9
cat > index.php << 'EOF'
<?php
$x = 0.0001;
for ($i = 0; $i <= 1000000; $i++) {
$x += sqrt($x);
}
echo "OK!";
?>
EOF

创建dokerfile

1
2
3
4
5
cat > dockerfile << 'EOF'
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php
EOF

生成镜像

1
docker build -t php:v1 .

将镜像导出发送到其它节点

1
2
3
docker save php:v1 > php.tar
scp php.tar 172.16.32.145:/root/
scp php.tar 172.16.32.146:/root/

其它节点导入镜像

1
docker load < /root/php.tar

创建Deployment资源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
replicas: 1
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- image: php:v1
imagePullPolicy: IfNotPresent
name: php-apache
ports:
- containerPort: 80
protocol: TCP
resources:
requests:
cpu: 200m
1
kubectl apply -f php-dp.yaml

创建HPA资源

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 50
1
kubectl apply -f php-hpa.yaml

查看HPA扩所容情况

1
2
kubectl get hpa -w
kubectl get pod -w

创建Service资源并访问进行压测

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
1
kubectl apply -f hpa-svc.yaml

image-20221002231104513

1
while true; do wget -q -O- http://10.1.217.203; done

如果CPU使⽤率降下来了,k8s在5分钟左右后进⾏收缩