k8s——污点、容忍+3个存储卷(emptyDir、hostpath和nfs)

本文深入探讨了Kubernetes中的污点(Taints)和容忍(Tolerations)机制,如何通过它们来控制Pod的调度,并介绍了emptyDir、hostPath和nfs三种存储卷的使用方法,包括配置和测试过程。
摘要由CSDN通过智能技术生成

污点(Taint)和容忍(Tolerations)

污点(Taint)

概念

  1. 节点亲和性,是Pod的一种属性(偏好或硬性要求),它使Pod被吸引到一类特定的节点。Taint则相反,它使节点能够排斥一类特定的Pod
  2. Taint和Toleration相互配合,可以用来避免Pod被分配到不合适的节点上。每个节点上都可以应用一个或多个taint ,这表示对于那些不能容忍这些taint的Pod,是不会被该节点接受的。如果将toleration应用于Pod上,则表示这些 Pod 可以(但不一定)被调度到具有匹配taint的节点上
  3. 使用kubectl taint命令可以给某个Node节点设置污点,Node被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让Node拒绝 Pod 的调度执行,甚至将Node已经存在的Pod驱逐出去

污点的组成格式

key=value:effect

每个污点有一个key和value作为污点的标签,其中value可以为空,effect描述污点的作用

effect支持如下三个选项

●NoSchedule:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上
●PreferNoSchedule:表示 k8s 将尽量避免将 Pod 调度到具有该污点的 Node 上
●NoExecute:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去

master上的NoSchedule污点

master 就是因为有 NoSchedule 污点,k8s 才不会将 Pod 调度到 master 节点上
kubectl describe node master01

img

node上设置污点

#设置污点
kubectl taint nodes node01 key1=value1:NoSchedule

#节点说明中,查找 Taints 字段
kubectl describe node node01

img
img

去除污点

#去除污点
kubectl taint nodes node01 key1:NoSchedule-

#节点说明中,查找 Taints 字段
kubectl describe node node01

img
img

污点实例测试

1.先创建两个pod资源分别在两个node节点上
kubectl get pods -o wide

2.在node02上创建污点
kubectl taint nodes node02 check=mycheck:NoExecute

3.kubectl get pods -o wide
查看 Pod 状态,会发现 node02 上的 Pod 已经被全部驱逐(注:如果是 Deployment 或者 StatefulSet 资源类型,为了维持副本数量则会在别的 Node 上再创建新的 Pod

img

容忍(Tolerations)

概念

设置了污点的 Node 将根据 taint 的 effect:NoSchedule、PreferNoSchedule、NoExecute 和 Pod 之间产生互斥的关系,Pod 将在一定程度上不会被调度到 Node 上。但我们可以在 Pod 上设置容忍(Tolerations),意思是设置了容忍的 Pod 将可以容忍污点的存在,可以被调度到存在污点的Node上

测试污点

1.在node02设置污点的基础上,再在node01上设置污点
kubectl taint nodes node01 check=mycheck:NoExecute

2.vim demo1.yaml
==========================================================
apiVersion: v1
kind: Pod
metadata:
  name: myapp03
  labels:
    app: myapp03
spec:
  containers:
  - name: myapp01
    image: nginx
==========================================================
3.kubectl apply -f demo1.yaml

4.kubectl get pods -o wide

img

在设置污点的基础上设置容忍

vim demo2.yaml
==========================================================
apiVersion: v1
kind: Pod
metadata:
  name: myapp04
  labels
污点容忍度是Kubernetes中用来控制Pod调度的机制。污点(Taint)是指在节点上设置的一种属性,用于排斥一类特定的Pod。而容忍度(Toleration)是指在Pod上设置的属性,用于指定Pod是否可以被调度到具有匹配污点的节点上。 当一个节点上设置了污点时,只有那些在Pod的容忍度中定义了匹配该污点的规则的Pod才能被调度到该节点上。如果Pod没有定义容忍度或者容忍度不匹配节点上的污点,则该Pod将不会被调度到该节点上。 举个例子,假设我们在节点node1上设置了一个污点,key为k1,value为v1,effect为NoSchedule。如果一个Pod的容忍度中定义了匹配这个污点的规则,比如key为test,value为16,effect为NoSchedule,那么这个Pod就可以被调度到拥有这个污点的node1节点上。 总结来说,污点容忍度是相互匹配的关系。通过在节点上设置污点和在Pod上设置容忍度,我们可以控制Pod的调度行为,避免将Pod调度到不合适的节点上。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [k8s--基础--20--污点容忍度](https://blog.csdn.net/zhou920786312/article/details/126241579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值