资源限制和节点选择器
- 1、pod资源限制
- 2、节点选择器(pod属性)
- 3、 节点亲和性(nodeAffinity)(pod属性)
- 3.1 硬和软亲和性
- 3.2 反亲和性
- 4、污点(taint)和污点容忍(节点属性)
- 4.1 定义
- 4.2 应用场景
- 4.3 常用命令
- 4.4 污点值(三个)
- 4.5 污点容忍
1、pod资源限制
- 通过前面资源限制部分进行理解
- yaml文件中的resources字段中的request部分的资源分配,会根据这个规则来找到足够支撑的节点。
2、节点选择器(pod属性)
-
节点选择器标签也可以影响Pod的调度
-
首先为节点打一个标签,然后在进行yaml文件的编写。
# 首先需要为节点node1打一个标签。dev表示开发环境 prod表示测试环境 [root@master example]# kubectl label nodes node1 env_role=dev [root@master example]# kubectl get nodes node1 --show-labels #查看打的标签 [root@master example]# cat nginx.yaml apiVersion: v1 kind: Pod metadata: name: mypod spec: nodeSelector: ## nodeSelector是节点选择器标签 env_role: dev containers: - name: nginx image: nginx:1.14 imagePullPolicy: Always
3、 节点亲和性(nodeAffinity)(pod属性)
3.1 硬和软亲和性
- 亲和性分为硬亲和性和软亲和性和反亲和性。
- 硬亲和性表示约束条件必须满足。
- 软亲和性表示尝试满足,不保证一定能够满足。
- 常用的一些操作符(operator)有: In 、NotIn、Exists 、Gt、Lt、DoesNotExists
[root@master example]# cat affinity.yaml
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env_role
operator: In
value:
- dev
- test
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: group
operator: In
value:
- otherprod
containers:
- name: webdemo
image: nginx
3.2 反亲和性
- 即将操作符换为NotIn DoesNotExists
4、污点(taint)和污点容忍(节点属性)
4.1 定义
-
污点 taints 是定义在节点上的键值型属性数据,用于让节点拒绝将 Pod 调度运行于其上, 除非 Pod 有接纳节点污点的容忍度。
-
容忍度 tolerations 是定义在 Pod 上的键值属性数据, 用于配置可容忍的污点,且调度器将 Pod 调度至其能容忍该节点污点的节点上或没有污点 的节点上
-
节点亲和性使得 Pod 对象被吸引到一类特定的节点 (nodeSelector 和 affinity) ,污点提供让节点排斥特定 Pod 对象的能力
4.2 应用场景
- 污点不做普通的分配,其针对一些特定的场景
- 1、专用节点
- 2、配置特定硬件节点,比如作为固态硬盘的节点
- 3、基于Taint驱逐
4.3 常用命令
# 1、查看当前节点的污点
[root@master example]# kubectl describe nodes master | grep Taint
Taints: node-role.kubernetes.io/master:NoSchedule
# 2、为节点添加污点(effect是污点的三个值)
kubectl taint node <node-name> <key>=<value>:<effect>
# 3、为节点删除污点
kubectl taint node <node-name> <key>:<effect>- # 删除指定污点
kubectl taint node <node-name> <key>- #删除该key对应的所有污点
[root@master example]# kubectl taint node node1 env_role=yes:NoSchedule
node/node1 tainted
[root@master example]# kubectl describe nodes node1 | grep Taint
Taints: env_role=yes:NoSchedule
[root@master example]# kubectl create deployment web --image=nginx
[root@master example]# kubectl scale deployment web --replicas=3
deployment.apps/web scaled
[root@master example]# kubectl get pods -o wide #发现node1加了污点后,调度都到了node2上
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 1 23h 10.244.2.3 node2 <none> <none>
web-96d5df5c8-nmtvl 1/1 Running 0 35s 10.244.2.8 node2 <none> <none>
web-96d5df5c8-qszwk 1/1 Running 0 35s 10.244.2.7 node2 <none> <none>
web-96d5df5c8-r9x7z 1/1 Running 0 54s 10.244.2.6 node2 <none> <none>
4.4 污点值(三个)
- 1、NoSchedule : 该节点不会被调度
- 2、 preferNoSchedule : 尽量不会被调度
- 3、 NoExecute: 不会被调度,且会驱逐node到已有的pod
4.5 污点容忍
- 加了污点容忍后,节点可能会被调度到
- 有等值判断和存在性判断两种。即相等就容忍和存在污点键就容忍
spec:
tolerations:
- key: "污点的key"
operator: "Equal"或者"Exists"
value: "污点的value"
effect: "污点的三个值"