k8s调度(pod亲和、反亲和、污点、容忍度)

2024-09-07 19:20

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

pod亲和性

针对对象为Pod,目的是实现,新建Pod和目标Pod调度到一起,在同一个Node上。
示例:

apiVersion: v1
kind: Pod
metadata:name: testpod01labels:app: myapp01env: test1
spec:containers:- name: testpod01image: nginx:1.23.2---
apiVersion: v1
kind: Pod
metadata:name: testpod02labels:app: myapp02env: test2
spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:  ##必须满足下面匹配规则- labelSelector:matchExpressions:- key: appoperator: In  values:- myapp01  ## app=myapp01, 上面的Pod是符合要求的topologyKey: "kubernetes.io/hostname"containers:- name: testpod02image: redis:6.2

用上面两个yaml文件,创建两个在同一个node上的两个pod。

kubectl apply -f testpod1.yaml
kubectl apply -f testpod2.yamlkubectl get po -o wide    #观察两个pod被分配到相同的node上
kubectl get node --show-labels
kubectl get pods --show-labels

Pod反亲和性

针对对象为Pod,目的是实现,新建Pod和目标Pod不要调度到一起,不在同一个Node上。
如果之前有测试pod,先删除然后再做下面实验

kubectl delete -f testpod2.yaml

修改testpod2.yaml,示例:

apiVersion: v1
kind: Pod
metadata:name: testpod01labels:app: myapp01env: test1
spec:containers:- name: testpod01image: nginx:1.23.2---
apiVersion: v1
kind: Pod
metadata:name: testpod02labels:app: myapp02env: test2
spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:  ##必须满足下面匹配规则- labelSelector:matchExpressions:- key: appoperator: In  values:- myapp01  ## app=myapp01, 上面的Pod是符合要求的topologyKey: "kubernetes.io/hostname"containers:- name: testpod02image: redis:6.2

然后部署,查看是否反亲和:

kubectl apply -f testpod2.yamlkubectl get po -o wide

污点与容忍度

污点(Taint)针对节点来说,和节点亲和性正好相对,节点亲和性使Pod被吸引到一类特定的节点,而污点则使节点能够排斥一类特定的Pod。

容忍度(Toleration)应用于Pod上,它用来允许调度器调度带有对应污点的节点。 容忍度允许调度但并不保证调度:作为其功能的一部分, 调度器也会评估其他参数。

污点和容忍度(Toleration)相互配合,可以避免Pod被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的Pod, 是不会被该节点接受的。

一般使用在daemonset上。对master节点,做保护作用。

设置污点命令格式:

kubectl taint node [node] key=value:[effect]

说明:
其中[effect] 可取值:[ NoSchedule | PreferNoSchedule | NoExecute ]:

  • NoSchedule :一定不能被调度,已经在运行中的Pod不受影响。
  • PreferNoSchedule:尽量不要调度,实在没有节点可调度再调度到此节点。
  • NoExecute:不仅不会调度,还会驱逐Node上已有的Pod。

清除污点命令格式:

kubectl taint node [node] key:[effect]-

设置污点示例:

kubectl taint node rocky9-2 name=rocky:NoSchedule

查看污点:

kubectl describe node rocky9-2 | grep Taints -A 10

清除污点:

kubectl taint node rocky9-2 name-

设置容忍度的几种规则:
1)完全匹配

tolerations:
- key:"taintKey"       #和污点的key名字保持一致operator: "Equal"    #匹配类型,Equal表示匹配污点的所有值value: "taintValue"  #和污点key的值保持一致effect: "NoSchedule" #污点类型

说明:
Pod 的 Toleration声明中的key和effect需要与Taint的设置保持一致。
Operator如果设置为Equal,则key和value,要和Taint的设置保持一致。

2)不完全匹配

tolerations:
- key: "taintKey"      #和污点的key名字保持一致operator: "Exists"   #匹配类型,只要符合污点设置的key即可effect: "NoSchedule" #污点的类型

说明:
Operator如果设置为Exists,则不需要指定value,只看key名字

3)大范围匹配

tolerations:
- key: "taintKey"    #和污点的key名字保持一致operator: "Exists"

说明:
如果不设置effect,则只需要看key名字即可,不管Taint里的effect设置为什么都会匹配到

4)匹配所有

tolerations:- operator: "Exists"

说明:
如果省略key和effect,则匹配所有Taint,在k8s中的daemonsets资源默认情况下是容忍所有污点的。

驱逐延缓时间设置

tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect:"NoExecute"
tolerationSeconds:3600

说明:
如果这个Pod正在运行,那么Pod还将继续在节点上运行3600秒,然后被驱逐。如果在此之前上述污点被删除了,则Pod不会被驱逐。

完整Pod YAML示例:

apiVersion: v1
kind: Pod
metadata:name: nglabels:env: dev
spec:containers:- name: ngimage: nginx:1.21.0tolerations:- key: nameoperator: Existseffect: NoSchedule

然后部署

kubectl apply -f toleration.yaml
kubectl describe po ngkubectl delete -f toleration.yaml  #删除,然后设计设置污点
kubectl apply -f toleration.yaml

这篇关于k8s调度(pod亲和、反亲和、污点、容忍度)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

搭建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