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 # 资源类型为deployment
  metadata: # 元信息
    labels: # deploy标签
      app: nginx-deploy
    name: nginx-deploy # deploy的名字
    namespace: default # 所在的命名空间
  spec:
    replicas: 1 # 期望的副本数
    revisionHistoryLimit: 10 # 进行滚动更新后,保留的历史版本数
    selector: # 选择器,用于找到匹配的RS
      matchLabels: # 按照标签匹配
        app: nginx-deploy # 匹配的标签
    strategy: # 更新策略
      rollingUpdate: # 滚动更新配置
        maxSurge: 25% # 进行滚动更新时,最多可以启动25%的新实例
        maxUnavailable: 25% # 进行滚动更新时,最多可以同时停止25%的旧实例
      type: RollingUpdate # 更新类型,采用滚动更新
    template: # Pod模板
      metadata: # Pod的元信息
        labels: # Pod标签
          app: nginx-deploy
      spec: # 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之后,更新。

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

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

相关文章

python 06实验

实验目的 &#xff08;1&#xff09;掌握Python流程控制语句&#xff0c;合理使用循环进行程序设计 &#xff08;2&#xff09;掌握Python数据结构&#xff0c;能熟练运用进行程序设计 &#xff08;3&#xff09;掌握Python的文件读写&#xff0c;能编写读取数据集的程序 1…

java理论小作业(2)--类

第一题 1.题目&#xff1a; 2.解析&#xff1a; 首先&#xff0c;我们来分析Hello1类的结构和给定代码的执行流程&#xff1a; Hello1类中有两个成员变量&#xff0c;一个静态的a和一个非静态的b。静态变量a属于类本身&#xff0c;而非静态变量b属于类的每一个实例&#xff…

c++20协程详解(四)

前言 到这就是协程的最后一节了。希望能帮到大家 代码 到这里我们整合下之前二、三节的代码 #include <coroutine> #include <functional> #include <chrono> #include <iostream> #include <thread> #include <mutex> #include <me…

24上教资面试报名时间汇总⏰报名流程✅

24上教资面试报名公告已经发布&#xff01; &#x1f4a1;报名地址&#xff1a;中小学教师资格考试网 &#x1f550;报名时间&#xff1a;4月12日开始 广东&#xff1a;4月12日10:00-15日17:00 河北&#xff1a;4月12日10:00至4月15日17:00 广西&#xff1a;4月12日10:00至15日…

深入理解Vue 3.0中的watch属性immediate和deep的用法

摘要&#xff1a; 在 Vue 3.0 中&#xff0c;watch 是一个用于观察和响应组件中数据变化的强大工具。它允许我们监听组件中的属性、对象或数组的变化&#xff0c;并执行相应的回调函数。除了基本的用法外&#xff0c;watch 还提供了两个扩展选项&#xff1a;immediate 和 deep…

【JavaScript】原型链/作用域/this指针/闭包

1.原型链 参考资料&#xff1a;Annotated ES5 ECMAScript起初并不支持如C、Smalltalk 或 Java 中“类”的形式创建对象&#xff0c;而是通过字面量表示法或者构造函数创建对象。每个构造函数都是一个具有名为“prototype”的属性的函数&#xff0c;该属性用于实现基于原型的继…

【氮化镓】在轨实验研究辐射对GaN器件的影响

【Pioneering evaluation of GaN transistors in geostationary satellites】 摘要&#xff1a; 这篇论文介绍了一项为期6年的空间实验结果&#xff0c;该实验研究了在地球静止轨道上辐射对氮化镓&#xff08;GaN&#xff09;电子元件的影响。实验使用了四个GaN晶体管&#xf…

H3C防火墙RBM对接交换机M-LAG典型配置

FW配置&#xff1a;FW1与FW2采用RBM组网&#xff0c;M-LAG Border的跨设备二层聚合口与RBM FW设备的设备内三层聚合口对接。FW主设备的设备内三层聚合口编号应与备设备的设备内三层聚合口编号保持一致。防火墙省略安全域和安全策略配置。 Border设备配置&#xff1a;采用M-LAG组…

嵌入式学习49-单片机2

指令周期 1M 机器周期 12M &#xff08;晶体震荡器产生&#xff09; 中断两种方式 …

创建型模式--1.单例模式【巴基速递】

1. 巴基的订单 在海贼世界中&#xff0c;巴基速递是巴基依靠手下强大的越狱犯兵力&#xff0c;组建的集团海贼派遣公司&#xff0c;它的主要业务是向世界有需要的地方输送雇佣兵&#xff08;其实是不干好事儿&#xff09;。 自从从特拉法尔加罗和路飞同盟击败了堂吉诃德家族 &…

怎么把学浪的视频保存到手机

越来越多的人在学浪app里面购买了课程并且想要下载下来&#xff0c;但是苦于没有方法或者工具&#xff0c;所以本文将教大家如何把学浪的视频保存到手机随时随地的观看&#xff0c;再也不用担心课程过期的问题。 本文将介绍工具来下载&#xff0c;因为下载方法太复杂&#xff…

Yolov5改进算法之添加Res2Net模块

目录 1. Res2Net介绍 1.1 Res2Net的背景和动机 1.2 Res2Net的基本概念 2. YOLOV5添加Res2Net模块 Res2Net&#xff08;Residual Resolution Network&#xff09;是一种用于图像处理和计算机视觉任务的深度卷积神经网络架构。它旨在解决传统的ResNet&#xff08;Residual Ne…

【JVM性能调优】- 阿里在线排除工具 - Arthas

阿里在线排除工具 - Arthas Arthas&#xff08;阿尔萨斯&#xff09;是阿里开源的一款Java在线诊断工具&#xff0c;官网原话&#xff1a;当你遇到以下类似问题而束手无策时&#xff0c;Arthas可以帮助你解决&#xff1a; 这个类从哪个 jar 包加载的&#xff1f;为什么会报各种…

千视携 NDI 6 轻量化媒体方案亮相北京CCBN展会

展会简介 第30届中国国际广播电视网络技术展览会&#xff08;CCBN&#xff09;将于4月24至26日在北京首钢会展中心举行。此次展会将汇集全球各大数字媒体、广播电视单位以及IT、通信技术厂商。展会重点关注数字化转型、智能媒体、融媒体等主题&#xff0c;并展示最新的5G、4K/8…

Day107:代码审计-PHP模型开发篇MVC层RCE执行文件对比法1day分析0day验证

目录 MVC 架构 CNVD-代码执行1day-lmxcms1.40版本 CNVD-命令执行1day-baijiacms4.1.4版本 知识点&#xff1a; 1、PHP审计-MVC开发-RCE&代码执行 2、PHP审计-MVC开发-RCE&命令执行 3、PHP审计-MVC开发-RCE&文件对比 MVC 架构 MVC流程&#xff1a; Controller截…

HCLR-Net: 混合对比学习正则化与局部随机扰动用于水下图像增强

论文地址&#xff1a;https://doi.org/10.1007/s11263-024-01987-y 源码&#xff1a;https://github.com/zhoujingchun03/HCLR-Net 摘要&#xff1a; 由于水下环境复杂多样&#xff0c;导致光吸收、散射和色彩失真等严重退化现象&#xff0c;因此水下图像增强是一项重大挑战…

Day108:代码审计-PHP模型开发篇MVC层动态调试未授权脆弱鉴权未引用错误逻辑

目录 案例1-Xhcms-动态调试-脆弱的鉴权逻辑 案例2-Cwcms-动态调试-未引用鉴权逻辑 案例3-Bosscms-动态调试-不严谨的鉴权逻辑 知识点&#xff1a; 1、PHP审计-动态调试-未授权安全 2、PHP审计-文件对比-未授权安全 3、PHP审计-未授权访问-三种形态 动态调试优点: 环境配置&…

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

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

1111111111111111111111111

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

活动图高阶讲解-15

1 00:00:00,000 --> 00:00:07,200 目前来说&#xff0c;这个菱形到底是分还是合 2 00:00:07,200 --> 00:00:13,600 这个是靠入边出边的数量来判断的 3 00:00:13,600 --> 00:00:22,560 有的方法学&#xff0c;它可能会这样搞一些花样 4 00:00:22,560 --> 00:00:2…