【K8S 云原生】K8S之HPA自动扩缩容、命名空间资源限制、容器抓包

目录

一、HPA概述

1、概念

2、两个重要的组件:

3、HPA的规则:

4、pod的副本数扩容有两种方式:

4.1、手动扩缩容,修改副本数:

4.2、自动扩缩容HPA

二、实验部署:

1、部署HPA

2、实现自动扩缩容

三、命名空间资源限制:

1、对命名空间进行限制

2、对命名空间中pod整体进行限制:

四、总结:

五、补充:哪些服务会部署在K8S当中:

六、K8S容器的抓包:

第一步:获取容器的container id

第二步:将container id解析为pid

第三步:进入容器内的网络命名空间

第四步:tcpdump抓包

补充:Linux中真机抓包

容器内抓包:


一、HPA概述

1、概念

Horizontal Pod Autoscaling:Pod的水平自动伸缩

K8S自带的模块

是根据Pod占用CPU的比率,到达一定的阀值,会触发伸缩机制

 HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。

1、HPA是基于kube-controll-manager服务,周期性的检测Pod的CPU使用率,默认30s检测一次

2、HPA和副本控制器replication controller以及deployment controller,都属于K8S的资源对象。通过跟踪分析副本控制器和deployment的Pod的负载变化,针对性的调整目标Pod的副本数。

阀值:正常情况下,Pod的副本数,以及达到阀值后,Pod的扩容最大数量

3、metrics-server部署到集群中,由他来对外提供度量的数据

2、两个重要的组件:

replication controller  副本控制器,控制的是Pod的副本数

deployment controller 节点控制器,部署Pod

HPA控制副本的数量以及控制如何部署Pod

3、HPA的规则:

1、定义pod的时候必须要有资源限制,否则HPA无法进行监控

2、扩容时即时的,只要超过阀值会立刻扩容,不是立刻扩容到最大副本数。他会在最小值和最大值之间波动。如果扩容的数量满足了需求,不会在扩容

3、缩容时缓慢的。如果业务的峰值较高,回收的策略太积极的话,可能会产生业务的崩溃。缩容的速度比较慢,扩容比较快

原因:周期性的获取数据,缩容的机制问题

4、pod的副本数扩容有两种方式:

4.1、手动扩缩容,修改副本数:

kubectl scale命令行扩缩容

kubectl edit deployment进入该replicas

进yaml文件改replicas,apply -f 部署更新

4.2、自动扩缩容HPA

HPA监控的是CPU,根据CPU自动扩缩容。扩的比较快(要立即满足需求),缩的比较慢(方式业务崩溃)

二、实验部署:

1、部署HPA

将镜像包拖到所有节点
docker load -i metrics-server.tar上传 components.yaml
配置文件改好了,直接用即可kubectl apply -f components.yamlkubectl get pod -n kube-system

kubectl top node
#查看所有节点占用主机资源的情况kubectl top pod
#查看pod占用主机资源的情况

2、实现自动扩缩容

实现:
vim hpa-test.yamlapiVersion: apps/v1
kind: Deployment
metadata:name: centos-testlabels:test: centos1
spec:replicas: 1selector:matchLabels:test: centos1template:metadata:labels:test: centos1spec:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]resources:limits:cpu: "1"memory: 512Mi---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa-centos7
spec:scaleTargetRef:
#指定要自动缩放的目标对象,这里是一个DeploymentapiVersion: apps/v1kind: Deploymentname: centos-test
#标签和上面deployment对应minReplicas: 1maxReplicas: 5
#自动扩缩的副本数,最大5,最小1targetCPUUtilizationPercentage: 50
#CPU利用率的阀值50%

进容器:

压力测试

容器占满两个CPU

因为他Limit资源限制最大使用是1个CPU,所以这里虽然压力2个,但是最多是能占一个CPU

#查看pod占用CPU状态
kubectl top pod

#kubectl get hpa -w
动态查看HPA

这里资源超过设定阀值后,会动态扩容,减轻资源压力。

比如,这里是一个pod的最大CPU使用率是1000,阀值是500,这里给1000的压力,超过500,选择扩容

扩容一个pod后,最大使用率是2000,压力是1000,加上进程的本身资源使用,他的CPU使用率实际上是超过50%,也就是1000m的,继而选择再次扩容

再扩容一个之后,三个pod最大使用率3000,阀值变成1500。给的CPU是1000,不足1500

所以不再继续扩容

所以这里显示的副本数停在了3个,而CPU使用率是33%,1000/3000

停止压力,测试缩容:

当CPU使用率不足阀值时,pod会缓慢、谨慎的缩容

扩容很快,缩容很慢

三、命名空间资源限制:

除了pod的资源限制外,还有命名空间的资源限制

K8S集群部署pod的最大数量:10000

busybox:就是最小化的centos 4M

1、对命名空间进行限制

apiVersion: apps/v1
kind: Deployment
metadata:name: centos-test2namespace: test1labels:test: centos2
spec:replicas: 4selector:matchLabels:test: centos2template:metadata:labels:test: centos2spec:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]resources:limits:cpu: 1000mmemory: 512Mi---apiVersion: v1
kind: ResourceQuota
metadata:name: ns-resourcenamespace: test1
spec:hard:
#硬限制pods: "5"
#表示在这个命名空间内只能部署10个podrequests.cpu: "2"requests.memory: 1Gilimits.cpu: "4"
#最多能占用4个CPUlimits.memory: 2Gi
#最多能占用内存2Gconfigmaps: "10"
#当前命名空间内创建最大的configmap的数量10个persistentvolumeclaims: "4"
#当前命名空间只能使用4个PVCsecrets: "9"
#创建加密的secrets,只能9个services: "5"
#创建service,只能5个services.nodeports: "2"
#NodePort类型的svc只能2个

限制pod数量和service数量:

apiVersion: apps/v1
kind: Deployment
metadata:name: centos-test2namespace: test2labels:test: centos2
spec:replicas: 6selector:matchLabels:test: centos2template:metadata:labels:test: centos2spec:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]resources:limits:cpu: 1000mmemory: 512Mi---apiVersion: v1
kind: ResourceQuota
metadata:name: ns-resourcenamespace: test2
spec:hard:
#硬限制pods: "5"services: "3"services.nodeports: "2"

设置完限制只能在这个命名空间中只能有5个pod和3个service

kubectl describe ns test1
#查看命名空间的资源限制

2、对命名空间中pod整体进行限制:

对整个命名空间中的pod进行全局的限制(内存、CPU),不够灵活

工作中还是对每个pod进行自定义限制


 

apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testnamespace: test2labels:test: centos
spec:replicas: 1selector:matchLabels:test: centostemplate:metadata:labels:test: centosspec:containers:- name: centos1image: centos:7command: ["/bin/bash","-c","yum -y install epel-release.noarch; yum -y install stress;sleep 3600"]resources:limits:cpu: "1"memory: 512Mi
---
apiVersion: v1
kind: LimitRange
#表示使用limitrange来进行资源控制
metadata:name: test2-limitnamespace: test2
spec:limits:- default:memory: 512Micpu: "1"defaultRequest:memory: 256Micpu: "0.5"type: Container
#default: 相当于limit
#defaultRequest: 相当于request
#type: Container pod pvc(很少有)

四、总结:

HPA自动扩缩容

命名空间限制:

第一种:resourcequote

可以对命名空间进行限制

第二种:LimitRange

直接声明命名空间中创建pod,容器的资源限制,这时一种统一限制。所有的pod都受这个条件约束

限制方式:

1、pod资源限制,一般是创建的时候声明好的,在工作中是必加选项

resources:

  limt

2、命名空间资源限制,对命名空间使用CPU和内存一定会做限制

resourcequote

3、命名空间统一资源限制,掌握即可,工作中一般配置前两个

LimitRange

在工作中一定对pod和命名空间资源(CPU和内存)进行限制

防止整个集群的资源,被一个服务或者命名空间占满

五、补充:哪些服务会部署在K8S当中:

中间键:一定K8S部署

kafka:6个pod

redis:3个pod

哪些服务会部署在K8S当中:

中间键:一定K8S部署

kafka:6个pod

redis:3个pod

业务服务:一定K8S部署

自定义的镜像创建的容器:

前端:50%容器化部署,前面两个容器化这个大概率容器化部署

nginx:3-6个pod

一般一共12个pod左右,每个都是独立的业务

mysql是实际部署的

ELK可能docker可能docker可能真机部署

一定在K8S部署的:

1、自定义的镜像创建的容器:

2、前端:50%容器化部署,前面两个容器化这个大概率容器化部署

nginx:3-6个pod

一般一共12个pod左右,每个都是独立的业务

mysql是实际部署的

ELK可能docker可能docker可能真机部署

六、K8S容器的抓包:

K8S容器抓包:

第一步:获取容器的container id

kubectl describe pod nginx1-6f44454d69-shqcr

第二步:将container id解析为pid

docker inspect --format '{{.State.Pid}}' 0bd8136bfb03b0717bf72c3793b9e4cfa15d809e85389a2f14f7b7ae0a78e172

第三步:进入容器内的网络命名空间

nsenter -n -t50148
#进入容器内的网络命名空间ip addr
#查看网卡设备名

第四步:tcpdump抓包

补充:Linux中真机抓包

Linux能否抓包????????

tcpdump(系统自带的)

指定抓包

动态抓包,一直获取,手动停止

只抓不分析

tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.10.0/24 -w ./target.captcpdump 固定格式
tcp 抓取tcp协议
-i 只抓经过ens33的数据包
-t 不显示时间戳
-s0 抓完整的数据包
-c 指定抓包的个数
dst port 80 访问httpd 80
src net 192.168.10.0/24   源地址来自192.168.10.0网段的ip
-w 抓包的数据,保存位置 
*.cap  Wireshark分析.cap 后缀的

容器内抓包:
tcpdump tcp -i eth0
#抓取tcp协议的数据包,指定经过eth0网卡

tcpdump icmp -i eth0
#抓取经过eth0网卡的icmp协议包

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

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

相关文章

智慧博物馆信息化系统建设(2)

物联网智能感知综合平台 物联网感知综合平台是综合物联网应用共性特点,贯穿感知、传输、应用服务三层的共性功能模块、协议和平台等的总称。 “感知综合平台基础标准+应用子集标准”体系已被ISO/IEC JTC1 国际标准化组织和国家物联网基础工作组认可,“物联网感知综合平台+应…

Pandas--简介(1)

Pandas 简介 Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。Pandas 是数据科学和…

GPTBots:利用FlowBot中的卡片和表单信息,提供丰富的客服体验

在当今的数字化时代,客户服务的形式和体验正在经历着前所未有的变革。传统的文字消息方式已经无法满足现代用户对于服务体验的多元化需求。那么,如何才能在这个信息爆炸的时代,让我们的服务方式更加个性化、多样化,从而提供更丰富…

博途1200PLC脉冲轴绝对定位往复运动控制FB(完整SCL源代码)

三菱PLC绝对定位指令往复运动控制请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/135570157https://rxxw-control.blog.csdn.net/article/details/135570157SMART PLC绝对定位往复运动控制 https://rxxw-control.blog.csdn.net/article/details/1…

VBA经典应用69例:基于文本条件的一般筛选及条件OR筛选

《VBA经典应用69例》(版权10178981),是我推出的第九套教程,教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开,这套教程案例众多,紧贴“实战”,并做“战术总结”,以便…

JAVA工程中引用本地jar的3种常用方式,你用过哪种?

文章目录 前言1. 第1种方式2. 第2种方式3. 第3种方式 前言 实际项目过程中咱们经常会碰到需要本地引用jar包到java工程中的场景,本文就介绍一下遇到此场景时如何在IDEA中导入本地jar包到工程中的3种方式,简单却很常用。 1. 第1种方式 IDEA -> File …

Linux中NFS服务器的搭建和安装

1.介绍: 网络文件系统即将本地系统放在网络上某一个位置的系统,基于UDP/IP使用nfs能够在不同计算机之间通过网络进行文件共享,能使使用者访问网络上其他计算机中的文件就像在访问自己的计算机一样,也就是说放在一个开发板上&#…

Mysql的骚操作说明

Mysql的常规操作 记录些不常用,但是很实用的操作,旨在在MySQL语言能解决的批量操作的问题,不动用其他动态或静态语言的辅助。 1、FROM_UNIXTIME 时间戳转时间格式 select scode,sid,gender,type,FROM_UNIXTIME(report_time) as report_time,FROM_UNIXTIME(add_time) as add…

[windows]win11任务管理器性能中N卡GPU看不到cuda进程Copy选项找不到cuda选项

正常情况下Copy里面有cuda选项,如图 对于不懂技术的人来说,有个误区,就是上图没有显示cuda选项就一定是cuda不能用吗?显然不是,这个选项只是方便在资源管理器展示cuda使用情况。如果在windows11你设置了一些东西则可能…

短视频矩阵系统软件源头开发+无人直播源头开发

首先:我了解您想要开发短视频矩阵系统和无人直播系统的需求。我们是一手源头自研开发,我们采用的是php7.40升级版开发模式 这些系统对于许多企业和个人来说都非常重要,因为它们可以帮助他们更好地管理他们的内容制作和营销活动。 开发这样的…

VUE---插槽

一、插槽的作用&场景 1、在封装组件的时候&#xff0c;将可变的结构设计为插槽&#xff08;<slot></slot>&#xff09; 2、使用上述组件的时候&#xff0c;可以按需为插槽提供自定义的结构&#xff0c;以达到复用组件且高度自定的效果 二、基本语法 1、组件内…

帝国cms使用手机号单篇付费下载的关键代码实现以及代码引用

#小李子9479# #帝国cms# 1。从服务器下载文件php代码 2。前端集成 a)需要一个下载的链接&#xff0c;只要包含button_down这个class即可&#xff0c;即可以为<div class"button_down" data-classid"[!--classid--]" data-infoid"[!--id--]"…

【DeepLearning-1】 注意力机制(Attention Mechanism)

1.1注意力机制的基本原理&#xff1a; 计算注意力权重&#xff1a; 注意力权重是通过计算输入数据中各个部分之间的相关性来得到的。这些权重表示在给定上下文下&#xff0c;数据的某个部分相对于其他部分的重要性。 加权求和&#xff1a; 使用这些注意力权重对输入数据进行加权…

代码随想录算法训练营29期|day28 任务以及具体安排

93.复原IP地址 class Solution {List<String> result new ArrayList<>();public List<String> restoreIpAddresses(String s) {StringBuilder sb new StringBuilder(s);backTracking(sb, 0, 0);return result;}private void backTracking(StringBuilder s,…

Linux中静态库和动态库的使用

库的概念 介绍&#xff1a; 库是一个二进制文件&#xff0c;包含的代码可被程序调用 标准C库、数学库、线程库… 库有源码&#xff0c;可下载后编译;也可以直接安装二进制包 位置一般放在&#xff1a;/lib /usr/lib库的知识 库是事先编译好的&#xff0c;可以复用的代码 在os上…

输入某年某月某日,判断这一天是这一年的第几天?(Java)

思路&#xff1a; 1&#xff0c;分别定义三个变量来接收 年 月 日 2&#xff0c;累加已经过完的月份的天数 日期 3&#xff0c;二月份的天数要根据是否是闰年&#xff0c;随之改变 1 3 5 7 8 10 12 ---> 31天 4 6 9 11 ---> 30天 2 ---> 闰…

== 和 equals:对象相等性比较的细微差别

和 equals&#xff1a;对象相等性比较的细微差别 既要脚踏实地于现实生活&#xff0c;又要不时跳出现实到理想的高台上张望一眼。在精神世界里建立起一套丰满的体系&#xff0c;引领我们不迷失不懈怠。待我们一觉醒来&#xff0c;跌落在现实中的时候&#xff0c;可以毫无怨言地…

鸿蒙原生应用遍地开花,中小开发者能否分到一杯羹?

2023年对于华为鸿蒙来说&#xff0c;是颇具转折意义的一年&#xff0c;年初还挣扎在生死线上&#xff0c;年末已然渡过了万重山&#xff0c;开始踏上万里路。 时间回到2022年的12月&#xff0c;Strategy Analytics研究报告显示&#xff0c;2022年华为鸿蒙HarmonyOS手机全球市场…

REVIT二次开发 自动门窗墙体标注

步骤1 步骤2 步骤3 using System; using System.Collections.Generic; using System.Linq; using System

用户资源(菜单)控制学习使用

效果图 第一步 需要再定义常量资源 //信访听证 资源前缀public static final String RESPREFIX_MODULE_XINFTZ_"module_xinftz_";//听证专家库public static final ConstantItem RES_MODULE_XINFTZ_TINGZZJK new ConstantItem(RESPREFIX_MODULE_XINFTZ_ "tin…