污点、容忍、不可调度、排水、数据卷

2024-09-04 21:44

本文主要是介绍污点、容忍、不可调度、排水、数据卷,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

污点taint

污点的格式

1. key:effect    键名:污点类型

2. key=value:effect   键名=数值:污点类型

污点的类型

1.  NoSchedule

2.  PreferNoSchedule

3. NoExecute(驱逐)

设置污点(主节点操作)

查看污点

删除污点

修改污点

容忍tolerations

Equal类型

NoExecute

Exists类型

没有key 只有effect

​编辑

只有key 没有effect

不可调度cordon

排水drain

数据卷

emptyDir 存储卷

容器内部挂载

hostPath 数据卷

容器和节点挂载

NFS共享存储卷


污点taint

污点:一旦节点上有污点的标签,那么调度器在部署pod的时候会避开这些有污点标签的节点进行部署。

node-role.kubernetes.io/master:NoSchedule    键名:污点类型

污点的格式

1. key:effect    键名:污点类型

effect 指的是污点的类型

2. key=value:effect   键名=数值:污点类型

污点的类型

1.  NoSchedule

表示节点上一旦有这个污点,调度器是不会把pod部署在该节点上的。

2.  PreferNoSchedule

表示尽量避免把pod部署在该节点

3. NoExecute(驱逐)

表示调度器不仅不会把pod部署到该节点,而且会把该节点上的pod驱逐到其他节点上。

注:不是基于deployment创建的pod驱逐之后会被销毁

设置污点(主节点操作)

方式一:kubectl taint node node01 test1=1:NoSchedule

方式二:kubectl taint node node01 test1:NoSchedule

查看污点

kubectl describe nodes master01 查看污点

删除污点

kubectl taint node master01 node-role.kubernetes.io/master:NoSchedule-   删除污点

修改污点

kubectl taint node node01 test1=1:PreferNoSchedule --overwrite   修改污点 

对master节点总结:

1. master节点一般情况下作为集群的调度者,尽量不部署pod。但是为了资源最大化,master也可以部署pod,这个时候可以把master节点设置污点类型 PreferNoSchedule。

2. 如果集群规模很小,也可以直接用来当节点进行pod部署,就是取消污点。

容忍tolerations

容忍:即使节点上有污点,调度器依然可以把pod部署在有污点的节点上。

语法:tolerations

类型:Equal 等于和 Exists 包含

Equal类型

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginximage: nginx:1.22tolerations:
#容忍的语法- key: "test1"
#指定键的名称operator: "Equal"
#容忍里匹配的算法只有两个:Equal 等于;Exists 包含
#Equal匹配的污点格式必须是 test1=1:NoSchedule value: "2"effect: "NoSchedule"
#匹配污点的类型
NoExecute

      tolerations:
#容忍的语法- key: "test1"
#指定键的名称operator: "Equal"
#容忍里匹配的算法只有两个:Equal 等于;Exists 包含
#Equal匹配的污点格式必须是 test1=1:NoSchedule value: "2"effect: "NoExecute"
#匹配污点的类型tolerationSeconds: 10
#指定pod在这个节点上部署成功之后运行多久被驱逐
# tolerationSeconds: 10 使用这个字段必须是NoExecute

Exists类型

没有key 只有effect

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginximage: nginx:1.22tolerations:
#容忍的语法- operator: "Exists"
#使用Exists时,可以不指定key的时候,表示所有的节点只要是NoSchedule的标签都可以部署effect: "NoSchedule"
只有key 没有effect

      tolerations:
#容忍的语法- key: "test1"operator: "Exists"

不可调度cordon

cordon:直接标记节点为不可用的状态,调度器不会把pod部署到该节点

设置不可调度命令:kubectl cordon node02

查看是否是不可调度:kubectl get node

取消不可调度命令:kubectl uncordon node02

排水drain

drain:标记节点为不可调度,而且会把节点上的pod驱逐到其他节点。

设置排水命令:kubectl drain node02 --ignore-daemonsets --delete-local-data --force

--ignore-daemonsets:无视daemonsets部署的pod

--delete-local-data:如果被排水的节点上有本地的挂载点,它也会强制杀死该pod

--force:不是控制器创建的pod会被强制释放

恢复:kubectl uncordon node02

注:排水就排一次,排水跟驱逐类似。

问题:当排水或者驱逐之后,怎么样能让pod重新回到节点?

步骤:1. 污点类型驱逐必须要取消掉

           2. 恢复排水的节点:kubectl uncordon node02

           3. 重启:kubectl delete pod

数据卷

因为容器、pod的生命周期是有限的,一旦重启或者崩溃,数据会丢失,所以我们为了保证数据的完整,我们要实现pod内的容器和节点的挂载

k8s的数据卷:volume

emptyDir 存储卷

pod分配给节点之前,首先创建emptyDir存储卷,只要运行在节点,数据卷会一直存在。但是这个emptyDir是空的。原因:这个数据卷不能和宿主机共享,一般用于pod内的容器之间共享。一旦pod重启,emptyDir存储卷的数据也会一起删除。

emptyDir存储卷使用场景:主要用于容器内部组件通信,不涉及敏感数据。

容器内部挂载

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginx1image: nginx:1.22volumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#容器内的路径- name : nginx2image: nginx:1.22volumeMounts:- name: html
#这里的名称要和上面保持一致mountPath: /data/command: ["/bin/bash","-c","while true; do echo $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlemptyDir: {}
#容器1的/usr/share/nginx/html和容器2/data/做挂载,数据卷是emptyDir,一旦重启pod数据会丢失。

kubectl logs -f pod名 -c 容器名    指定查看pod里容器的日志

kubectl exec -it pod名 -c 容器名     指定进入pod里的容器

hostPath 数据卷

hostPath:它是和节点进行挂载。就是当pod部署到节点时,就会和节点的指定目录进行挂载

它的数据可以持久化,但是node节点如果格式化,数据也会消失。

使用场景:因为每个pod运行的服务不同,保留的数据要做区分,所以这个时候需要用hostPath,比如redis缓存数据库、kafka等等。

容器和节点挂载

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginx1image: nginx:1.22volumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#pod的容器内的目录- name : nginx2image: nginx:1.22volumeMounts:- name: html
#这里的名称要和上面保持一致mountPath: /data/command: ["/bin/bash","-c","while true; do echo $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlhostPath:path: /opt/xy102
#节点的目录type: DirectoryOrCreate
#此时容器1的/usr/share/nginx/html和容器2的/data/都会和节点的/opt/xy102进行挂载。因为pod会有pause底层容器,pause容器提供共享网络和共享挂载卷

此时,三个节点主机都会生成/opt/xy102/index.html文件,所以它们都共享到/opt/xy102/index.html。

注:挂载的时候如果节点目录为空,那么对应的容器目录也为空。

问题:如果pod里有多个容器,但是我只声明了一个挂载点,它们是否共享?

答:共享,因为pod会有pause底层容器,pause容器提供共享网络和共享挂载卷,也就是pod里面的所有容器共用一个ip地址,共用一个挂载点。

NFS共享存储卷

它使用的是NFS共享存储。也就是集群里的pod相当于客户端,另外一台服务器提供NFS共享。 

此时,三个节点它们共享一个挂载点,所有的数据都在这一个挂载点。

应用场景:nginx的服务 或者 pod的数据是一致的。

首先需要再另外一台客户机提供NFS共享

在另外一台主机上操作

mkdir /opt/data1

chmod 777 /opt/data1

vim /etc/exports

/opt/data1 192.168.233.0/24(rw,no_root_squash)

systemctl restart rpcbind

systemctl restart nfs

showmount -e   检查一下

然后回到master01主机上 showmount -e 192.168.233.23(另一个客户机)

在master01主机上

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginx1image: nginx:1.22volumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#pod的容器内的目录- name : nginx2image: nginx:1.22volumeMounts:- name: html
#这里的名称要和上面保持一致mountPath: /data/command: ["/bin/bash","-c","while true; do echo $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlnfs:path: /opt/data1
#节点的目录server: 192.168.233.23
#server可以使用ip地址,也可以使用主机名,但是主机名需要做映射

此时三个节点共享另一个客户机的data1目录

如果在这个data1目录创建一个文件,此时容器里面的目录也会有文件

这篇关于污点、容忍、不可调度、排水、数据卷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

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

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav