K8S学习指南(46)-k8s调度之污点与容忍度

2023-12-29 08:28

本文主要是介绍K8S学习指南(46)-k8s调度之污点与容忍度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 引言
    • 什么是污点与容忍度?
    • 污点(Taints)的基本结构
    • 容忍度(Tolerations)的基本结构
    • 污点与容忍度的使用方法
      • 1. 定义节点污点
      • 2. 定义Pod容忍度
      • 3. 验证污点与容忍度
    • 实际应用示例
    • 结论

引言

Kubernetes(K8s)是一款开源的容器编排平台,具有强大的调度系统,负责将容器化应用程序合理地分配到集群中的节点上。在K8s中,通过污点(Taints)和容忍度(Tolerations)的机制,可以实现对节点的特性进行标记和容忍,从而实现更灵活的调度策略。本文将深入讨论污点与容忍度的概念、用法,并通过详细的示例演示如何在实际场景中应用这两个特性。

什么是污点与容忍度?

在Kubernetes中,污点是一种用于标记节点的机制,它表示该节点上可能存在某些不适用于所有Pod的特性,如特定硬件、操作系统等。而容忍度则是Pod对污点的响应机制,它定义了Pod是否可以被调度到带有特定污点的节点上。

污点和容忍度的主要应用场景包括:

  1. 硬件差异: 将某个节点标记为具有特定硬件特性,如GPU,然后只有那些具备相应容忍度的Pod才能被调度到该节点上。
  2. 操作系统需求: 标记一些节点为运行特定操作系统的节点,只有设置了相应容忍度的Pod才能被调度到这些节点上。
  3. 节点负载限制: 将一些节点标记为负载较高,只有具备相应容忍度的Pod才能被调度到这些节点上,以实现负载均衡。

污点(Taints)的基本结构

在使用污点之前,我们需要了解其基本结构。一个节点可以被标记为具有一个或多个污点,每个污点都由以下几个组件构成:

  • key: 污点的键,用于标识污点。
  • value: 污点的值,与键一起形成唯一的标识。
  • effect: 污点的作用效果,包括NoSchedule(不调度)、PreferNoSchedule(尽量不调度)和NoExecute(驱逐已有Pod)。

以下是一个简单的节点污点示例:

apiVersion: v1
kind: Node
metadata:name: node-1
spec:taints:- key: "special"value: "gpu"effect: "NoSchedule"

在这个示例中,我们将名为node-1的节点标记为具有一个特殊的污点,键为special,值为gpu,作用效果为NoSchedule,表示不允许调度普通Pod到这个节点上。

容忍度(Tolerations)的基本结构

容忍度是Pod对污点的响应机制,它定义了Pod是否可以被调度到带有特定污点的节点上。每个容忍度都由以下几个组件构成:

  • key: 容忍度的键,与污点的键进行匹配。
  • operator: 匹配操作符,包括Exists(键存在)、Equal(键值匹配)等。
  • value: 匹配的值,与污点的值进行匹配。
  • effect: 匹配成功后的生效效果,包括NoSchedule(不调度)、PreferNoSchedule(尽量不调度)和NoExecute(驱逐已有Pod)。

以下是一个简单的Pod容忍度示例:

apiVersion: v1
kind: Pod
metadata:name: tolerant-pod
spec:containers:- name: nginx-containerimage: nginx:latesttolerations:- key: "special"operator: "Equal"value: "gpu"effect: "NoSchedule"

在这个示例中,我们创建了一个名为tolerant-pod的Pod,定义了容忍度,表示该Pod可以被调度到带有special键为gpu值的节点上。

污点与容忍度的使用方法

1. 定义节点污点

要使用污点,首先需要在节点的定义中配置污点。以下是一个带有多个污点的节点定义示例:

apiVersion: v1
kind: Node
metadata:name: node-2
spec:taints:- key: "special"value: "gpu"effect: "NoSchedule"- key: "critical"value: "high-load"effect: "NoSchedule"

在这个示例中,我们创建了一个名为node-2的节点,它被标记为具有两个污点。第一个污点的键为special,值为gpu,作用效果为NoSchedule。第二个污点的键为critical,值为high-load,同样作用效果为NoSchedule

2. 定义Pod容忍度

将定义好的污点应用于实际的Pod。以下是一个示例,演示了如何在Pod中定义容忍度:

apiVersion: v1
kind: Pod
metadata:name: tolerant-pod-2
spec:containers:- name: nginx-containerimage: nginx:latesttolerations:- key: "special"operator: "Equal"value: "gpu"effect: "NoSchedule"- key: "critical"operator: "Exists"effect: "NoSchedule"

在这个示例中,我们创建了一个名为tolerant-pod-2的Pod,定义了两个容忍度。第一个容忍度表示该Pod可以被调度到带有special键为gpu值的节点上,而第二个容忍度表示该Pod可以被调度到带有critical键的节点上。

3. 验证污点与容忍度

通过查看节点和Pod的描述,我们可以验证污点与容忍度是否被正确应用。执行以下命令:

kubectl describe node <node-name>
kubectl describe pod <pod-name>

在输出中,你应该能够看到与定义的污点和容忍度相对应的信息,确认节点是否被正确标记为有污点,以及Pod是否被正确容忍。

实际应用示例

假设我们有一个Kubernetes集群,其中包含一些具有GPU的节点,同时一些节点负载较高。我们希望确保GPU密集型的Pod能够被调度到具有GPU的节点上,并且负载较高的Pod能够避免被调度到负载已经较高的节点上。通过污点与容忍度,我们可以实现这一需求。

以下是一个示例,演示了如何在集群中使用污点与容忍度:

apiVersion: v1
kind: Node
metadata:name: gpu-node
spec:taints:- key: "gpu"value: "true"effect: "NoSchedule"
---
apiVersion: v1
kind: Node
metadata:name: high-load-node
spec:taints:- key: "load"value: "high"effect: "NoSchedule"
---
apiVersion: v1
kind: Pod
metadata:name: gpu-intensive-pod
spec:containers:- name: gpu-containerimage: gpu-intensive-app:latesttolerations:- key: "gpu"operator: "Equal"value: "true"effect: "NoSchedule"
---
apiVersion: v1
kind: Pod
metadata:name: low-load-pod
spec:containers:- name: low-load-containerimage: low-load-app:latesttolerations:- key: "load"operator: "Exists"effect: "NoSchedule"

在这个示例中,我们创建了两个节点,分别是gpu-nodehigh-load-node,它们分别被标记为具有gpuload的污点。然后,我们创建了两个Pod,gpu-intensive-podlow-load-pod,它们分别定义了对应的容忍度。gpu-intensive-pod容忍gpu污点,而low-load-pod容忍load污点。

通过这样的方式,我们可以实现GPU密集型Pod被调度到具有GPU的节点上,而负载较低的Pod避免被调度到负载较高的节点上。

结论

污点与容忍度是Kubernetes中非常有用的调度特性,通过定义节点的污点和Pod的容忍度,实现了对集群资源的更细粒度控制。通过本文的详细介绍和示例,希望读者能够更好地理解和运用污点与容忍度,从而优化Kubernetes集群中的Pod的调度策略,提高应用程序的性能和可用性。

这篇关于K8S学习指南(46)-k8s调度之污点与容忍度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548919

相关文章

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

Golang进程权限调度包runtime

关于 runtime 包几个方法: Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行GOMAXPROCS:设置最大的可同时使用的 CPU 核数Goexit:退出当前 goroutine(但是defer语句会照常执行)NumGoroutine:返回正在执行和排队的任务总数GOOS:目标操作系统NumCPU:返回当前系统的 CPU 核数量 p

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍2.4

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

用Cri-O,Sealos CLI,Kubeadm方式部署K8s高可用集群

3.6 Cri-O方式部署K8s集群 注意:基于Kubernetes基础环境 3.6.1 所有节点安装配置cri-o [root@k8s-all ~]# VERSION=1.28[root@k8s-all ~]# curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensu