kubernetes中的附件组件Metrics-server与hpa资源实现对pod的自动扩容和缩容

一、概述

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

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

二、安装部署 Metrics-Server组件

安装目的,就是给k8s集群安装top命令

1、下载Metrics-Server资源清单

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

下载好的 high-availability-1.21+.yaml文件

apiVersion: 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:- --cert-dir=/tmp- --secure-port=10250- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution=15simage: registry.k8s.io/metrics-server/metrics-server:v0.7.1imagePullPolicy: 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

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

....     topologyKey: 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: /livez

....

 3、创建Metrics-Server资源

[root@master study-demo]# kubectl apply -f high-availability-1.21+.yaml 
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
poddisruptionbudget.policy/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
 

4、查看安装结果 

4.1 查看pod

[root@master study-demo]# kubectl get pod --show-labels -A  | grep metrics

4.2 kubectl top node 命令查看节点信息

 

4.3 kubectl top pods -A 命令查看pod信息

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

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

3.1 编写deployment资源清单

[root@master hpa-demo]# cat deployment.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm-hpa
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s: dolphin
  template:
    metadata:
      labels:
        k8s: dolphin
    spec:
      containers:
      - name: c1
        image: centos:7
        command:
        - tail
        - -f
        - /etc/hosts
        resources:
          requests:
            cpu: "50m"
          limits:
            cpu: "150m"
 

3.2 编写hpa资源清单绑定deployment

[root@master hpa-demo]# cat hpa.yaml 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-tools
spec:
  maxReplicas: 10 # 扩容上线
  minReplicas: 2  # 缩容下限
  scaleTargetRef: # 扩缩容的目标
    apiVersion: "apps/v1"
    kind: Deployment
    name: dm-hpa
  targetCPUUtilizationPercentage: 95 #cpu阈值达到95%开始扩缩容

 

3.3 创建上面两个资源

[root@master hpa-demo]# kubectl apply -f deployment.yaml 
[root@master hpa-demo]# kubectl apply -f hpa.yaml 
 

3.4 查看hpa资源

可以看到我们deployment.yaml文件中的副本是1,创建hap绑定资源后,会根据hpa的配置,这里配置了2个,所以就创建了2个pod资源。

四、压测测试


1,进入pod,安装stress工具


· 进入pod容器

[root@master 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@master ~]# 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自动伸缩,测试完毕;

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

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

相关文章

Win 下 ncnn 编译运行

ncnn 官网上编译的过程比较详细,本文主要记录编译、运行过程中遇到的问题,希望可以帮到大家。 我的环境是 Win10 系统,VS 2022。 编译 先使用如下命令获取 ncnn 代码库: git clone https://github.com/Tencent/ncnn.git cd n…

【库函数】Linux下动态库.so和静态库.a的生成和使用

目录 🌞1. Linux下静态库和动态库的基本概念 🌞2. 动态库 🌊2.1 动态库如何生成 🌍2.1.1 文件详情 🌍2.1.2 编译生成动态库 🌊2.2 动态库如何使用 🌍2.2.1 案例 🌍2.2.2 动态…

速卖通自养号测评:如何规避安全风险?

对于初涉电商领域的新卖家而言,进行销量测评显得尤为关键。由于速卖通新店铺往往难以获得平台活动的支持,流量也相对匮乏,因此,开店的首要任务便是进行测评,通过积累一定的评论和销售数据。 测评的益处颇多&#xff0…

【数据结构与算法】8.二叉树的基本概念|前序遍历|中序遍历|后序遍历

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

4.3网安学习第四阶段第三周回顾(个人学习记录使用)

本周重点 ①Java入门基础 ②Java方法入门 ③Java面向对象(**重点) ④Java的Maven构建项目工具 ⑤Java其他操作补充 ⑥Java序列化和反序列化 ⑦Url 的DNS 审计链(**难点) ⑧Springboot和前端数据分离(主流使用) ⑨Common Collections(CC链漏洞) 本周主要内容 ①Java入…

使用 Flutter 打造引人入胜的休闲游戏体验

作者 / Zoey Fan 去年,Flutter 休闲游戏工具包进行了一次重大更新。近期在旧金山举办的游戏开发者大会 (GDC) 上,Flutter 首次亮相。GDC 是游戏行业的顶级专业盛会,致力于帮助游戏开发者不断提升开发技能。欢迎您继续阅读,了解开发…

01、创建型-单例模式--只有一个实例

文章目录 前言一、基本介绍1.1 什么是单例模式1.2 为什么要用单例模式1.3 应用场景1.4 单例优缺点 二、单例模式的实现方式2.1 饿汉式单例2.1.1 静态变量方式2.1.2 静态代码块 2.2 懒汉式单例2.2.1 懒汉式单例2.2.2 懒汉式优化①-线程安全2.2.2 懒汉式优化②-双重检查锁2.2.3 懒…

智能人事管理系统:全球团队高效管理之道

在全球化背景下,企业面临着管理分布在各地的员工队伍的挑战。为了确保人力资源管理的高效运作,实现跨地域、跨时区的协同工作,智能化人事管理系统应运而生。本文将重点介绍一款功能全面、智能化的人事管理系统都具备哪些功能,可以…

upload-labs第十七十八关

第十七关 $is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_name $_FILES[upload_file][name];$temp_file $_FILES[upload_file][tmp_name];$file_ext substr($file_name,strrpos($file_name,".")1);$upload_file …

【面试必会】线程池创建方式详解

最近面试问道了线程池的创建方式,这里出一篇文章记录下这一知识点! 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的ThreadFactory创建…

【QT】Ubuntu22.04 配置 QT6.5 LTS

【QT】Ubuntu22.04 配置 QT6.5 LTS 文章目录 【QT】Ubuntu22.04 配置 QT6.5 LTS1.注册QT Group的账号2.安装QT Creator3.启动QT Creator报错from 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.4.运行QT的demoReference 1.注册QT Group的…

JAVASE基础语法(异常、常用类)

一、异常 1.1 什么是异常 异常就是指不正常。是指代码在运行过程中可能发生错误,导致程序无法正常运行。 package com.atguigu.exception;public class TestException {public static void main(String[] args) {int[] arr {1,2,3,4,5};System.out.println(&quo…

【AI写作】未来科技趋势:揭秘DreamFusion的革新力量

首先,这篇文章是基于笔尖AI写作进行文章创作的,喜欢的宝子,也可以去体验下,解放双手,上班直接摸鱼~ 按照惯例,先介绍下这款笔尖AI写作,宝子也可以直接下滑跳过看正文~ 笔尖Ai写作:…

数据库之数据库恢复技术思维导图+大纲笔记

大纲笔记: 事务的基本概念 事务 定义 用户定义的一个数据库操作系列,这些操作要么全做,要么全不做,是一个不可分割的基本单位 语句 BEGIN TRANSACTION 开始 COMMIT 提交,提交事务的所有操作 ROLLBACK 回滚&#xff0c…

Centos之yum安装好玩的命令

1.会动的小火车 我在root下使用的 yum install sl.x86_64sl2.figlet yum install figlet.x86_64figlet 55553.cowsay会说话 yum install cowsay

防火墙详细讲解

目录 介绍 防火墙的特征 防火墙的组成 介绍 防火墙(firewall)是指一种计算机硬件和软件的结合,将内部网和公众访问网(如Internet)分开的方法,它实际上是一种隔离技术。防火墙主要由服务访问规则、验证工…

python数字验证码自动识别

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在网络上,许多网站和应用程序使用验证码(Completely Automated Publ…

MYSQL 存储java.sql.Timestamp类型的数据时,mysql存储时间和java获取到的时间相差8小时

###JAVA JDBC驱动 com.mysql.cj.jdbc.DriverJDBC连接字符串 jdbc:mysql://127.0.0.1:3006/db?useUnicodetrue&characterEncodingUTF8&useLegacyDatetimeCodefalse&serverTimezoneUTCMySQL 时区 show global variables like “%time_zone%”; 问题分析 驱动…

网络安全之SQL注入漏洞复现(中篇)(技术进阶)

目录 一,报错注入 二,布尔盲注 三,sleep延时盲注 四,DNSlogs 盲注 五,二次注入 六,堆叠注入 总结 一,报错注入 报错注入就是在错误信息中执行 sql 语句,利用网站的报错信息来带…

【奶奶看了都会】用 AI做猫咪剧情短片保姆级教程

大家这段时间在刷短视频的时候,是不是经常会刷到那种猫咪剧情短片,配合喵喵喵......的魔性背景音乐,让人看了非常上头。最近这类视频在抖音、视频号、小红书上非常火,今天就来教大家如何制作。 1.GPT4账号准备 我们用到的AI生图…