k8s污点与容忍

news/2024/7/4 7:46:31 标签: kubernetes, 容器, 云原生

1.前言

污点是给node节点打上污点标签,使得pod不能往该node节点上调度,污点有三种模式,分别是NoSchedule、PreferNoSchedule、NoExecute,容忍是给pod打上和node节点一样的污点标签,使pod能调度到带有该污点标签的node节点上

2.污点

NoSchedule:禁止所有pod往该node节点上调度,原本已经在节点上的pod没有影响

PreferNoSchedule:尽量不将pod调度到该节点上,但还是可以接受pod的调度,但是pod的调度一般都会优先调度到没有污点的node上

NoExecute:禁止所有pod往该node节点上调度,原本已经在节点上运行的pod也将被驱逐出去

接下来使用一下以上的三个污点模式,一个节点可以被设置多个污点

kubectl taint node 节点名称 key=value:effect

kubectl taint node k8s-node01 web=true:NoSchedule

kubectl taint node k8s-node02 app=true:PreferNoSchedule

kubectl taint node k8s-node01 web=true:NoExecute

查看节点中的污点

kubectl describe node k8s-node02

接下来说一下去除污点

删除特定的一个污点

kubectl taint node k8s-node01 web=true:NoSchedule-

也可以不指定value去删除

kubectl taint node k8s-node02 app:PreferNoSchedule-

删除关于该key的所有污点

kubectl taint node k8s-node01 web-

 3.容忍

如果一个节点有多个污点,则pod必须包含该节点上的所有污点标签才可以被调度到该节点上,当然了PreferNoSchedule的污点标签是不影响的,接下来展示一下容忍的使用

新建一个yaml文件

vi deployment-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata: 
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 3
  progressDeadlineSeconds: 600
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:1.21
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: 50Mi
            cpu: 0.5
          limits:
            memory: 100Mi
            cpu: 1

这个yaml文件中没有设置容忍,接下来给node节点打上污点

kubectl taint node k8s-node01 web=true:NoSchedule

kubectl taint node k8s-node02 key1=value1:NoExecute

给两个node节点都打上了不可调度的污点,现在来执行一下yaml文件看一下效果

kubectl apply -f deployment-nginx.yaml

查看一下pod的状态

kubectl get pod -o wide -n default -l app=nginx

可以看到所有三个pod都是pending状态,node列也显示是none,说明没有适合的node给pod调度

现在更改一下yaml文件,给pod加上k8s-node01的容忍策略

vi deployment-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata: 
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 3
  progressDeadlineSeconds: 600
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:1.21
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: 50Mi
            cpu: 0.5
          limits:
            memory: 100Mi
            cpu: 1
      tolerations:   #配置容忍策略
      - key: web      #k8s-node01中配置的污点key
        operator: Equal  #Equal为等于,即key=value,使用Equal为精确匹配,只有当节点上 key 的值等于 value 时,才可以容忍这个 Taint,还可以使用Exists模糊匹配,使用Exists不用配置value值,只要节点上存在对应的 key,就可以容忍这个 Taint
        value: "true"  #k8s-node01中配置的污点value
        effect: NoSchedule   #k8s-node01中配置的污点effect

重新加载一下 yaml文件配置

kubectl apply -f deployment-nginx.yaml

查看一下pod的状态

kubectl get pod -o wide -n default -l app=nginx

 可以看到增加了k8s-node01污点的容忍策略后,pod都调度到了k8s-node01节点上

容忍策略以上四个常用的配置项外,还有一个配置项tolerationSeconds,此配置项在污点模式为NoExecute时使用,tolerationSeconds 的作用是为了在节点的 Taint 被移除之前,给予一定的时间让 Pod 在该节点上运行。这对于一些需要在节点上运行一段时间的任务非常有用,例如数据迁移、数据备份等


http://www.niftyadmin.cn/n/379780.html

相关文章

架构师成长的三个充分条件

1、大量高风险的决策机会 是的,每个人的成长都需要机会,架构师也是如此。只不过架构师需要的是大量高风险的架构决策机会。 在面临不确定情况时做决策的机会。架构师的成长,就是在更大的领域范围、更高的难度和更大的不确定性下做决策的过程…

团队知识管理实践 -- 以产品帮助文档为例

在一个团队中,知识管理是非常重要的一环。好的知识管理可以提高团队的效率,减少沟通成本,避免重复工作。而产品线帮助文档是一个非常好的知识管理工具,可以帮助团队将知识整理、归纳、共享,并且方便其他人查阅。 在本文…

大数据时代,Python实现API调用的步骤及示例代码;

Python是一种非常流行的编程语言,可以用于实现各种各样的应用程序,其中包括通过API对各种服务进行调用。API是应用程序接口的缩写,它提供了一种编程接口,允许软件开发者使用其他服务的功能,包括访问数据库、发送电子邮…

SAP从入门到放弃系列之MRP区域

注:MRP AREA,本文中MRP范围或MRP区域都是指MRP AREA。另外MRP组和MRP区域是两个概念。 目录 MRP区域-库位层级 MRP区域-分包 其他事项 MRP区域-库位层级 除了在单个工厂级别、物料级别或产品组级别运行 MRP 之外,如果业务需要为以下运行 …

SkyLine简介

简介 SkyLine产品系列(TerraExplorer 、TerraGate、TerraBuilder)是一套优秀的三维数字地球平台软件。凭借其国际领先的三维数字化显示技术,它可以利用海量的遥感航测影像数据、数字高程数据以及其他二三维数据搭建出一个对真实世界进行模拟…

华为外包待了一年,我离职了...

这次来聊一个大家可能也比较关心的问题,那就是就业城市选择的问题。而谈到这个问题,就不可避免地会谈到一些关于:机会?技术氛围?跳槽?薪资水平?等等一系列问题。 正好,这也是大家所…

【Vue全家桶实现电商系统】— VSCode配置Git(二)

【Vue全家桶实现电商系统】— VSCode配置Git(二) 当我们在VScode中编写代码后,需要提交到git仓库时,但是我们又不想切换到git的命令行窗口,我们可以在 VScode中配置git,然后就可以很方便快捷的把代码提交…

【刷题】KY11 二叉树遍历

KY11 二叉树遍历 一、题目描述二、示例三、实现 KY11 二叉树遍历 一、题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G#…