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-server
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
    rbac.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.io
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
  name: system:metrics-server
rules:
- apiGroups:
  - ""
  resources:
  - nodes/metrics
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server-auth-reader
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server:system:auth-delegator
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: system:metrics-server
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:metrics-server
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: metrics-server
  strategy:
    rollingUpdate:
      maxUnavailable: 1
  template:
    metadata:
      labels:
        k8s-app: metrics-server
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchLabels:
                k8s-app: metrics-server
            namespaces:
            - kube-system
            topologyKey: kubernetes.io/hostname
      containers:
      - args:
        - --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.1
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /livez
            port: https
            scheme: HTTPS
          periodSeconds: 10
        name: metrics-server
        ports:
        - containerPort: 10250
          name: https
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /readyz
            port: https
            scheme: HTTPS
          initialDelaySeconds: 20
          periodSeconds: 10
        resources:
          requests:
            cpu: 100m
            memory: 200Mi
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - ALL
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
          seccompProfile:
            type: RuntimeDefault
        volumeMounts:
        - mountPath: /tmp
          name: tmp-dir
      nodeSelector:
        kubernetes.io/os: linux
      priorityClassName: system-cluster-critical
      serviceAccountName: metrics-server
      volumes:
      - emptyDir: {}
        name: tmp-dir
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  minAvailable: 1
  selector:
    matchLabels:
      k8s-app: metrics-server
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  labels:
    k8s-app: metrics-server
  name: v1beta1.metrics.k8s.io
spec:
  group: metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: metrics-server
    namespace: kube-system
  version: v1beta1
  versionPriority: 100

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

....     
       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.1
        image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.3
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            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.mfbz.cn/a/570339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python从0到100(十六):面向对象编程入门

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

基于SSM的教务管理系统

功能模块 登录界面 管理员端 教师端 学生端 部分源码 //登录表单处理RequestMapping(value "/login", method {RequestMethod.POST})public String login(Userlogin userlogin) throws Exception {//Shiro实现登录UsernamePasswordToken token new UsernamePasswo…

F-47创建预付款请求

F-47创建预付款请求 需要删除 可以使用FB08 冲消即可

【SMART目标法】项目管理必会的思维分析工具 06

SMART分析方法,是让管理者的工作变被动为主动的一个很好的手段。实施目标管理不但是有利于员工更加明确高效地工作,更是为未来的绩效考核制定了目标和考核标准,使考核更加科学化、规范化,更能保证考核的公开、公平与公正。 “sma…

Java调用ffmpeg把rtsp视频流保存为MP4文件,并播放

前言:最近项目需要把rtsp的视频流截取保存为MP4文件。经过多方调研,最终找到方案:调用ffmpeg命令行完成转码。ffmpeg命令行确实稳定靠谱!ok,下面就开始分享代码。 1、环境工具准备 ffmpeg的程序和一个稳定的rtsp流 这是我的ffmpeg的版本。 我这里rtsp流用的海康硬盘录里…

制造业工厂数字化转型的具体方法

制造业工厂数字化转型是指将传统的制造业生产过程和管理方式应用数字技术进行改造和升级,以提高生产效率、降低成本、优化产品质量和提升企业竞争力。 制造业数字化转型基本概念: 1. 数字化生产:将传统工艺流程数字化,通过自动化设…

【Linux】:epoll

高级IO 一.各种接口二.工作模式 按照man手册的说法: 是为处理大批量句柄而作了改进的poll. 一.各种接口 快速认识接口: events可以是以下几个宏的集合: EPOLLIN : 表示对应的文件描述符可以读 (包括对端SOCKET正常关闭); EPOLLOUT : 表示对应的文件描…

智慧灯杆综合管理平台建设思路及系统方案设计

一、建设思路 智慧灯杆综合管理平台的建设旨在实现城市基础设施的智能化、信息化和高效化。在构建这一平台时,我们首先要明确其核心理念:以灯杆为载体,整合各类城市服务资源,通过先进的物联网技术和大数据分析,为城市…

欧美助听器市场热门品牌盘点,国产爱可声备受青睐

近年来,随着中国技术的不断进步和品质的提升,国产助听器品牌爱可声在欧美市场备受瞩目。在欧美国家助听器市场,有许多热门品牌分别为:峰力、斯达克、瑞声达、爱可声等。这些品牌凭借其悠久的历史、先进的技术和高品质的产品&#…

Python3:强大的编程语言及其广泛应用

点击下载《Python3:强大的编程语言及其广泛应用》 1. 前言 Python3作为一种强大的编程语言,凭借其简洁易读、功能丰富以及强大的扩展性,已经成为编程界的热门选择。本文将详细介绍Python3的主要特性、应用领域以及它在实际项目中的优势&…

胖东来的商业启示!2024创业赛道!2024创业新项目新商机!2024创业风口!2024普通人的创业机会!2024创业赚钱项目!

在中国零售业,胖东来是“神”一般的存在,不讲业绩,只讲幸福,却造就了全国最具人效和坪效的零售门店,都说胖东来成功的核心秘诀是“把人当人”。 当然胖东来的成功可不是偶然,它背后是于东来多年来的坚持与努…

提高在线考试成绩的备考技巧与建议

参加在线考试已经成为现代学习的一部分,它的便利性和灵活性为学生提供了更多的学习机会。然而,为了在在线考试系统中取得好成绩,备考技巧是非常重要的。 设置明确的学习目标 在备考在线考试之前,为自己设定明确的学习目标是非常重…

通义灵码-IDEA的使用教程

通义灵码-IDEA的使用教程 1、通义灵码是什么? 通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#…

【svgwrite 库简介,附代码】如何将 .ttf 字体文件转化为 .svg 矢量图形?

当涉及到字体和矢量图形时,.ttf 和 .svg 是两种不同的文件格式: .ttf (TrueType Font): .ttf 文件是一种常见的字体文件格式,用于存储 TrueType 字体。TrueType 是一种字体轮廓的标准,它使用贝塞尔曲线描述字形&…

linux中git的使用

为什么要有git git相当于一个仓库可以让我们更好的去管理我们的代码,实现版本的控制,上传到云端仓库。有了git,就可以实现多人同时开发一个项目(每个负责一部分代码,最后都上传到同一个仓库)。 git github/gitee 的区…

羊大师分享,羊奶夏日里的养生佳品

羊大师分享,羊奶夏日里的养生佳品 羊奶,作为夏日里的养生佳品,确实拥有诸多益处。在炎炎夏日,人体面临着高温、湿度的双重考验,身体容易出现各种不适,而羊奶正好可以为我们提供多方面的滋养与保护。 羊奶…

UTONMOS:用区块链技术拓展商业边界在哪里?

引言 大约从 2021 年Web 3 这个新概念开始受到风险基金和科技圈的普遍关注。但如果你对过去几年区块链的发展历史足够了解,就应该已经意识到现在的 Web 3 并不是什么新技术,甚至不是旧技术的进步,它只是一个基于区块链技术的宏大构想。 我是…

光伏储能控制系统的功能策略

一、控制策略 1、功率控制策略 光伏阵列的输出功率受光照和温度影响,最大功率点是转换太阳能为电能的最高效点。MPPT控制器根据实时参数调整光伏阵列工作点,确保其始终处于最大功率输出状态,提高能量转换效率,增加发电量&#x…

产品经理好干吗?

赚钱的工作都不轻松吧,除非是家里资源好的。 产品经理的薪资还是可观的 ,小白如何成为产品经理? 首先要有经验,有理论知识,对想从事产品经理相关岗位的人来说,这基本是个必考的证书了,感兴趣的…

【每天一个linux小知识】nslookup

往期文章 tailf 和 tail -f 目录 往期文章什么是 nslookup示例参考 什么是 nslookup nslookup全称 name server lookup nslookup 是一款常用的网络工具,用于查询 DNS 的记录。通过 nslookup,用户可以查找特定主机的 IP 地址、查询域名的 MX 记录&…