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

目录

一、概述

二、安装部署Metrics-Server组件

1.下载Metrics-Server资源清单

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

3.验证Metrics-Server是否成功安装

4.使用top命令测试是否管用

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

1.编写deploy资源清单

2.编写hpa资源清单

3.查看hpa资源

四、压测

1.进入pod,安装和使用stress工具

2.查看hpa资源的负载情况


一、概述

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资源清单

[root@k8s1 k8s]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

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

[root@k8s1 k8s]# vim high-availability-1.21+.yamlapiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-serverrbac.authorization.k8s.io/aggregate-to-admin: "true"rbac.authorization.k8s.io/aggregate-to-edit: "true"rbac.authorization.k8s.io/aggregate-to-view: "true"name: system:aggregated-metrics-reader
rules:
- apiGroups:- metrics.k8s.ioresources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-servername: system:metrics-server
rules:
- apiGroups:- ""resources:- nodes/metricsverbs:- get
- apiGroups:- ""resources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server-auth-readernamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server:system:auth-delegator
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:auth-delegator
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: system:metrics-server
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:metrics-server
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: v1
kind: Service
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:ports:- name: httpsport: 443protocol: TCPtargetPort: httpsselector:k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:replicas: 2selector:matchLabels:k8s-app: metrics-serverstrategy:rollingUpdate:maxUnavailable: 1template:metadata:labels:k8s-app: metrics-serverspec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:k8s-app: metrics-servernamespaces:- kube-systemtopologyKey: kubernetes.io/hostnamecontainers:- 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.1image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.3imagePullPolicy: IfNotPresentlivenessProbe:failureThreshold: 3httpGet:path: /livezport: httpsscheme: HTTPSperiodSeconds: 10name: metrics-serverports:- containerPort: 10250name: httpsprotocol: TCPreadinessProbe:failureThreshold: 3httpGet:path: /readyzport: httpsscheme: HTTPSinitialDelaySeconds: 20periodSeconds: 10resources:requests:cpu: 100mmemory: 200MisecurityContext:allowPrivilegeEscalation: falsecapabilities:drop:- ALLreadOnlyRootFilesystem: truerunAsNonRoot: truerunAsUser: 1000seccompProfile:type: RuntimeDefaultvolumeMounts:- mountPath: /tmpname: tmp-dirnodeSelector:kubernetes.io/os: linuxpriorityClassName: system-cluster-criticalserviceAccountName: metrics-servervolumes:- emptyDir: {}name: tmp-dir
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:minAvailable: 1selector:matchLabels:k8s-app: metrics-server
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:labels:k8s-app: metrics-servername: v1beta1.metrics.k8s.io
spec:group: metrics.k8s.iogroupPriorityMinimum: 100insecureSkipTLSVerify: trueservice:name: metrics-servernamespace: kube-systemversion: v1beta1versionPriority: 100[root@k8s1 k8s]# kubectl apply -f high-availability-1.21+.yaml

3.验证Metrics-Server是否成功安装

4.使用top命令测试是否管用

[root@k8s1 k8s]# kubectl top node
NAME   CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s1   734m         18%    867Mi           11%       
k8s2   118m         2%     493Mi           6%        
[root@k8s1 k8s]# kubectl top  pods -A
NAMESPACE      NAME                             CPU(cores)   MEMORY(bytes)   
default        dm01-7875cdc8b4-4lb62            0m           4Mi             
default        dm01-7875cdc8b4-mt7hs            0m           2Mi             
default        dm01-7875cdc8b4-zv94k            0m           2Mi             
kube-flannel   kube-flannel-ds-jg8nq            7m           20Mi            
kube-flannel   kube-flannel-ds-scx6p            7m           22Mi            
kube-system    coredns-6d8c4cb4d-55v2q          2m           18Mi            
kube-system    coredns-6d8c4cb4d-khrbf          2m           18Mi            
kube-system    etcd-k8s1                        14m          66Mi            
kube-system    kube-apiserver-k8s1              55m          175Mi           
kube-system    kube-controller-manager-k8s1     18m          50Mi            
kube-system    kube-proxy-lsjgc                 1m           19Mi            
kube-system    kube-proxy-vfbqr                 1m           17Mi            
kube-system    kube-scheduler-k8s1              4m           21Mi            
kube-system    metrics-server-dfb9648d6-2fcng   4m           19Mi            
kube-system    metrics-server-dfb9648d6-4l85l   4m           22Mi 

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

  1. 当资源使用超一定的范围,会自动扩容,但是扩容数量不会超过最大pod数量;
  2. 扩容时无延迟,只要监控资源使用超过阔值,则会直接创建pod;
  3. 当资源使用率恢复到阔值以下时,需要等待一段时间才会释放,大概时5分钟;

1.编写deploy资源清单

[root@k8s1 k8s]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dm-hpa
spec:replicas: 1selector:matchLabels:k8s: osleetemplate:metadata:labels:k8s: osleespec:containers:- name: c1image: centos:7command:- tail- -f- /etc/hostsresources:requests:cpu: "50m"limits:cpu: "150m"[root@k8s1 k8s]# kubectl apply -f deploy.yaml 
deployment.apps/dm-hpa created

2.编写hpa资源清单

[root@k8s1 k8s]# cat hpa.yaml 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa-tools
spec:#指定pod最大的数量是多少(自动扩容的上限)maxReplicas: 10#指定pod最小的pod数量是多少(自动缩容的下限)minReplicas: 2#弹性伸缩引用的目标是谁?scaleTargetRef:#目标资源的apiapiVersion: "apps/v1"#目标资源的类型kindkind: Deployment#目标资源的名称metadata-name是什么name: dm-hpa#使用cpu阈值(使用到达多少,开始扩容、缩容)#95%targetCPUUtilizationPercentage: 95[root@k8s1 k8s]# kubectl apply -f hpa.yaml 
horizontalpodautoscaler.autoscaling/hpa-tools created

3.查看hpa资源

[root@k8s1 k8s]# kubectl get hpa -o wide
NAME        REFERENCE           TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-tools   Deployment/dm-hpa   0%/95%    2         10        2          102s

四、压测

1.进入pod,安装和使用stress工具

# 进入pod容器
[root@k8s1 k8s]# kubectl exec -it pod/dm-hpa-844c748565-jpzxt -- sh
sh-4.2# yum -y install wget# 安装aili源和epel源
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# 开始使用命令压测pod
sh-4.2# stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 20m

2.查看hpa资源的负载情况

[root@k8s1 ~]# kubectl get hpa -o wide
NAME        REFERENCE           TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
hpa-tools   Deployment/dm-hpa   100%/95%   2         10        3          11m
[root@k8s1 ~]# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
dm-hpa-844c748565-jbn7s   1/1     Running   0          7m17s
dm-hpa-844c748565-jpzxt   1/1     Running   0          11m
dm-hpa-844c748565-tn8fr   1/1     Running   0          24m

可以看到:

  1. 我们创建的deploy资源只有一个副本;
  2. 我们创建的hpa资源之后,设置最小值是2,最大值是10 ;
  3. 我们在查看pod,可以看见,pod变成了2个;
  4. 我们进入容器,开始压测,将负载压测到超过95%;
  5. 再次查看pod,发现变成了3个,自动创建了一个;
  6. 关闭压测,5分钟后,pod有回归到了2个;
  7. 至此,hpa的pod自动伸缩,测试完毕;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sap Hana 数据迁移同步优化(二)

简述 CloudCanal 近期对 Hana 源端链路做了新一轮优化,这篇文章简要做下分享。 本轮优化主要包含: 表级别 CDC 表表级别任务位点表级别触发器 单 CDC 表的问题 CloudCanal 在实现 Hana 源端增量同步时,最初采用的是单 CDC 表的模式。 即所有订阅表…

【C语言】深入理解指针(一)(上)

本篇文章将讲解: (1)内存和地址 (2)指针变量和细致 (3)指针变量类型的意义 一:内存和地址 (1)内存 在讲内存和地址之前,我们讲一个生活中的…

Three.js 研究:1、如何让物体动起来

1、制作模型动画 2、模型动画在代码中的调用 使用这个例子进行修改,使他能动作webgl_animation_skinning_morph.html 制作好的模型放到如下路径 /three.js-master/examples/models/gltf/无标题.gltf修改加载模型文件的地址 修改动画名称 运行 点击动画后&…

彩虹聚合二级域名DNS管理系统源码v1.3

聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析, 目前已支持的域名平台有:阿里云、腾讯云、华为云、西部数码、CloudFlare。 本系统支持多用户,每个用户可分配不同的域名解析权限;支持API接口, 支持获…

Oracle 证书的重要性

随着信息技术的飞速发展,数据库管理已成为企业运营中不可或缺的一部分。Oracle作为全球领先的数据库管理系统提供商,其Oracle Certified Professional(OCP)认证已成为数据库管理员和开发人员追求的专业认证之一。本文将深入探讨Or…

标准化软件实施方案(直接套用即可)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施 软件开发全套资料获取:(本文末个人名片也可直接获取)软件开发全套资料_数字中台建设指南-CSDN博客 软件产品&am…

接口响应断言

目录 接口断言介绍接口断言方式介绍响应状态码断言 课程目标 掌握什么是接口断言。了解接口断言的多种方式。掌握如何对响应状态码完成断言。 思考 这两段代码是完整的接口自动化测试代码吗? …省略… when().get(“https://httpbin.ceshiren.com/get?namead&…

【LeetCode算法】第58题:最后一个单词的长度

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路:双指针法。low指向单词头,high指向单词后的空格,则high-low就是每个单词的长度。算法步骤:①low从头往后查找第一个非空格的字符&…

Python 将文件夹中的图片信息导入到 Excel 的表格

引言 在数据处理和管理的日常任务中,经常需要将文件夹中的图片文件信息(如文件名、路径、创建日期、大小、分辨率等)整理成一个 Excel 表格。这篇博客将介绍如何使用 Python 中的 wxPython 模块创建一个 GUI 应用,用户可以通过这…

【Linux】用户级缓冲区

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

微服务项目收获和总结---第4天(文章审核和保存)

文章审核以及APP端保存文章 业务流程: App端保存接口: 数据库表详情 文章的基本信息表:id,标题,作者id,频道id...... 文章的权限/配置表:存储文章是否可以评论,是否上架&#xff…

开源实用!猫抓媒体嗅探浏览器插件

CatCatch:网络资源,一触即发 - 精选真开源,释放新价值。 概览 CatCatch是一个专为浏览器设计的资源嗅探扩展,旨在帮助用户轻松捕获和分析网页中的各种资源。无论是视频、音频还是其他类型的文件,猫爪都能提供直观的界…

在XP/Vista系统下使用Node.js的babel-cli命令行工具转码ES6语法的js文件,让IE8浏览器也能运行

在XP系统下IE浏览器最高只能装到IE8,在Vista系统下最高只能装到IE9。 2015年以后,JavaScript新增了很多语法,比如class、extends,还有let和const等等,这些语法都是XP下的终端浏览器IE8所不支持的。要想让使用了这些新式…

AI爆文写作:关注热点,提前埋伏好关键词,吃系统的热点推荐,吃搜索流量,让你的文章直接爆了!

做内容,要对热点敏感。 小米汽车的发布会时间,我们是不是提前就知道,发布会前,大家最关注的就是价格。 你看这个相关关键词搜索,10W太多了。 我看到有博主在发布会前,埋伏了一篇,公众号也有推…

读人工智能时代与人类未来笔记13_网络57

1. jun背控制 1.1. 威慑的目的是通过威胁发动盒站来防止盒站 1.2. jun背控制的目的是通过限制甚至废除57(或57类别)本身来防止盒站真 1.2.1. 与盒不扩散相配合,以一整套详尽的条约、技术保障措施、监管和其他控制机制为支撑,所…

B站pink老师CSS学习(二)

文章目录 一、emmet语法1.快速生成HTML结构语法 二、复合选择器1.什么是复合选择器2.后代选择器3.子选择器4.并集选择器5.伪类选择器6.链接伪类选择器7:focus伪类选择器8.总结 三、元素的显示模式1.什么是元素显示模式2.块元素3.行内元素4.行内块元素5.总结6.元素显…

08.1.jenkins安装方法

安装 配置官方下载源 #配置jenkins源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key下载jak、jenkins服务 #下载jdk11环境,并且配置yu…

C++ | Leetcode C++题解之第110题平衡二叉树

题目: 题解: class Solution { public:int height(TreeNode* root) {if (root NULL) {return 0;}int leftHeight height(root->left);int rightHeight height(root->right);if (leftHeight -1 || rightHeight -1 || abs(leftHeight - rightH…

10.3.k8s的附加组件-图形化管理工具dashboard

目录 一、dashboard介绍 二、部署安装dashboard组件 1.下载dashboard本地文件 2.修改nodeport的端口范围 3.创建和查看dashboard 4.电脑浏览器访问测试 5.token登录方式登录dashboard 5.1.查看dashboard的token 5.2.继续查看用户token的secrets资源详细信息 5.3.复制…

【Linux】icmp_seq=1 Destination Host Unreachable

执行ping 命令提示:From 192.168.XX.XX icmp_seq1 Destination Host Unreachable 这个错误消息通常表示以下几种情况之一: 网络连接问题:目标主机可能没有连接到网络,或者网络中的某个路由器无法将数据包转发到目标主机。 目标主…