24-k8s的附件组件-Metrics-server组件与hpa资源pod水平伸缩

一、概述

Metrics-Server组件目的:获取集群中pod、节点等负载信息;

hpa资源目的:通过metrics-server获取的pod负载信息,自动伸缩创建pod;

参考链接:

资源指标管道 | Kubernetes

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server

GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.

二、安装部署Metrics-Server组件

就是给k8s集群安装top命令的意思;

1,下载Metrics-Server资源清单

· 第一种方式:github下载

root@k8s231 metricsserver# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

· 第二种方式:本地上传安装包

百度云盘;

链接:https://pan.baidu.com/s/1axn44_AsbHQxIMw9nuNVMw?pwd=jtqb

提取码:jtqb

2,编辑Metrics-Server的资源清单

root@k8s231 metricsserver# vim high-availability-1.21+.yaml

spec:

affinity:

podAntiAffinity:

requiredDuringSchedulingIgnoredDuringExecution:

  • labelSelector:

matchLabels:

k8s-app: metrics-server

namespaces:

  • kube-system

topologyKey: kubernetes.io/hostname

containers:

  • args:

#启动允许使用不安全的证书

  • --kubelet-insecure-tls

  • --cert-dir=/tmp

  • --secure-port=10250

  • --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname

  • --kubelet-use-node-status-port

  • --metric-resolution=15s

#image: registry.k8s.io/metrics-server/metrics-server:v0.7.0

image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.3

3,创建Metrics-Server资源

root@k8s231 metricsserver# kubectl apply -f high-availability-1.21+.yaml

4,验证Metrics-Server是否成功安装

· 查看pod

root@k8s231 metricsserver# kubectl get pods -A

· 使用top命令测试是否管用

查节点的top值

root@k8s231 metricsserver# kubectl top node

查看pod的top值

root@k8s231 metricsserver# kubectl top pods -A

三、hpa资源实现pod水平伸缩(自动扩缩容)

1,当资源使用超一定的范围,会自动扩容,但是扩容数量不会超过最大pod数量;

2,扩容时无延迟,只要监控资源使用超过阔值,则会直接创建pod;

3,当资源使用率恢复到阔值以下时,需要等待一段时间才会释放,大概时5分钟;

1,编辑deployment资源

root@k8s231 hpa# cat deploy.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: dm-hpa

spec:

replicas: 1

selector:

matchLabels:

k8s: xinjizhiwa

template:

metadata:

labels:

k8s: xinjizhiwa

spec:

containers:

  • name: c1

image: centos:7

command:

  • tail

  • -f

  • /etc/hosts

resources:

requests:

cpu: "50m"

limits:

cpu: "150m"

2,编写hpa资源清单

root@k8s231 hpa# cat hpa.yaml

apiVersion: autoscaling/v1

kind: HorizontalPodAutoscaler

metadata:

name: hpa-tools

spec:

#指定pod最大的数量是多少(自动扩容的上限)

maxReplicas: 10

#指定pod最小的pod数量是多少(自动缩容的下限)

minReplicas: 2

#弹性伸缩引用的目标是谁?

scaleTargetRef:

#目标资源的api

apiVersion: "apps/v1"

#目标资源的类型kind

kind: Deployment

#目标资源的名称metadata-name是什么

name: dm-hpa

#使用cpu阈值(使用到达多少,开始扩容、缩容)

#95%

targetCPUUtilizationPercentage: 95

3,创建hpa和deploy资源

root@k8s231 hpa# kubectl apply -f .

4,查看hpa资源

root@k8s231 hpa# kubectl get hpa -o wide

到这里,就已经实现了自动扩缩容的pod副本了;

至此,咱们的metrics-server组件和hpa资源,就学习完毕了;

四、压测测试

1,进入pod,安装stress工具

· 进入pod容器

root@k8s231 hpa# kubectl exec dm-hpa-5bb4dd448d-ks2rt -it -- sh

· 安装aili源和epel源

sh-4.2# yum -y install wget

sh-4.2# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

sh-4.2# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

· 安装压测工具

sh-4.2# yum -y install stress

2,开始使用命令压测pod

sh-4.2# stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 20m

3,查看hpa资源的负载情况

root@k8s231 \~# kubectl get hpa -o wide

可以看到:

1,我们创建的deploy资源只有一个副本;

2,我们创建的hpa资源之后,设置最小值是2,最大值是10 ;

3,我们在查看pod,可以看见,pod变成了2个;

4,我们进入容器,开始压测,将负载压测到超过95%;

5,再次查看pod,发现变成了3个,自动创建了一个;

6,关闭压测,5分钟后,pod有回归到了2个;

7,至此,hpa的pod自动伸缩,测试完毕;

相关推荐
张忠琳20 分钟前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 配置API模块深度分析之二
云原生·容器·架构·kubernetes·nvidia
Dear~yxy27 分钟前
LVS企业级实战
linux·服务器·lvs
摇曳的精灵40 分钟前
dify的docker部署
运维·docker·容器·dify
兮动人43 分钟前
Linux 安装 Claude Code 实战:Node.js、npm、GLM 配置一次跑通
linux·npm·node.js·cc·claude code
软件资深者1 小时前
QQ音乐PC版 使用教程:去广告绿色便携版音乐播放器,本地曲库管理与在线试听一键搞定,音乐播放器新手 5 分钟上手(2026)
测试工具·容器·娱乐·软件需求
2301_777998342 小时前
Linux线程控制——从线程创建到线程分离(第三部分:线程等待 pthread_join)
linux·运维·服务器·c语言·c++
谜之锋2 小时前
Linux 源码编译安装 net-snmp-5.9.1 并配置使用 SNMPv3
linux·运维·服务器·snmpv3
在水一缸2 小时前
深入浅出:Node.js 下一代 ORM 架构设计与实战解析
数据库·微服务·云原生·node.js·orm·架构设计
一直在努力学习的菜鸟2 小时前
阿里云2G2核的服务器可以做什么?
linux·运维
ShineWinsu2 小时前
对于Linux:自定义协议(基于TCP)实现网络计算器的解析
linux·网络·c++·网络协议·tcp/ip·面试·网络计算器