K8s学习四(资源调度_1)

资源调度

  • 发现对Pod操作不方便,不能直接操作,而且不能直接编辑,需要对原来的配置文件进行操作,而且需要删除之后再创建Pod,不方便,更多是通过控制器来操作。

Label和Selector

  • 通过设置标签和选择器来确定需要的资源,如果是kubectl get po,就是Pod,这里的po可以替换成其他资源,如deploy。
Label
  • label,标签可以在配置文件或者命令行kubectl中设置
  • 命令行中,有下面的命令:
# 创建临时label
kubectl label po <资源名称> app=hello# 修改已经存在的标签
kubectl label po <资源名称> app=hello2 --overwrite# 查看label# selector 按照 label 单值查找节点
kubectl get po -A -l app=hello# selector 按照 label 多值查找节点,也可以不等查找
kubectl get po -A -l test=1.0.0,type=app
kubectl get po -A -l test=1.0.0,app!=hello# selector 按照 label 选择多值查找节点,引号必须有,避免歧义
kubectl get po -A -l 'test in (1.0.0,1.0.1),type=app'# 查看所有节点的 labels
kubectl get po --show-labels# selector 按照 label 综合查找节点
kubectl get po -A -l app=hello --show-labels# - 是 -- 命令的缩写,例如,-l 是 --label 的缩写,-A 是 --all-namespaces 的缩写。
Selector
  • 进行选择对应的资源
  • 可以在配置文件中配置,在各对象的配置 spec.selector 或其他可以写 selector 的属性中编写
  • 也可以在kubectl命令中:
# 匹配单个值,查找 app=hello 的 pod
kubectl get po -A -l app=hello# 匹配多个值
kubectl get po -A -l 'k8s-app in (metrics-server, kubernetes-dashboard)'# 查找 version!=1 and app=nginx 的 pod 信息
kubectl get po -l version!=1,app=nginx# 不等值 + 语句
kubectl get po -A -l version!=1,'app in (busybox, nginx)'
  • 一些命令演示如下:
    在这里插入图片描述

Deployment(无状态)

  • deployment的嵌套关系如下:
    在这里插入图片描述

  • 这里replicationcontroller已经逐步被替代,因为replicaset可以用selector来选择。

功能
创建
  • 先用命令行创建一个nginx的deployment,运行kubectl create deploy nginx-deploy --image=nginx:1.7.9

  • 然后查看deploy,replicaset和Pod,会发现像上面介绍的是一层一层嵌套关系,如下:-
    在这里插入图片描述

  • 执行kubectl get po,rs,deploy --show-labels得到:
    在这里插入图片描述

  • 创建的yaml文件:

apiVersion: apps/v1 # deployment api版本kind: Deployment # 资源类型为deploymentmetadata: # 元信息labels: # deploy标签app: nginx-deployname: nginx-deploy # deploy的名字namespace: default # 所在的命名空间spec:replicas: 1 # 期望的副本数revisionHistoryLimit: 10 # 进行滚动更新后,保留的历史版本数selector: # 选择器,用于找到匹配的RSmatchLabels: # 按照标签匹配app: nginx-deploy # 匹配的标签strategy: # 更新策略rollingUpdate: # 滚动更新配置maxSurge: 25% # 进行滚动更新时,最多可以启动25%的新实例maxUnavailable: 25% # 进行滚动更新时,最多可以同时停止25%的旧实例type: RollingUpdate # 更新类型,采用滚动更新template: # Pod模板metadata: # Pod的元信息labels: # Pod标签app: nginx-deployspec: # Pod期望信息containers: # Pod容器- image: nginx:1.7.9 # 镜像imagePullPolicy: IfNotPresent # 拉取策略name: nginx # 容器名称restartPolicy: Always # 重启策略terminationGracePeriodSeconds: 30 # 删除操作最多宽限多长时间
  • deploy和statefulset可能用到matchLabels
滚动更新
  • 只有修改了 deployment 配置文件中的 template 中的属性后,才会触发更新操作

  • 通过 kubectl edit deployment nginx-deploy 进行修改

  • 下面先修改非template,看看是否更新

  • 进入修改之后,在label中新加入标签:
    在这里插入图片描述

  • 查看是否更新,发现确实没有更新
    在这里插入图片描述

在这里插入图片描述

  • 然后修改副本数为3,方便后面看滚动更新进行查看
    在这里插入图片描述

  • 也不是更新,发现deploy,rs都是一个,然后管理着3个Pod

  • 注:这是因为create的模板edit后直接生效了,要是自己定义的yaml文件,记得重新apply
    在这里插入图片描述

  • 下面将template里面的nginx镜像版本号修改之后保存退出,发现在滚动更新
    在这里插入图片描述

  • 具体查看信息用kubectl rollout status deploy nginx-deploy

  • 这次用命令行的方式进行设置,执行kkubectl set image deployment/nginx-deploy nginx=nginx:1.7.9

  • 进入deploy查看信息kubectl describe deploy nginx-deploy
    在这里插入图片描述

  • 可以看出是replicaset是不断变化的,大概意思是创建一个新的replicaset,然后更新一个Pod,更新好后,停止原来rs的旧Pod,然后再更新另一个新Pod,然后再停掉原来rs的旧Pod,直至完成。如下图:
    在这里插入图片描述

  • 再次看信息会发现,新的Pod已经和新的RS关联,如下图:
    在这里插入图片描述

  • 注:可能会出现并行的状态,就是修改之后,生成一个新的RS来更新,还没完成的时候,又进行了修改,然后就会停止之前的更新,创建新的RS来进行这次更新

回滚
  • 有时候你可能想回退一个Deployment,例如,当Deployment不稳定时,比如一直crash looping。

  • 默认情况下,kubernetes会在系统中保存前两次的Deploymentrollout历史记录,以便你可以随时会退(你可以修改revision history limit来更改保存的revision数)。

  • 假如更新 deployment 时参数不小心写错,如 nginx:1.9.1 写成了 nginx:1.91
    kubectl set image deployment/nginx-deploy nginx=nginx:1.91

  • 监控滚动升级状态,由于镜像名称错误,下载镜像失败,因此更新过程会卡住
    kubectl rollout status deployments nginx-deploy

  • 结束监听后,获取 rs 信息,我们可以看到新增的 rs 副本数是 2 个
    kubectl get rs

  • 通过 kubectl get pods 获取 pods 信息,我们可以看到关联到新的 rs 的 pod,状态处于 ImagePullBackOff 状态

  • 为了修复这个问题,我们需要找到需要回退的 revision 进行回退 通过 kubectl rollout history deployment/nginx-deploy 可以获取 revison 的列表

  • 通过 kubectl rollout history deployment/nginx-deploy --revision=2 可以查看详细信息

  • 确认要回退的版本后,可以通过 kubectl rollout undo deployment/nginx-deploy可以回退到上一个版本

  • 也可以回退到指定的 revision
    kubectl rollout undo deployment/nginx-deploy --to-revision=2

  • 再次通过 kubectl get deploymentkubectl describe deployment可以看到,我们的版本已经回退到对应的 revison 上了

  • 注:可以通过设置 .spec.revisonHistoryLimit 来指定 deployment 保留多少 revison,如果设置为 0,则不允许 deployment 回退了。

  • 命令结果如下:
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 下面这个是旧rs里面之前创建Pod和删除Pod
    在这里插入图片描述
扩容缩容
  • 扩容与缩容只是直接创建副本数,没有更新 pod template 因此不会创建新的 rs
  • 通过 kube scale 命令可以进行自动扩容/缩容,以及通过 kube edit 编辑 replicas 也可以实现扩容/缩容
# 通过 kube edit 编辑,就是通过kubectl edit deploy nginx-deploy命令进去之后修改replicas#通过 kube scale 命令可以进行自动扩容/缩容
kubectl scale --replicas=6 deploy nginx-deploy

在这里插入图片描述

  • 缩容同理,只不过把数字变小就行
暂停与恢复
  • 由于每次对 pod template 中的信息发生修改后,都会触发更新 deployment 操作,那么此时如果频繁修改信息,就会产生多次更新,而实际上只需要执行最后一次更新即可,当出现此类情况时我们就可以暂停 deployment 的 rollout

  • 通过kubectl rollout pause deployment <name>就可以实现暂停,直到你下次恢复后才会继续进行滚动更新

  • 尝试对容器进行修改,然后查看是否发生更新操作了

kubectl set image deploy <name> nginx=nginx:1.17.9
kubectl get po 
  • 通过以上操作可以看到实际并没有发生修改,此时我们再次进行修改一些属性,如限制 nginx 容器的最大cpu为 0.2 核,最大内存为 128M,最小内存为 64M,最小 cpu 为 0.1 核
kubectl set resources deploy <deploy_name> -c <container_name> --limits=cpu=200m,memory=128Mi --requests=cpu100m,memory=64Mi
  • 通过格式化输出kubectl get deploy <name> -o yaml,可以看到配置确实发生了修改,再通过 kubectl get po 可以看到 pod 没有被更新

  • 那么此时我们再恢复 rollout,通过命令 kubectl rollout resume deploy <name>

  • 恢复后,我们再次查看 rs 和 po 信息,我们可以看到就开始进行滚动更新操作了

kubectl get rs
kubectl get po
  • 修改内容
    在这里插入图片描述

在这里插入图片描述

  • pause之后,修改不会更新
    在这里插入图片描述

  • resume之后,更新。

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

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

相关文章

Python爬虫:为什么你爬取不到网页数据

目录 前言 一、网络请求被拒绝 二、数据是通过JavaScript加载的 三、需要进行登录 四、网站反爬虫策略 五、网站结构变更 总结 前言 作为一名开发者&#xff0c;使用Python编写爬虫程序是一项常见的任务。爬虫程序的目的是收集互联网上的数据&#xff0c;并将其保存或使…

解决IDEA 控制台中文乱码

运行某个项目时IntelliJ IDEA 控制台中文乱码&#xff0c;但其他的项目是正常的。接口文档也显示乱码&#xff1a; 一、修改 IntelliJ IDEA 全局编码、项目编码、属性文件编码 上方导航栏“File→Settings…”进入配置页面&#xff0c;在“Editor”中下滑找到“File Encodings…

LeetCode 面试题 02.07.链表相交(判断两个结点是否相同)

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&#x…

内外网数据交换发展进程:安全与便捷并行

随着信息化的不断推进&#xff0c;医院、党政以及企业的内外网数据交换正成为日益关注的焦点。在保障数据安全的前提下&#xff0c;需要寻求一种既安全可靠又操作便捷的数据传输方式。本文将探讨内外网数据交换发展进程&#xff0c;分析各种传输方式的优缺点&#xff0c;以及它…

麒麟系统ARM安装rabbitmq

简单记录下&#xff0c;信创服务器&#xff1a;麒麟系统&#xff0c;安装rabbitmq的踩坑记录。 本文章参考了很多大佬文章&#xff0c;我整理后提供。 一、安装基础依赖 yum -y install make gcc gcc-c kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel 二、下载…

k8s资源监控_bitnami metrics-server v0(1),2024一位Linux运维中级程序员的跳槽面经

错误3 也有可能会遇到以下错误&#xff0c;按照下面提示解决 Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io) 如果metrics-server正常启动&#xff0c;没有错误&#xff0c;应该就是网络问题。修改…

花一分钟简单认识 CSS 中的规则 —— 级联层 @layer

layer 简介&#xff1a; 声明级联层时&#xff0c;越靠后优先级越高。不属于任何级联层的样式&#xff0c;将自成一层匿名级联层&#xff0c;并置于所有层之后 —— 级别最高。 用法一&#xff1a;在同一文件中 layer base, special; layer special {/* 优先 */li { color: …

Python学习笔记——heapq

堆排序 思路 堆排序思路是&#xff1a; 将数组以二叉树的形式分析&#xff0c;令根节点索引值为0&#xff0c;索引值为index的节点&#xff0c;子节点索引值分别为index*21、index*22&#xff1b;对二叉树进行维护&#xff0c;使得每个非叶子节点的值&#xff0c;都大于或者…

2024-4-7 QT day1作业

myWidget.cpp #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口标题this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(QIcon("C:\\Users\\张谦\\Desktop\\pictrue\\qq.png"));//设…

git bash上传文件至github仓库

Linux运维工具-ywtool 目录 一.访问github二.新建仓库1.点击自己头像2.选择"your repositories"3.点击"New"4.创建新仓库 三.通过git bash软件上传文件1.提示2.打开git bash软件3.切换到本地仓库目录4.配置github的用户名和邮箱信息5.生成SSH Key6.github添…

关于Mac使用idea问题

多窗口切换问题 如果出现Mac打开idea新的项目&#xff0c;发现始终就一个窗口&#xff0c;不能像window那样多窗口&#xff0c;比如 只能这样来回点着切换&#xff0c;提供以下方案 1.方案一 则在idea里多个项目会呈tab页切换&#xff0c;也是始终一个窗口&#xff0c;只是多了…

建模实例评点(3)领域类图-作战推演

1 00:00:00,310 --> 00:00:03,990 你看&#xff0c;我们会有很多很多泛化 2 00:00:04,360 --> 00:00:05,810 这里有很多很多泛化 3 00:00:06,350 --> 00:00:07,420 这种情况下 4 00:00:08,020 --> 00:00:09,850 包括这种&#xff0c;没准也可以 5 00:00:10,380…

基于canal实现MySQL作为主库的ES与MySQL数据同步

1.对mysql的配置 需要一个mysql作为主库&#xff0c;它需要开启binlog,开启binlog需要修改配置文件my.cnf mysql安装就不多说了&#xff0c;我的mysql是5.7 &#xff0c;装在docker中 我的mysql配置文件在容器中/etc/my.cnf 开启binlog需要修改my.cnf 即添加 log-binmysql…

「38」LUT在直播间调色的高级应用……

「38」LUT滤镜 对人或物进行精进调色 OBS软件中的LUT&#xff08;Look Up Table&#xff09;滤镜&#xff0c;可用于调整视频、图像的色彩和对比度等效果&#xff0c;以实现专业级的颜色调整需求。 左图为原图 右图为LUT 先对比上面的两张图&#xff0c;用了滤镜效果的变化…

内容创作策略:打造影响力强大的技术博客

CSDN的朋友你们好&#xff0c;我是未来&#xff0c;今天给大家带来专栏【程序员博主教程&#xff08;完全指南&#xff09;】的第6篇文章——“博客内容创作策略”。本文为技术博主提供了一个精简的内容创作策略指南&#xff0c;涵盖了设定目标、分析竞争、关键词研究、内容规划…

Embedding:跨越离散与连续边界——离散数据的连续向量表示及其在深度学习与自然语言处理中的关键角色

Embedding嵌入技术是一种在深度学习、自然语言处理&#xff08;NLP&#xff09;、计算机视觉等领域广泛应用的技术&#xff0c;它主要用于将高维、复杂且离散的原始数据&#xff08;如文本中的词汇、图像中的像素等&#xff09;映射到一个低维、连续且稠密的向量空间中。这些低…

pdf、docx、markdown、txt提取文档内容,可以应用于rag文档解析

返回的是文档解析分段内容组成的列表&#xff0c;分段内容默认chunk_size: int 250, chunk_overlap: int 50&#xff0c;250字分段&#xff0c;50分段处保留后面一段的前50字拼接即窗口包含下下一段前面50个字划分 from typing import Union, Listimport jieba import recla…

ES学习笔记01

1.ES安装 下载地址&#xff1a; es官网下载 这里使用的是7.8.0的版本信息 下载完成后解压即可完成安装 2.启动运行 点击bin目录下的elasticsearch.bat文件即可启动 在浏览器中输入localhost:9200显示如下&#xff1a; 在路径中加入对应访问后缀即可访问对应信息 如&#…

微自传系列---AppleSteve Jobs

1 三个苹果的故事 在求学的过程中&#xff0c;笔者听到过关于 “三个苹果” 的故事。三个苹果&#xff0c;分别指的是亚当和夏娃的苹果、牛顿的苹果以及乔布斯的苹果&#xff0c;这三个苹果在各自的故事中都有着深远的寓意和影响。 这三个苹果&#xff0c;分别代表了人类历史的…

中药提取物备案数据库<5000+中药提取物>

NMPA中药提取物备案数据库的建立是确保中药提取物质量安全、规范生产行为、加强监管、保障公众用药安全、促进产业发展和国际化的重要措施。 通过查询中药提取物备案信息我们能了解到中药提取物的实用备案号、药品通用名称、药品生产企业、批准文号、备案日期、备案状态、中药…