k8s污点与容忍

k8s污点与容忍

    • k8s污点管理常用命令
      • effect标记值
      • 查看污点
      • 添加污点
      • 删除污点
    • node污点与容忍
      • 污点容忍yaml示例
      • 容忍放大
      • 基于污点的驱逐
      • 驱逐时排除指定服务
    • 设置master调度
      • 设置master尽量不调度
      • 允许master节点调度pod
      • 恢复Master Only状态
      • 将node标记为不可调度状态(节点警戒)
      • 设置node不可用并驱逐节点上的所有pod(腾空节点)
      • 设置node为可用

k8s污点管理常用命令


effect标记值

effect标记值


查看污点

对于k8s1.24+,master节点将不再添加node-role.kubernetes.io/master 标签, 只会添加node-role.kubernetes.io/control-plane标签。更多信息请参考 KEP-2067:重命名 kubeadm “master” 标签和污点。
https://kubernetes.io/zh-cn/blog/2022/04/07/upcoming-changes-in-kubernetes-1-24/

# 查看所有node的污点信息‌:ml-citation{ref="1,5" data="citationList"}  
kubectl describe nodes | grep -i Taints# 查看污点
kubectl describe nodes node名 |grep Taints
# Taints:   node.kubernetes.io/unreachable:NoSchedule

在这里插入图片描述


添加污点

# 添加污点
kubectl taint nodes node名 key=value:effect值# 添加 NoSchedule 污点
kubectl taint nodes node1 app=monitoring:NoSchedule# 添加 NoExecute 污点(驱逐现有 Pod)  
kubectl taint nodes node2 disk=ssd:NoExecute# 添加新污点  
kubectl taint nodes node1 app=logging:NoExecute# 添加 尽量不调度 PreferNoSchedule 
kubectl taint nodes k8s-master02 node-role.kubernetes.io/master:PreferNoSchedule## effect是标记值
kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value1:NoExecute
kubectl taint nodes node1 key2=value2:PreferNoSchedule# 给master1机器加NoSchedule污点--k8s1.23
kubectl taint nodes m1 node-role.kubernetes.io/control-plane:NoSchedule

在这里插入图片描述


删除污点

# 去除污点
kubectl taint nodes node名 key:effec值-
## 或 
kubectl taint nodes node名 key=value-
## 建议
kubectl taint nodes node名 key-# 删除指定 key 和 effect 的污点  
kubectl taint nodes node1 app=monitoring:NoSchedule-# 删除所有 effect 类型的污点(需明确指定 key 和 effect)
kubectl taint nodes node2 disk=ssd:NoExecute-# 去除污点NoSchedule,最后一个"-"代表删除
kubectl taint nodes k8s-master02 node-role.kubernetes.io/master:NoSchedule-# 删除旧污点  
kubectl taint nodes node1 app=monitoring:NoSchedule-

在这里插入图片描述


node污点与容忍

参考: 官方污点文档

三只兔子的故事来了解k8s污点与容忍

为什么Node要使用污点:

  • 安全考虑
  • Node职责角色分工不同
  • 硬件不同

污点也类似于在node上打一个标签.例如专用节点,比如GPU,SSD等,一般pod不会运行在这种专用节点,如果pod想运行在这种专用节点上,需要配置污点容忍.

Taint: 污点,避免pod调度到特定Node上,相当于排斥Pod
Tolerations: 污点容忍,允许pod调度到带有特定Taints的Node上


污点容忍yaml示例

apiVersion: v1
kind: Pod
metadata:name: nginxlabels:env: test
spec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresent# 污点容忍tolerations:# 容忍key=example-key 等effect值存在NoSchedule- key: "example-key"operator: "Exists"# value: "example-value"  # 可不配置effect: "NoSchedule"

容忍放大

k8s的一些基础静态pod,比如apiserver,配置的就是容忍放大,下方是示例
容忍放大,只要keyeffect存在即容忍.

apiVersion: v1
kind: Pod
metadata:name: apiserverlabels:env: test
spec:containers:- name: apiserverimage: apiserverimagePullPolicy: IfNotPresent# 污点容忍tolerations:# 容忍所有effect值为NoSchedule的污点- effect: NoScheduleoperator: Exists# 容忍污点key值CriticaAddonsOnly存在- key: CriticaAddonsOnlyoperator: Exists# 容忍所有effect值为NoExecute的污点- effect: NoExecuteoperator: Exists

基于污点的驱逐

参考: 官方文档

kubelet 驱逐策略详解

污点的 effect 值 NoExecute会影响(驱逐)已经在节点上运行的 Pod,如果Pod没有配置容忍 effect 值为 NoExecute 的污点,会被立即驱逐.

Pod配置了容忍NoExecute,但在容忍度定义中没有指定 tolerationSeconds(宽限期),则 Pod 还会一直在这个节点上运行。

Pod配置了容忍NoExecute,,而且指定了 tolerationSeconds(宽限期), 则 Pod 还能在这个节点上继续运行这个指定的时间长度。

节点故障时,节点控制器会自动给节点添加一个(内置)污点.如果异常状态恢复正常,kubelet 或节点控制器能够移除相关的污点。


驱逐时排除指定服务

# 说明:此命令将驱逐节点上运行的pod服务
## --ignore-daemonsets  驱逐的时候排除daemonset类型服务
[root@wps]# kubectl drain 10.226.xxx.xxx --ignore-daemonsets

设置master调度


设置master尽量不调度

尽量不调度的污点PreferNoSchedule;
禁止调度并驱逐的污点NoExecute

# master添加 尽量不调度 PreferNoSchedule 
kubectl taint nodes k8s-master02 node-role.kubernetes.io/master:PreferNoSchedule

允许master节点调度pod

# 去除污点NoSchedule,最后一个"-"代表删除污点# 允许所有master节点调度pod
kubectl taint nodes --all node-role.kubernetes.io/master-# 允许master2节点调度pod;
kubectl taint nodes k8s-master02 node-role.kubernetes.io/master:NoSchedule-

恢复Master Only状态

参考: https://cloud.tencent.com/developer/article/1788356

# 指定master1为Only状态(加污点,不允许pod调度)
kubectl taint node maser1 node-role.kubernetes.io/master="":NoSchedule

将node标记为不可调度状态(节点警戒)

# 将node标记为不可调度状态(节点警戒)
kubectl cordon node名

设置node不可用并驱逐节点上的所有pod(腾空节点)

当节点磁盘空间不足时,Pod被驱逐的顺序为: BestEffort先于 Burstable

# 切换到名为ek8s的集群
kubectl config use-context ek8s# 查看node状态
kubectl get nodes# 设置节点不可用并驱逐节点上的所有pod(腾空节点)
## 节点排水(驱逐节点上的所有pod)
## 忽略节点上不能杀死的特定系统Pod,例如:CNI插件,daemonSet
## --delete-local-data 清空本地数据
## --ignore-daemonsets 忽略daemonsets错误
## --force 强制执行
kubectl drain ek8s-node-1 --ignore-daemonsets --force # 考试执行
## 如果报错,加--delete-local-data 清空本地数据
kubectl drain ek8s-node-1 --delete-local-data --ignore-daemonsets --force # 练习执行# 查看node状态
kubectl get nodes# 查看污点
kubectl describe nodes node名 |grep Taints
# Taints:   node.kubernetes.io/unreachable:NoSchedule

设置node为可用

# 标记my-node 节点为可以调度
kubectl uncordon node名# 取消污点
## 如果已存在具有指定键和效果的污点,则替换其值为指定值。
kubectl taint nodes node名 dedicated=special-user:NoSchedule# 去除污点NoSchedule,最后一个"-"代表删除
kubectl taint nodes node名 node-role.kubernetes.io/master:NoSchedule-# 查看污点是否去除
kubectl describe nodes node名 |grep Taints

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

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

相关文章

(BFS)题解:P9425 [蓝桥杯 2023 国 B] AB 路线

题解:P9425 [蓝桥杯 2023 国 B] AB 路线 题目传送门 P9425 [蓝桥杯 2023 国 B] AB 路线 一、题目描述 给定一个NM的迷宫,每个格子标记为A或B。从左上角(1,1)出发,需要移动到右下角(N,M)。移动规则是:必须交替走K个A格子和K个B…

python-leetcode 62.搜索插入位置

题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置 方法一:二分查找 假设题意是在排序数组中寻找是否存在一个目标值,则可以…

【计网速通】计算机网络核心知识点和高频考点——数据链路层(一)

数据链路层核心知识点(一) 一、数据链路层概述 1.1 基本概念 数据链路层位于OSI模型的第二层,介于物理层和网络层之间,主要负责在相邻节点之间传输和识别数据帧。 1.2 主要功能 帧同步:识别帧的开始和结束差错控制…

模型部署与调用

目录 部署 ollama下载 模型版本选择 ​编辑 对照表 控制台执行 调用 部署 大模型部署我使用的是Ollama,点击跳转 接下来我将在本地使用ollama就行模型部署的演示 ollama下载 模型版本选择 对照表 大家可以根据自己的显卡配置选择对应的模型版本 控制台执…

Rstudio如何使用Conda环境配置的R

前言 Rstudio作为一款流行的R语言集成开发环境(IDE),为用户提供了便捷的编程体验。然而,不同项目可能需要不同版本的R,这就需要我们灵活切换R版本。除了在之前文章中提到的使用 Docker 部署不同版本的 R 的方法之外&am…

C++---RAII模式

一、RAII模式概述 1. 定义 RAII(Resource Acquisition Is Initialization)即资源获取即初始化,是C中用于管理资源生命周期的一种重要编程模式。其核心在于将资源的获取和释放操作与对象的生命周期紧密绑定。当对象被创建时,资源…

【功能开发】DSP F2837x 检测中断所有函数运行一次的时间

要查看 DSP F28377 的 CPU 在 50 微秒一次的中断内所有程序运行完总共占用了中断多长时间,可以采用硬件定时器测量和软件计时两种常见方法。 方法一:使用硬件定时器测量 原理 利用 DSP 内部的高精度硬件定时器,在中断开始时记录定时器的值…

MAC环境给docker换源

2025-03-28 MAC环境给docker换源 在官网下载docker ,dmg 文件 参考: https://blog.csdn.net/qq_73162098/article/details/145014490 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},&q…

Vulnhub-zico2靶机打靶记录

本篇文章旨在为网络安全渗透测试靶机教学。通过阅读本文,读者将能够对渗透Vulnhub系列zico2靶机有一定的了解 一、信息收集阶段 靶机下载地址:https://download.vulnhub.com/zico/zico2.ova 因为靶机为本地部署虚拟机网段,查看dhcp地址池设…

【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)

🚀 力扣热题 347:前 K 个高频元素(详细解析) 📌 题目描述 力扣 347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k,请你返回其中出现频率 前 k 高的元素。你可以按 任意顺序 返回答案。 &#x1f…

Java 大视界 -- Java 大数据机器学习模型在金融衍生品定价中的创新方法与实践(166)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

深度学习入门:从神经网络基础到简单实现

深度学习作为人工智能领域最令人兴奋的技术之一,已经在图像识别、自然语言处理、语音识别等多个领域取得了突破性进展。本文将深入浅出地介绍深度学习的基本概念,并通过Python代码实现一个简单的神经网络模型,帮助读者建立直观理解并迈出实践第一步。 神经网络的基本原理 …

第2.6节 iOS生成全量和增量报告

2.6.1 简介 在采集了覆盖率数据后,就需要生成对应需求的全量和增量覆盖率报告,以便对测试进行查漏补缺。IOS系统有两种开发语言,所以生成报告的方式也不相同,下面就分别介绍一下Object C和Swift语言如何生成覆盖率报告。 2.6.2 O…

STM32技能综合巩固

一、深入理解ARMCPU架构及其指令格式、ARM汇编语言编程方法 1.汇编语言编程,实现LED灯 新建keil项目,选择芯片 选择运行环境以及配置 添加.s文件 汇编程序: AREAMYDATA,DATA AREAMYCODE,CODE ENTRY EXPORT__main __main MOVR0,#10 M…

P2Rank网页端:预测蛋白结合口袋+vina分子对接

P2Rank 是一种基于机器学习的蛋白质口袋预测工具,用于识别蛋白质结构中的潜在配体结合位点。它采用了一种基于物理特征的打分方法,结合随机森林(Random Forest)机器学习模型,以提高口袋预测的精确度。 该程序有在线工具…

安装windows server 2016没有可选硬盘,设备安装过ubuntu系统

如果在安装 Windows Server 2016 时无法识别已安装过 Ubuntu 的硬盘,可能是由于硬盘分区格式(如 ext4)与 Windows 不兼容,或缺少必要的驱动程序。以下是详细的解决方案: 1. 检查 BIOS/UEFI 设置 确认硬盘模式 • 重启电…

Debian系统_主板四个网口1个配置为WAN,3个配置为LAN

Debian系统_主板四个网口1个配置为WAN,3个配置为LAN 一、重新配置网口 1、查看当前网口的状态 ifconfig 或者 ip link show 或者 ls /sys/class/net 2、修改网络配置文件 sudo vi /etc/network/interfaces 注意WAN口的网关地址如果是192.168.3.1的话,L…

springboot整合Thymeleaf web开发出现Whitelabel Error Page

背景 在做java端上应用开发的时候,从资源和部署操作成本两方面考虑,一般会将前端的静态资源直接与后端应用一起打包,通过springboot内嵌的Tomcat提供web服务。进入web首页登录一直到后续业务流程正向操作,页面都能正常加载静态资…

JavaScript元素尺寸与位置

目录 client 家族与 offset 家族 一、client 家族:内容区域 内边距 示例代码 应用场景 二、offset 家族:内容区域 内边距 边框 滚动条 示例代码 应用场景 三、综合应用场景 1. 动态调整元素高度 2. 拖拽元素 3. 判断元素是否在视口内 四…

GZ073网络系统管理赛项赛题第1套模块A:网络构建解题笔记

2. 设备 接口或VLAN VLAN名称 二层或三层规划 说明 S1 VLAN10 CAIWU Gi0/1至Gi0/4 财务部 VLAN20 XIAOSHOU Gi0/5至Gi0/8 销售部 VLAN30 YANFA Gi0/9至Gi0/12 研发部 VLAN40 SHICHANG Gi0/13至Gi0/16 市场部 VLAN50 AP Gi0/20至Gi0/21 无线AP管理 VL…