【kubernetes】资源调度综合篇,HPA自动扩/缩容等功能

一、标签和选择器

1、标签

  • 命令行操作
# 查看标签
kubectl get [资源类型] [资源名] --show-labels

# 修改标签
kubectl label [资源类型] [资源名] [标签名]=[标签值] --overwrite

# 创建标签
kubectl label [资源类型] [资源名] [标签名]=[标签值]
  • Yalm文件操作

2、选择器

  • 命令行操作
# 【单条件】选择查看指定标签 type1=app1
kubectl get [资源类型]  -l [标签名1]=[标签值1]

# 【多条件】选择查看指定标签 type1=app1 且 type2=app2
kubectl get [资源类型]  -l [标签名1]=[标签值1],[标签名2]=[标签值2]
kubectl get [资源类型]  -l '[标签名1]=[标签值1],[标签名2] in (标签值2,标签值3,标签值4)'

  • Yalm文件操作

二、Deployment (Deploy)

1、创建

通过deployment创建后,查看其yaml文件配置,拷贝有用配置,创建新的yaml文件进行编辑,在创建

# 命令创建资源deploy-nginx
kubectl create deploy [deploy名] --image=nginx

# 查看其对应的yaml文件
kubectl get deploy [deploy名] -o yaml

# 复制可用配置信息,粘贴到新的new—deploy.yaml文件中
vim ./new-deploy.yaml

# 更改完配置后,在运行生成新的容器
kubectl create/apply -f new-deploy.yaml

2、滚动更新

# 编辑deployment资源
kubectl edit deploy [deploy名]

# 更改pod模板的版本号(由‘1.7.9’改为‘1.9.1’)
# 方法一:更改yaml文件配置后,保存并退出
containers:
- image: nginx:1.9.1 #更改此处
# 方法二:通过命令更改
kubectl set image deployment/[deploy名] nginx=nginx:1.9.1 --record '更新原因'

# 查看滚动是否完成
kubectl rollout status deploy [deploy名]

# 查看详细更新记录,细看最后‘Events’详细滚动更新信息
kubectl describe deploy  [deploy名]

3、回滚

# 查看之前更新的版本
kebectl rollout history deployment/[deploy名]

# 查看Deployment的历史记录以确定要回滚到的版本信息(只是查看,不执行回滚):
kubectl rollout history deployment/[deploy名] --revision=[回滚版本号]

# 回滚到指定版本
kubectl rollout undo deployment/[deploy名] --to-revision=[回滚版本号]

# 回滚到上一个版本
kebectl rollout undo deployment/[deploy名]

# 手动编辑指定版本,保存后更新
kubectl edit deployment <deployment-name>

注意:只所有可以回滚,是因为ymal文件设置了 spec.revisonHistoryLimit的值默认为10,不为0。
如果为0,则无法回滚。

4、扩容缩容

# 将副本扩容/缩容到指定个数(6个)
kubectl scale --replicas=6 deploy [deploy名]

5、暂定/恢复

通过编辑edit资源,每次都会生成一个新版本的re。因此如果可能编辑多次,可以暂定更新

# 暂停更新rs版本
kubectl rollout pause deploy [deploy名]

# 编辑完后,恢复更新rs版本
kubectl rollout resume deploy [deploy名]

三、StatefunSet (STS)

# 创建Linux的一个工具镜像容器,工具用完进行操作,永远不要重启,运行完后自动删除
kubectl run -it --image busybox:1.28.4 dns-test --restart=Nerver --rm /bin/bash

1、创建

通过yaml文件创建,文件内容写法
在这里插入图片描述
注意:开头的两个 ---之间,表示一个文档的开始。它用于将YAML文件分割成多个文档块。每个文档块可以包含一组相关的数据或配置。

2、扩容缩容

# 将副本扩容/缩容到指定个数(6个)
kubectl scale --replicas=6  sts [sts名]

3、镜像更新

目前不支持直接更新image,需要patch来间接实现

# 更新镜像
kubectl patch sts [sts名] --type='json' -p='[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"nginx:1.9.1"}]'
  • RollingUpdate

【 灰度发布/金丝雀发布】

目标:将项目上线后产生的影响,降到最低。
方案:利用滚动更新中的partition属性,可以实现简易的灰度发布的效果。
例如:我们有5个 pod,如果当前partition 设置为 3,那么此时滚动更新时,只会更新那些序号>=3的 pod。
利用该机制,我们可以通过控制 partition 的值,来决定只更新其中一部分 pod,确认没有问题后,再逐渐增大更新的pod 数量,最终实现全部 pod 更新。

在这里插入图片描述

  • OnDelete
    当设置为OnDelete后,再更改yaml文档配置后,pod不会立刻更新。只有当删除某一个pod后,该pod才会立刻生成并产生更新。
    在这里插入图片描述

4、删除

删除时,需删除两部分内容:StatefulSet 和 Headless Service

(1)删除StatefulSet

# 级联删除,删除时,会将pod一起删除
kubectl delete sts [sts名]

# 非级联删除,删除时,不删除pod
kubectl delete sts [sts名] --cascade=false

(2)删除Headless Service

# 直接删除
kubectl delete service [service名]

5、删除pvc

StatefulSet删除后,PVC还会保留,数据不再便用的话,也符要删除。

kubectl delete pvc [pvc名]

四、DaemonSet (DS)

为每一个匹配的 Node节点,都部署一个守护进程。
DaemonSet 会忽略 Node的unschedulable 状态,有两种方式来指走 Pod, 只运行在指定的 Node 节点上:

  • nodeSelector:只调度到匹配指定label的 Node 上
    在这里插入图片描述

  • nodeAffinity:功能更丰富的 Node 选择器,比如支持集合操作

  • podAffinity:调度到满足条件的 Pod 所在的 Node 上

五、HPA自动扩/缩容

Pod 自动扩容:可以根据CPU 使用率、内存使用率或自定义指标(metrics),自动对 Pod 进行扩/缩容pod的数量。

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

控制管理器每隔30s(可以通过-horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况。

支持三种metrics类型

  • 预定义metrics(bPod的CPU)以利用率的方式计算
  • 自定义的Pod metrics,以始值(raw value)的方式计算
  • 自定义的object metrics支持两种metrics查询方式:Heapster和自定义的REST API
  • 支持多metrics
    (1)通过服务配置,设定指标
    配置resources.requests.cpu resources.requests.memory 配置cpu,内存的指标。
    在这里插入图片描述
# 1.创建一个 HPA
# cpu占用超过20%,进行扩容,最少pod数量为 2,最多pod数量为 5
kubectl autoscale deploy <deploy名>  --cpu-percent=20  --min=2  --max=5

# 2. 测试:找到对应服务的 service,编写循环测试脚本提升内存与cpu 负载
while true; do wget -q -o- http://<ip:port>> /dev/null ; done

# 3. 获取 HPA 信息比例
kubectl get hpa

(2)自定义指标

  • 控制管理器开启-horizontal-pod-autoscaler-use-rest-clients
  • 控制管理器的-apiserver指向API Server Aggregator
  • 在APIServer Aggregator中注册自定义的metrics APl

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

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

相关文章

十三、【源码】自动扫描注册Bean

源码地址&#xff1a;https://github.com/spring-projects/spring-framework 仓库地址&#xff1a;https://gitcode.net/qq_42665745/spring/-/tree/13-auto-scan-bean 自动扫描注册Bean 自动扫描Bean流程&#xff1a; 配置文件中配置标签<context:component-scan base-…

数据库管理-第216期 Oracle的高可用-01(20240703)

数据库管理216期 2024-07-03 数据库管理-第216期 Oracle的高可用-01&#xff08;20240703&#xff09;1 MAA简介2 MAA等级2.1 BRONZE2.2 SILVER2.3 GOLD2.4 PLATINUM 3 业务延续性总结 数据库管理-第216期 Oracle的高可用-01&#xff08;20240703&#xff09; 作者&#xff1a;…

巴西市场有哪些电商平台?巴西最畅销的产品有哪些?

巴西&#xff0c;作为南美洲最大的经济体之一&#xff0c;近年来在电子商务领域展现出强劲的增长势头。随着互联网的普及和消费者购物习惯的改变&#xff0c;电商平台在巴西市场上“打”得热火朝天&#xff0c;不过占据市场份额最大的依然还是美客多。本文将探讨巴西市场上的主…

TikTok矩阵管理系统:打造个人品牌的秘密武器

在当今数字化时代&#xff0c;个人品牌的建立对于个人和企业来说都变得至关重要。无论是企业家、自由职业者还是社交媒体个人&#xff0c;都希望能够在竞争激烈的市场中脱颖而出。而TikTok矩阵管理系统正是一个帮助个人打造个人品牌的秘密武器。 TikTok矩阵管理系统是一个集成了…

AI教育行业全景图(最新版);AI时代内容创作者的窘境;2年内AI教育赛道的切入机会;可汗学院创始人「AI教育革命」新书问世 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; 1. 可汗学院 (Khan Academy) 创始人新书发布&#xff1a;AI将如何颠覆传统教育 可汗学院&#xff08;Khan Academy&#xff09;是 Salman Khan 创立的…

HiAI Foundation开发平台,加速端侧AI应用的智能革命

如果您是一名开发者&#xff0c;正在寻找一种高效、灵活且易于使用的端侧AI开发框架&#xff0c;那么HarmonyOS SDKHiAI Foundation服务&#xff08;HiAI Foundation Kit&#xff09;就是您的理想选择。 作为一款AI开发框架&#xff0c;HiAI Foundation不仅提供强大的NPU计算能…

c/c++语言的一种日志的编写办法

今日分享一下&#xff0c;从某源码中看到这种日志编写方式&#xff0c;很强。可以借鉴。 这个函数调用的日志函数是不一样的&#xff0c;仔细观看&#xff1a; 这几种日志输出函数&#xff0c;背后都调用了相同的调用。 与之对应的区别就是&#xff0c;函数名称的差异取决于…

小D----海量数据商用短链平台项目大课

从0-1 掌握ClickHouse新一代OLAP数据库。 Kafka接入组件封装Ip获取地理位置信息库使用。 后端工程师角度进阶数据仓库分层大数据领域技术视野 Flinkkafka短链接数据实时计算多维度数据处理。 Async异步关联查询多维度宽表扩展。 Flink多流合并DWS层整合Click House存储。

JDBC【封装工具类、SQL注入问题】

day54 JDBC 封装工具类01 创建配置文件 DBConfig.properties driverNamecom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/qnz01?characterEncodingutf8&serverTimezoneUTC usernameroot passwordroot新建配置文件&#xff0c;不用写后缀名 创建工具类 将变…

北斗/GPS模块输出的NMEA语句详解

NMEA协议采用 ASCII 码来传递 GPS 定位信息&#xff0c;我们称之为帧。 帧格式形如&#xff1a;$aaccc,ddd,ddd,…,ddd*hh(CR)(LF) 1、“$”&#xff1a;帧命令起始位 2、aaccc&#xff1a;地址域&#xff0c;前两位为识别符&#xff08;aa&#xff09;&#xff0c;后三位为…

记一次android打包,因路由规则设置不合理而导致pom文件无法访问的错误

一、错误详情 FAILURE: Build failed with an exception.* What went wrong: Could not determine the dependencies of task :mediaplayer:compileReleaseAidl. > Could not resolve all task dependencies for configuration :mediaplayer:releaseCompileClasspath.> C…

nodejs版本升级12->18

1.把老版本删除&#xff0c;没删除升级没成功。 2.在官网下载新版本。 3.在菜单中输入cmd&#xff0c;一定要用管理员身份运行&#xff0c;切记&#xff0c;不然会出现2503/2502错误。 4.安装即可。

SCI丨5分期刊,JCR一区

SCI&#xff0c;5分&#xff0c;JCR Q1&#xff0c;中科大类3小类2区 1 基于复杂网络与xxx能源汽车节能数值分析 2 基于热能损失优化的xxx与性能管理 3 基于xxxLCA技术的绿色制造工艺优化研究 4 基于xxx入侵检测技术的物联网智能制造监控系统设计 6 基于物联网技术xxx电力系…

跨境电商自养号全攻略:TEMU、Shein、速卖通测评技巧揭秘

TEMU、Shein、速卖通等跨境平台都推出了全托管模式&#xff0c;普通平台讲究排名&#xff0c;销量&#xff0c;流量量&#xff0c;转化率等等。那么全托管为什么需要做测评呢&#xff1f;因为全托管平台讲究的是一个动销率&#xff0c;有的新品上架或许很快就出单&#xff0c;而…

邮件通知提醒邮箱设置教程及API代码示例!

邮件通知的警告功能如何配置&#xff1f;详细教程与API代码示例&#xff01; 无论是业务提醒、账户活动警告&#xff0c;还是个人事务&#xff0c;邮件通知已经成为一种重要的沟通工具。AokSend将详细介绍如何设置邮件通知提醒邮箱&#xff0c;并提供相应的API代码示例&#x…

场景管理分析平台介绍

在数字化浪潮的推动下&#xff0c;数据已成为企业决策的重要依据。特别是在智能驾驶、虚拟现实和物联网等领域&#xff0c;场景数据的高效管理和利用至关重要。在智能驾驶领域面对海量的场景数据&#xff0c;如何高效处理、精准分析&#xff0c;并将其转化为有价值的决策支持&a…

[OC]萝卜圈Python手动机器人脚本

这是给机器人设置的端口&#xff0c;对照用 代码 # #作者:溥哥’ ##机器人驱动主程序 #请在main中编写您自己的机器人驱动代码 import msvcrt def main():a"none"while True:key_input msvcrt.getch()akey_inputif abw:print(a)robot_drv.set_motors(1,40,2,40,3,…

(漏洞检查项) | 任意文件包含漏洞 file-include

(漏洞检查项)|任意文件包含漏洞 file-include 漏洞场景 1.含有动态包含语句 2.有类似于文件读取的url 漏洞描述 攻击者可以利用任意文件包含漏洞&#xff0c;读取任意文件&#xff0c;对服务器造成危害。 程序开发人员为了代码的灵活性&#xff0c;常常会将包含文件的路径…

SpringBoot怎么单独关闭某个类打印出来的日志?

application.yml文件增加以下内容&#xff1a; logging:level:org.springframework.amgp.rabbit: OFF 配置logging:level是配置的什么&#xff1f; 在application.yml文件中配置logging.level是用来设置日志级别的。这是Spring Boot应用中的一个常用配置&#xff0c;它允许您…

JeecgFlow错误事件

事件定义 错误事件可以用做一个流程的开始事件或者作为一个任务或者子流程的边界事件&#xff0c;错误事件没有提供作用中间事件的功能&#xff0c;这一点和前面介绍的定时器事件和消息事件还有区别的。在错误事件中提供了错误结束事件。 BPMN错误和Java异常并没有直接关联。BP…