kubernetes-污点和容忍

kubernetes-污点和容忍

  • kubernetes-污点和容忍
    • 1、什么是污点(Taint)
    • 2、什么是容忍度(Toleration)
    • 3、为什么master节点上不跑业务pod
    • 4、这种打污点让我想到了通过nodename可以指定node节点
    • 5、怎么打污点
      • 5.1、基本用法
      • 5.2、查了一下chat
      • 5.3、effect污点效果的三种状态
      • 5.4、打标签的时候定义的key和value有什么用呢
    • 6、查看有没有打污点
    • 7、打污点实验
      • 7.1、实验1
      • 7.2、实验2
    • 8、容忍时间
    • 9、内置污点
    • 10、操作符Equal 和 Exists 的区别是什么
    • 11、k8s中的HPA功能比传统的集群有什么优势?
    • 12、k8s的调度算法(💘)

kubernetes-污点和容忍

1、什么是污点(Taint)

污点(Taint)是一种用于节点调度的机制。污点可以被认为是节点上的一种属性,它表示节点具有一些特定的限制或条件。当节点设置了污点后,只有具有对应的容忍(Toleration)标记的Pod才能被调度到该节点上。

在node节点上打污点,调度器在调度的时候,会选择没有污点的节点去启动pod。

2、什么是容忍度(Toleration)

pod有污点的节点服务器,任然可以调度到这个节点上去运行

调度器在调度的过程中会查看节点服务器是否有污点,然后看pod的策略里是否能容忍这个污点,如果能容忍就调度到这个节点服务器上,如果不能容忍就不调度过去。

本质上可以达到想让哪些pod调度到哪些节点上

3、为什么master节点上不跑业务pod

因为master有污点!!!

默认业务pod都不调度到master

4、这种打污点让我想到了通过nodename可以指定node节点

[root@master taint_toleration]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: demo-podnamespace: defaultlabels:app: myappenv: dev
spec:nodeName: node-1containers:- name: busyboximage: busybox:latestimagePullPolicy: IfNotPresentcommand:- "/bin/sh"- "-c"- "sleep 3600"
[root@master taint_toleration]# 
[root@master taint_toleration]# kubectl apply -f pod.yaml 
pod/demo-pod created
[root@master taint_toleration]# kubectl get -f pod.yaml -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
demo-pod   1/1     Running   0          9s    10.244.84.185   node-1   <none>           <none>
[root@master taint_toleration]# 

很明显在node-1上

5、怎么打污点

5.1、基本用法

可以使用命令 kubectl taint给节点增加一个污点

kubectl taint nodes node1 key1=value1:NoSchedule

给节点 node1 增加一个污点,它的键名是 key1,键值是 value1,效果是 NoSchedule。 这表示只有拥有和这个污点相匹配的容忍度的 Pod 才能够被分配到 node1 这个节点。

若要移除上述命令所添加的污点,你可以执行:

kubectl taint nodes node1 key1=value1:NoSchedule-

5.2、查了一下chat

在 Kubernetes 中,你可以使用污点(Taints)和容忍(Tolerations)来影响 Pod 的调度。

设置节点上的污点:

要设置节点上的污点,你需要编辑节点的描述并添加 taints。以下是一个示例:

apiVersion: v1
kind: Node
metadata:name: xianchaonode1
spec:taints:- key: example-keyvalue: example-valueeffect: NoSchedule
  • key: 污点的键,用于标识污点。
  • value: 污点的值,可选。
  • effect: 污点的效果,可以是 NoSchedulePreferNoScheduleNoExecute。在这个例子中,NoSchedule 表示新的 Pod 不会被调度到具有这个污点的节点上。

设置 Pod 的容忍:

要设置 Pod 的容忍,你需要在 Pod 的描述中添加 tolerations。以下是一个示例:

apiVersion: v1
kind: Pod
metadata:name: demo-pod
spec:tolerations:- key: example-keyoperator: Equalvalue: example-valueeffect: NoSchedule
  • key: 容忍的键,应该与节点上的污点的键匹配。
  • operator: 操作符,通常为 Equal
  • value: 容忍的值,应该与节点上的污点的值匹配。
  • effect: 容忍的效果,通常为 NoSchedule

这样,Pod 就能够容忍节点上的具有匹配污点的条件,从而可以被调度到这样的节点上。

请注意,这只是一个简单的示例,实际上可以根据需要进行更复杂的设置,包括容忍多个污点和在容忍中使用 Exists 操作符等。

5.3、effect污点效果的三种状态

  1. NoSchedule
    • 这是最常见的效果。当节点上有这个效果的污点时,新的 Pod 将不会被调度到该节点上。
    • 已经在节点上运行的 Pod 不受影响,它们将继续在节点上运行。
  2. PreferNoSchedule
    • 这个效果表示 Kubernetes 将尽量避免在具有该污点的节点上调度 Pod,但不是强制性的。如果没有其他可用的节点,Pod 仍然可以被调度到带有 PreferNoSchedule 污点的节点上。
    • 已经在节点上运行的 Pod 不受影响,它们将继续在节点上运行。
  3. NoExecute
    • 这是一个更强制的效果。除了阻止新的 Pod 被调度到带有这个污点的节点上之外,它还会影响已经在节点上运行的 Pod。
    • 对于已经在节点上运行的 Pod,如果它们不满足容忍(Tolerations),它们将被驱逐(eviction)出节点。这是一个更强制的效果,用于确保节点上的 Pod 在添加了 NoExecute 污点后被逐出。

5.4、打标签的时候定义的key和value有什么用呢

在Kubernetes中,打标签是为了给资源对象(例如Pod、Node、Service等)附加自定义的元数据。标签由键值对组成,键和值可以是任意字符串。

标签的作用是用于对资源进行分类、筛选和识别。通过为资源对象添加标签,你可以根据标签来选择性地操作或管理这些资源。

  • 标识是什么类型的污点
  • 方便调度的时候,pod能识别出来,容忍这个污点

6、查看有没有打污点

[root@master taint_toleration]# kubectl describe node master|grep -i taint
Taints:             node-role.kubernetes.io/master:NoSchedule
[root@master taint_toleration]# 

7、打污点实验

7.1、实验1

尝试给自己的node-1打污点

kubectl taint nodes node-1 cf=tencent:NoSchedule
[root@master taint_toleration]# kubectl taint nodes node-1 cf=tencent:NoSchedule
node/node-1 tainted
[root@master taint_toleration]# kubectl describe node node-1|grep -i taint
Taints:             cf=tencent:NoSchedule
[root@master taint_toleration]# 

创建pod看是否能调度到node-1上

[root@master taint_toleration]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 6selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.16.1ports:- containerPort: 80
[root@master taint_toleration]# 

实践一下: 发现都在node2上

[root@master taint_toleration]# kubectl get pod -o wide
NAME                                   READY   STATUS              RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
nginx-deployment-559d658b74-9zr2c      1/1     Running             0          65s   10.244.247.2    node-2   <none>           <none>
nginx-deployment-559d658b74-dgfpn      0/1     ContainerCreating   0          65s   <none>          node-2   <none>           <none>
nginx-deployment-559d658b74-l4whp      1/1     Running             0          65s   10.244.247.1    node-2   <none>           <none>
nginx-deployment-559d658b74-wnjxj      1/1     Running             0          65s   10.244.247.7    node-2   <none>           <none>
nginx-deployment-559d658b74-wspwq      0/1     ContainerCreating   0          65s   <none>          node-2   <none>           <none>
nginx-deployment-559d658b74-xrtr5      1/1     Running             0          65s   10.244.247.10   node-2   <none>           <none>
sc-nginx-deployment-66b6c48dd5-cxkzn   1/1     Running             1          8h    10.244.84.183   node-1   <none>           <none>
sc-nginx-deployment-66b6c48dd5-qmmn6   1/1     Running             1          8h    10.244.84.184   node-1   <none>           <none>
[root@master taint_toleration]# 

如果这个时候给node-2上也打个污点,状态用:NoExecute,那所有的pod都不能用了,状态变为:Pending

kubectl taint nodes node-2 cf=tencent:NoExecute
[root@master taint_toleration]# kubectl taint nodes node-2 cf=tencent:NoExecute
node/node-2 tainted
[root@master taint_toleration]# kubectl get pod -o wide
NAME                                   READY   STATUS        RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
nginx-deployment-559d658b74-4mbvp      0/1     Pending       0          2s    <none>          <none>   <none>           <none>
nginx-deployment-559d658b74-9zr2c      0/1     Terminating   0          10m   10.244.247.2    node-2   <none>           <none>
nginx-deployment-559d658b74-c6kzv      0/1     Pending       0          2s    <none>          <none>   <none>           <none>
nginx-deployment-559d658b74-dgfpn      0/1     Terminating   0          10m   10.244.247.9    node-2   <none>           <none>
nginx-deployment-559d658b74-hqn4s      0/1     Pending       0          2s    <none>          <none>   <none>           <none>
nginx-deployment-559d658b74-l4whp      0/1     Terminating   0          10m   10.244.247.1    node-2   <none>           <none>
nginx-deployment-559d658b74-lqzz5      0/1     Pending       0          2s    <none>          <none>   <none>           <none>
nginx-deployment-559d658b74-tz5ks      0/1     Pending       0          2s    <none>          <none>   <none>           <none>
nginx-deployment-559d658b74-vz7bj      0/1     Pending       0          2s    <none>          <none>   <none>           <none>
nginx-deployment-559d658b74-wnjxj      0/1     Terminating   0          10m   10.244.247.7    node-2   <none>           <none>
nginx-deployment-559d658b74-wspwq      0/1     Terminating   0          10m   10.244.247.12   node-2   <none>           <none>
nginx-deployment-559d658b74-xrtr5      1/1     Terminating   0          10m   10.244.247.10   node-2   <none>           <none>
sc-nginx-deployment-66b6c48dd5-cxkzn   1/1     Running       1          8h    10.244.84.183   node-1   <none>           <none>
sc-nginx-deployment-66b6c48dd5-qmmn6   1/1     Running       1          8h    10.244.84.184   node-1   <none>           <none>
[root@master taint_toleration]# 

这个时候加个容忍度限制 ,修改yaml文件----》定义pod的容忍度能接受定义的污点

[root@master taint_toleration]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 6selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.16.1ports:- containerPort: 80tolerations:- key: "cf"operator: "Equal"value: "tencent"effect: "NoExecute"
[root@master taint_toleration]# 
[root@master taint_toleration]# kubectl apply -f nginx.yaml 
deployment.apps/nginx-deployment configured
[root@master taint_toleration]# kubectl get pod -o wide
NAME                                   READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
nginx-deployment-7ffb6b798c-hpbrn      1/1     Running   0          28s   10.244.247.13   node-2   <none>           <none>
nginx-deployment-7ffb6b798c-k82vg      1/1     Running   0          25s   10.244.247.16   node-2   <none>           <none>
nginx-deployment-7ffb6b798c-khh2c      1/1     Running   0          25s   10.244.247.19   node-2   <none>           <none>
nginx-deployment-7ffb6b798c-nvbxw      1/1     Running   0          25s   10.244.247.14   node-2   <none>           <none>
nginx-deployment-7ffb6b798c-pvr7x      1/1     Running   0          28s   10.244.247.18   node-2   <none>           <none>
nginx-deployment-7ffb6b798c-s8tzz      1/1     Running   0          28s   10.244.247.11   node-2   <none>           <none>
sc-nginx-deployment-66b6c48dd5-cxkzn   1/1     Running   1          8h    10.244.84.183   node-1   <none>           <none>
sc-nginx-deployment-66b6c48dd5-qmmn6   1/1     Running   1          8h    10.244.84.184   node-1   <none>           <none>
[root@master taint_toleration]# 

然后就都跑起来了

7.2、实验2

修改nginx.yaml文件的operator和key

[root@master taint_toleration]# vim nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment-3
spec:replicas: 6selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.16.1ports:- containerPort: 80tolerations:- key: ""operator: "Exists"value: ""effect: ""
[root@master taint_toleration]# 

能容忍任何的污点和排斥等级

[root@master taint_toleration]# kubectl apply -f nginx.yaml 
deployment.apps/nginx-deployment-3 created
[root@master taint_toleration]# kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
nginx-deployment-3-6bd9f68d59-6kpl9    1/1     Running   0          82s
nginx-deployment-3-6bd9f68d59-7whcx    1/1     Running   0          82s
nginx-deployment-3-6bd9f68d59-86xz9    1/1     Running   0          82s
nginx-deployment-3-6bd9f68d59-888dn    1/1     Running   0          82s
nginx-deployment-3-6bd9f68d59-hsbj7    1/1     Running   0          82s
nginx-deployment-3-6bd9f68d59-kj5f9    1/1     Running   0          82s

如果key为空,操作符号是Exists ↓

image-20240313193755082

8、容忍时间

在Kubernetes中,污点(Taints)和容忍度(Tolerations)是调度策略的一部分,用于控制Pod是否可以被调度到特定的节点上。当节点上有污点,并且Pod具有相应的容忍度时,Pod可以被调度到该节点。容忍度中的“容忍时间”(tolerationSeconds)是一个特定的字段,它与NoExecute效果的污点相关联。

当一个节点被标记为NoExecute效果的污点时,意味着新的Pod将不会被调度到这个节点上,而且已经存在于该节点上的Pod也会被驱逐。然而,如果你在Pod的容忍度中设置了tolerationSeconds,这将为Pod提供一个宽限期,在这个宽限期内,Pod可以继续在该节点上运行,即使它不容忍节点上的污点。

tolerationSeconds的值是一个整数,表示Pod在被驱逐之前可以继续在节点上运行的秒数。当tolerationSeconds设置为0时,Pod将立即被驱逐。如果tolerationSeconds没有被设置,Pod将不会被赋予任何宽限期,一旦节点上的污点变为NoExecute,Pod将立即被驱逐。

这是一个NoExecute污点和tolerationSeconds的示例:

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagetolerations:- key: "key"operator: "Equal"value: "value"effect: "NoExecute"tolerationSeconds: 3600

在这个例子中,如果Pod被调度到一个具有相应污点的节点上,它将有3600秒(1小时)的时间来完成其工作并在被驱逐前进行清理。这个时间允许系统管理员或自动化工具在Pod被强制移除之前,有机会重新调度Pod到其他节点。

9、内置污点

image-20240313194851150

10、操作符Equal 和 Exists 的区别是什么

在 Kubernetes 中,EqualExists 是容忍(Tolerations)操作符,用于定义 Pod 在调度时对节点上的污点的容忍条件。

  1. Equal(等于):

    • 使用 Equal 操作符时,你可以指定具体的污点键、值和效果,以确保 Pod 只会被调度到具有与容忍条件完全匹配的污点的节点上。
    • 例如,如果你的节点上有一个污点:key=example-key, value=example-value, effect=NoSchedule,你可以在 Pod 中添加以下容忍条件,以确保它只能被调度到带有相同污点的节点上:
      tolerations:
      - key: example-keyoperator: Equalvalue: example-valueeffect: NoSchedule
      
  2. Exists(存在):

    • 使用 Exists 操作符时,你只需指定污点的键,而不需要指定值和效果。Pod 将容忍带有匹配键的任何污点,无论污点的值和效果如何。
    • 这对于那些只关心某个特定键是否存在,而不关心具体值和效果的情况非常有用。
    • 例如,如果你只关心节点上是否存在一个名为 example-key 的污点,而不关心其值和效果,你可以使用以下容忍条件:
      tolerations:
      - key: example-keyoperator: Exists
      

总的来说,Equal 更精确,要求匹配键、值和效果,而 Exists 只关心键是否存在,不考虑值和效果。选择使用哪种操作符取决于你的具体需求和场景。

image-20240313192035358

11、k8s中的HPA功能比传统的集群有什么优势?

  1. 启动速度快

  2. 扩展性更高

  3. 资源消耗方面---->节省服务器

  4. 价格

  5. 成本

  6. 稳定性

  7. 可靠性

12、k8s的调度算法(💘)

  1. deployment: 全自动调度 --》根据每台节点服务器的综合算力

  2. nodename 节点名字

  3. node selector:定向调度–>根据node的标签去调度

  4. nodeaffinity 节点亲和性 --》尽量把不同的pod放到一台node上

  5. podaffinity pod亲和性–》尽量把相同的pod放到一起

  6. taints和tolerations 污点和容忍度

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

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

相关文章

SQLite—免费开源数据库系列文章目录

SQLite系列相关文章较多特开本文为了便于读者阅读特写了本索引和目录之用本文将不断更新中有需要的读者可以收藏本文便于导航到各个专题( 持续更新中......)。收藏一篇等于收藏一个系列文章 简介类&#xff1a; SQLite——世界上部署最广泛的免费开源数据库&#xff08;简介&…

一站式数据采集物联网平台:智能化解决方案,让数据管理更高效、更安全

JVS物联网平台的定位 JVS是企业信息化的“一站式解决方案”&#xff0c;其中包括了基础的数字化底座、各种企业级能力、企业内常见的应用&#xff0c;如下图所示&#xff1a; 整体平台能力层有三大基础能力&#xff1a; 低代码用于业务的定义;数据分析套件用于数据的自助式分…

渗透某巨型企业某个系统的奇葩姿势

前言 这个月都在做一个巨型合作企业的渗透测试&#xff0c;这个系统本无方式getshell&#xff0c;得亏我心够细&#xff0c;想的多&#xff0c;姿势够骚。 文中重码&#xff0c;且漏洞已修复。 过程 找到getshell点 目标系统功能很少&#xff0c;基本上就是一个展示页面&a…

C# EPPlus导出dataset----Excel2绘制图像

一、生成折线图方法 /// <summary> ///生成折线图 /// </summary> /// <param name="worksheet">sheet页数据 </param> /// <param name="colcount">总列数</param> /// &l…

如何通过libusb直接向zebra打印机发送zpl,跨平台win/linux

环境&#xff1a;windows & linux & Zebra打印机gt820 windows: 之前安装了Zebra打印机官方驱动&#xff0c;所以先卸载掉驱动。再安装Zadig&#xff0c;用Zadig工具来安装WinUSB驱动。 zadig下载&#xff1a;Zadig - USB driver installation made easy 记住这两个数…

C#制作软件时窗体的弹出与嵌入

文章目录 一、窗体的弹出二、窗体的嵌入 一、窗体的弹出 这里面我们以Windows窗体应用程序为例&#xff0c;这里面达到的效果如下&#xff1a; 点击指定按钮&#xff0c;弹出目标窗口。接下来我们看具体操作&#xff1a; 这是我们的主窗体&#xff1a; 接下来我们需要在这个…

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列一:R-CNN图文详解

学习视频&#xff1a;Faster-RCNN理论合集 概念辨析 在目标检测中&#xff0c;proposals和anchors都是用于生成候选区域的概念&#xff0c;但它们在实现上有些许不同。 Anchors&#xff08;锚框&#xff09;&#xff1a; 锚框是在图像中预定义的一组框&#xff0c;它们通常以…

单据分页的实现

单据分页的实现 1. AceWzcgfkjtMaintainProxy.java package nc.ui.jych.wzcgfkjt.ace.serviceproxy;import nc.bs.framework.common.NCLocator; import nc.itf.jych.IWzcgfkjtMaintain; import nc.ui.uif2.components.pagination.IPaginationQueryService; import nc.vo.jych.…

《系统架构设计师教程(第2版)》第6章-据库设计基础知识-03-关系数据库设计

文章目录 0. 设计的基本步骤0.1 用户需求分析0.2 概念结构设计0.3 逻辑结构设计0.4 物理结构设计0.5 数据库实施阶段0.6 数据库运行和维护阶段 1. 数据需求分析1.1 概述1.2 需要获取的需求 2. 概念结构设计2.1 概述2.2 E-R方法2.3 概念结构设计工作步骤2.3.1 选择局部应用2.3.2…

Stable Diffusion 模型下载:Juggernaut(主宰、真实、幻想)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型是一个真实模型&#xff0c;并且具有幻想和创意色彩。 作者述&#xff1a;我选取了…

阿里云-云服务器ECS新手如何建网站?

租阿里云服务器一年要多少钱&#xff1f; 不同类型的服务器有不同的价格。 以ECS计算型c5为例&#xff1a;2核4G-1年518.40元&#xff0c;4核8G-1年948.00元。 阿里云ECS云服务器租赁价格由三部分组成&#xff1a; 也就是说&#xff0c;云服务器配置成本磁盘价格网络宽带价格…

MBT-Net

feature F&#xff0c;edge feature E-F where r related to the relative position 辅助信息 作者未提供代码