Kubernetes入门 十、HPA 自动扩/缩容

目录

  • 概述
  • 安装metrics-server
  • 使用HPA

概述

我们已经可以通过手动执行 kubectl scale 命令实现Pod的扩缩容,但是这显然不符合 Kubernetes 的定位目标–自动化和智能化。Kubernetes 期望可以通过监测Pod的使用情况,实现 Pod 数量的自动调整,于是就产生了 HPA 这种控制器。

HPA(Horizontal Pod Autoscaler) 可以获取每个 Pod 的利用率,然后和 HPA 中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现 Pod 的数量的调整。其实 HPA 和之前的 Deployment 一样,也属于一种 Kubernetes 资源对象,它通过追踪分析目标Pod的负载变化情况,来确定是否需要针对性的调整目标 Pod 的副本数。

通常用于 Deployment,不适用于无法扩/缩容的对象,如 DaemonSet

在这里插入图片描述

特点:

  • 控制管理器每隔30s(可以通过–horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况
  • 支持三种metrics类型
    • 预定义metrics(比如Pod的CPU)以利用率的方式计算
    • 自定义的Pod metrics,以原始值(raw value)的方式计算
    • 自定义的object metrics
  • 支持两种metrics查询方式:Heapster和自定义的REST API
  • 支持多metrics

安装metrics-server

metrics-server是用来监控k8s资源指标的组件,需要额外安装。

  1. 下载 metrics-server 组件配置文件:
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml
  1. 修改镜像地址为国内的地址
sed -i 's/k8s.gcr.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml
  1. 修改容器的 tls 配置,不验证 tls

在 containers 的 args 参数中增加 --kubelet-insecure-tls 参数

  1. 安装组件
kubectl apply -f metrics-server-components.yaml

查看下安装是否成功:

kubectl get po --all-namespaces | grep metrics
# 结果如下
kube-system   metrics-server-7c6df44c98-fmm62          1/1     Running   0              65s

成功安装到了kube-system 下。

使用HPA

实现 cpu 或内存的监控,首先有个前提条件是该对象必须配置了 resources.requests.cpuresources.requests.memory 才可以,可以配置当 cpu/memory 达到上述配置的百分比后进行扩容或缩容。

新建nginx-hpa.yaml,添加资源配置,文件如下:

apiVersion: apps/v1  # deployment api 版本
kind: Deployment  # 资源类型为deployment
metadata:  # 元信息labels:  # 标签app: nginx-hpaname: nginx-hpa # deployment的名字namespace: default  # 所在命名空间
spec:replicas: 3  # 期望副本数revisionHistoryLimit: 10  # 进行滚动更新后,保留的历史版本数selector:  # 选择器,用于找到匹配的RS,管理指定标签的RsmatchLabels:  # 按照标签匹配app: nginx-hpa  # 匹配的标签strategy:  # 更新策略rollingUpdate:  # 滚动更新配置maxSurge: 25%  # 进行滚动更新时,更新的个数超过期望副本数的比例maxUnavailable: 25%  # 进行滚动更新时,最大不可用更新比例,也就是更新不成功最多能有多少个type: RollingUpdate  # 更新策略采用滚动更新template:  # pod模板metadata:  # pod的元信息labels:  # pod的标签app: nginx-hpaspec:  # pod的描述信息containers: # pod的描述信息- image: nginx:1.7.9   # pod使用镜像imagePullPolicy: IfNotPresent   # 镜像拉取策略name: nginx  # 容器名称resources:limits:cpu: 200mmemory: 128Mirequests:cpu: 100mmemory: 128MirestartPolicy: Always  # 重启策略terminationGracePeriodSeconds: 30  # 容器删除等待时间

部署一下:

kubectl apply -f nginx-hpa.yaml
# deployment.apps/nginx-hpa created

查看下po:

kubectl get po
# 3个pod如下
NAME                         READY   STATUS    RESTARTS   AGE
nginx-hpa-5465c4859b-85jtv   1/1     Running   0          41s
nginx-hpa-5465c4859b-crlr7   1/1     Running   0          41s
nginx-hpa-5465c4859b-k7h64   1/1     Running   0          41s

接着可以使用top命令查看资源使用情况:

kubectl top po
# 3个pod的cpu和MEMORY使用情况如下
NAME                         CPU(cores)   MEMORY(bytes)
nginx-hpa-5465c4859b-85jtv   0m           7Mi
nginx-hpa-5465c4859b-crlr7   0m           8Mi
nginx-hpa-5465c4859b-k7h64   0m           14Mi

然后需要创建出一个HPA才能实现自动扩容缩容。

使用如下命令创建一个HPA:

kubectl autoscale deploy nginx-hpa --cpu-percent=20 --min=2 --max=5
# --cpu-percent=20即cpu使用率超过20%进行扩容
# 最少有2个副本,最多扩容到5个
# 注意:如果初始副本数少于2个,那么一旦HPA部署完成,就会把pod扩容到2个

查看HPA:

kubectl get hpa
# 结果如下
NAME        REFERENCE              TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
nginx-hpa   Deployment/nginx-hpa   <unknown>/20%   2         5         0          19s

可以看下TARGETS,前面unknown表示还没有占用,后面的20% 标识目标是20%就扩容。

可以通过一定手段,是cpu使用率达到20% ,这样就会自动扩容,这里不在演示。

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

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

相关文章

JDBC编程

文章目录 一、概述二、使用 一、概述 1.概念 JDBC&#xff08;Java Database Connectivity java数据库连接&#xff09;指的是通过Java代码&#xff0c;来操作数据库&#xff0c;是一种用于执行SQL语句的Java API&#xff0c;是Java中的数据库连接规范。这个API由 java.sql.,…

SpringBoot介绍与搭建

SpringBoot Spring Boot 是由 Pivotal 团队提供的在 spring 框架基础之上开发的框架&#xff0c; 其设计目的是用来简化应用的初始搭建以及开发过程。对spring搭建过程中的繁琐模板配置以及版本依赖问题进行解决(优化)不使用xml进行配置&#xff0c;提供其他的方式进行配置,使…

pytorch异常——RuntimeError:Given groups=1, weight of size..., expected of...

文章目录 省流异常报错异常截图异常代码原因解释修正代码执行结果 省流 nn.Conv2d 需要的输入张量格式为 (batch_size, channels, height, width)&#xff0c;但您的示例输入张量 x 是 (batch_size, height, width, channels)。因此&#xff0c;需要对输入张量进行转置。 注意…

第 112 场 LeetCode 双周赛题解

A 判断通过操作能否让字符串相等 I s 1 s1 s1和 s 2 s2 s2第 1 1 1、 2 2 2位若同位置不等&#xff0c;则 s 1 s1 s1交换对应的 i i i和 j j j位置&#xff0c;之后判断 s 1 s1 s1和 s 2 s2 s2是否相当 class Solution { public:bool canBeEqual(string s1, string s2) {for (i…

全脑建模:过去、现在和未来

什么是全脑建模&#xff1f; 全脑建模(WBM)是计算神经科学的子领域&#xff0c;涉及近似全脑神经活动的计算和理论模型。该方法的目标是研究神经活动的宏观时空模式如何由解剖连接结构、内在神经动力学和外部扰动(感觉、认知、药理、电磁等)的相互作用产生。这种宏观现象及其模…

CSS3D+动画

CSS3D 1.css3D 给父元素设置 perspective:景深:近大远小的效果900-1200px这个范围内 transform-style:是否设置3D环境 flat 2D环境 默认值 perserve-3D环境 3D功能函数 1.位移: translateZ()translate3D(x,y,z) <!DOCTYPE html> <html lang"en"><h…

CDH6.3.2集成Kerberos

CDH6.3.2集成Kerberos 一.参考doc CDH enable kerberos: Kerberos Security Artifacts Overview | 6.3.x | Cloudera Documentation CDH disable kerberos:https://www.sameerahmad.net/blog/disable-kerberos-on-CDH; https://community.cloudera.com/t5/Support-Questions…

图像处理简介

目录 基本术语 1 .图像(image) 1.1 像素(Pixel) 1.2 颜色深度&#xff08;Color Depth&#xff09; 1.3 分辨率&#xff08;Resolution&#xff09; 1.4 像素宽高比&#xff08;Pixel Aspect Ratio&#xff09; 1.5 帧率(FPS) 1.6 码率&#xff08;BR&#xff09; 1. …

数据库(MySQL)的存储过程

一、存储过程介绍 存储过程是事先经过编译并存储在数据库中的一段SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理的效率是有好处的。 存储过程思想上很简单&#xff0…

音频——I2S 右对齐模式(四)

I2S 基本概念飞利浦(I2S)标准模式左(MSB)对齐标准模式右(LSB)对齐标准模式DSP 模式TDM 模式 文章目录 I2S right时序图逻辑分析仪抓包 I2S right I2S 右对齐标准 也叫日本格式&#xff0c;sony 格式。相比于标准左对齐格式&#xff0c;标准右对齐的不足在于接收设备必须事先知…

53 个 CSS 特效 3(完)

53 个 CSS 特效 3&#xff08;完&#xff09; 前两篇地址&#xff1a; 53 个 CSS 特效 153 个 CSS 特效 2 这里是第 33 到 53 个&#xff0c;很多内容都挺重复的&#xff0c;所以这里解释没之前的细&#xff0c;如果漏了一些之前的笔记会补一下&#xff0c;写过的就会跳过。…

11 - 深入了解NIO的优化实现原理

Tomcat 中经常被提到的一个调优就是修改线程的 I/O 模型。Tomcat 8.5 版本之前&#xff0c;默认情况下使用的是 BIO 线程模型&#xff0c;如果在高负载、高并发的场景下&#xff0c;可以通过设置 NIO 线程模型&#xff0c;来提高系统的网络通信性能。 我们可以通过一个性能对比…