当前位置: 首页 > news >正文

标签Labels、Scheduler:调度器、k8s污点与容忍度

labels用于标识和选择 Kubernetes 对象(如 Pod、Deployment、Service、Namespace 等)的键值对

用途:

①分类和组织

②筛选和管理

③自动化操作

使用方法:

①创建资源时,添加标签

通过标签名,筛选pod

kubectl get pod -l app=pod-1

kubectl get pod -l app,env

apiVersion: v1

kind: Pod

metadata:

  name: my-pod

  labels:

     app: my-app

     environment: production

spec:

  containers:

   - name: my-container

       image: nginx

②在资源运行时,添加或修改标签

添加标签

kubectl label pod myapp-2-b6f89777f-r5n7x server=nginx

删除标签

kubectl label pod myapp-2-b6f89777f-r5n7x server-

重新添加标签

kubectl label pod myapp-2-b6f89777f-r5n7x server=apache

apiVersion: apps/v1

kind: Deployment

metadata:

   name: my-deployment

spec:

    replicas: 3

    selector:              #标签选择器

        matchLabels:  #通过键值对绑定标签

            app: my-app #需要管理Pod的标签

      template:             #创建Pod的模板,通过Deployment自动创建Pod

         metadata:

              labels:

                 app: my-app #Pod的标签,用于被筛选和管理

        spec:

            containers:

             - name: my-container

                image: nginx

查看一个pod的标签

kubectl describe pod myapp-2-b6f89777f-r5n7x / grep Labels

查看所有pod的标签

kubectl get pod --show-labels

Scheduler:调度器

在创建运行pod时,用于将Pod的创建请求绑定到Pode节点上;

可以满足调度的公平、高效、灵活;

调度过程:

1.过滤掉不满足条件的节点,预选(predicate)

2.按照节点的优先级排序,优选(priority)

3.选择优先级最高的node节点

调度方法:

1.自动调度:Scheduler经过一系列的算法计算得出最优节点;

2.定向调度:

    NodeName:指定Node名称进行调度;

    NodeSelector:通过Node标签进行选择调度

3.亲和性调度:

     NodeAffinity (节点亲和度)

     PodAffinity (Pod亲和度)

     PodAntiAffinity (Pod反亲和性)

4.污点与容忍度:

     Taints 给Node节点打上污点,需要容忍度才能调度

     Toleration 在Pod上设置容忍度,才能运行在有污点的Node上

固定调度案例:

apiVersion: apps/v1

kind: Deployment

metadata:

    name: myweb

spec:

    selector:

        matchLabels:

             app: myweb

      replicas: 6

      template:

          metadata:

               labels:

                  app: myweb

        spec:

             nodeName: node-1  #通过指定nodeName,实现固定调度

             containers:

              - name: myweb

                 image: docker.io/nginx

                 ports:

                  - containerPort: 80

污点与容忍度

如果Node节点上有污点,需要Pod有容忍度才能调度运行

污点的三种级别:

NoSchedule:没有容忍的Pod不能新建,已经运行的Pod不受影响;(第二级别)

PreferNoSchedule:没有容忍的Pod尽量不要创建,如果没有其他节点可以选择,也能创建;(最小级别)

NoExecute:驱逐所有Pod应用;(最高级别)

给node打污点:

创建污点

kubectl taint nodes node01 key=value:effect  (关键字:taint)

删除污点

kubectl taint nodes node01  key-

给pod添加容忍度:

在 Kubernetes 中,Pod 的容忍度(Tolerations)用于允许 Pod 调度到带有污点(Taints)的节点上。污点和容忍度是 Kubernetes 中用于控制 Pod 调度的一种机制,允许你将某些 Pod 排除在某些节点之外,或者将某些 Pod 明确允许调度到特定的节点上。

1. 污点(Taints)和容忍度(Tolerations)的基本概念
  • 污点(Taints):是一种节点属性,用于阻止某些 Pod 调度到该节点上。污点由键(key)、值(value)和效果(effect)组成。

    • effect 的值可以是:

      • NoSchedule:不允许新的 Pod 调度到该节点,但已调度的 Pod 不受影响。

      • PreferNoSchedule:尽量避免将新的 Pod 调度到该节点,但不是强制的。

      • NoExecute:不允许新的 Pod 调度到该节点,并且会驱逐已存在的 Pod。

  • 容忍度(Tolerations):是一种 Pod 属性,用于允许 Pod 调度到带有特定污点的节点上。容忍度也由键(key)、值(value)和效果(effect)组成。

2. 给 Pod 添加容忍度

在 Pod 的定义中,可以通过 tolerations 字段来添加容忍度。以下是一个示例:

示例 Pod 定义
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagetolerations:- key: "node-type"operator: "Equal"value: "gpu"effect: "NoSchedule"

在这个例子中:

  • keynode-type,表示容忍的污点键。

  • operatorEqual,表示键和值必须匹配。

  • valuegpu,表示容忍的污点值。

  • effectNoSchedule,表示容忍的污点效果。

3. 示例场景

假设你有一些节点带有以下污点:

kubectl taint nodes node1 node-type=gpu:NoSchedule

如果没有添加容忍度,Pod 将无法调度到带有该污点的节点上。通过在 Pod 定义中添加上述容忍度,Pod 就可以被调度到带有 node-type=gpu:NoSchedule 污点的节点上。

4. 其他容忍度配置
a. 匹配所有污点

如果你希望 Pod 容忍所有类型的污点,可以使用以下配置:

tolerations:
- operator: "Exists"effect: "NoSchedule"
b. 容忍特定效果

如果你只想容忍特定效果的污点,可以指定 effect

tolerations:
- key: "node-type"operator: "Equal"value: "gpu"effect: "NoSchedule"
- key: "node-type"operator: "Equal"value: "gpu"effect: "PreferNoSchedule"
5. 动态添加容忍度

如果你已经创建了 Pod,但需要动态添加容忍度,可以通过修改 Pod 的 YAML 文件并重新应用来实现:

kubectl get pod my-pod -o yaml > my-pod.yaml

编辑 my-pod.yaml 文件,添加 tolerations 部分,然后重新应用:

kubectl apply -f my-pod.yaml
6. 注意事项
  • 污点和容忍度的匹配:Pod 的容忍度必须与节点的污点完全匹配(键、值和效果),才能允许调度。

  • 动态更新:动态更新 Pod 的容忍度可能需要重新调度 Pod,这可能会导致 Pod 的重启。

  • 多节点调度:如果多个节点带有相同的污点,Pod 仍然会根据其他调度策略(如资源需求)选择最适合的节点。

通过合理配置污点和容忍度,你可以更好地控制 Pod 的调度行为,优化资源利用和隔离策略。

http://www.dtcms.com/a/578668.html

相关文章:

  • 网站开发询价单重庆网站建设报价
  • [论文阅读] AI + 软件工程 | 3340个Python ML项目实证:PyQu工具+61种代码变更,精准提升软件质量!
  • 【数据结构+算法】进栈顺序推算、卡特兰数与逆波兰表达式
  • 网站源码 一品资源网电龙网站建设
  • 文山网站建设代理成都品牌形象设计
  • SEO超级外链工具 - SEO超级外链工具 - 网站自动外链群发与推广优化助手
  • 企业数据查询网站怎么自己做H5网站
  • 单位门户网站可以做百度百科指数型基金是什么意思
  • 详细阐述时间复杂度和空间复杂度定义、算法、和原理,,举例通过C/C++里面说明
  • 神鹰网站建设公司各行业的专业网址论坛资料
  • 慕枫网站建设做网站电话销售的话术
  • 免费网站制作多少钱西宁网站网站建设
  • 【AI应用探索】-8- OpenManus使用及源码解析
  • 网站建设与管理的条件常州建站程序
  • 【Hot100 | 2 LeetCode49 字母异位词分组问题】
  • 百度手机网址提交北京优化生育
  • 网站建设费分多少期摊销买电脑的怎么下wordpress
  • 网站商城网络整合营销购物类网站建设
  • 旅游公网站如何做购买域名网站好
  • 无线网络优化方案
  • 深圳宝安区网站建设公司网站域名空间多少钱
  • 比较两个excel文件的指定列是否一致
  • 建网站哪家好新闻wordpress 保持空格
  • 百度 网站 移动端邵阳网站开发公司推荐
  • 条款38:注意线程句柄析构函数的各种不同行为
  • 2027秋招备战day7
  • 嵌入式Linux C语言程序设计七
  • 学校让做网站做完怎么交全球最受欢迎的网站
  • 网站建设的报价单网络架构需求
  • 离心萃取机:破解磷酸萃取全流程痛点,筑牢高效生产核心