k8s-node添加Taint
文章目录
1. 语法
kubectl taint node [node] key=value[effect]
说明:
其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
- NoSchedule: 一定不能被调度
- PreferNoSchedule: 尽量不要调度
- NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
2. 添加污点
2.1 添加NoSchedule 污点
- 语法
kubectl taint node node_name key1=value1:NoSchedule
- 示例
kubectl taint nodes master1 node-role.kubernetes.io/master=:NoSchedule
说明:
key 为 node-role.kubernetes.io/master,这个key可以自定义。
value为空。
effect为NoSchedule。
- 查看结果如下
用describe即可看到污点
kubectl describe node aik8sm2 |grep Taint
Taints: node-role.kubernetes.io/master:NoSchedule
2.2 添加 NoExecute污点
- 语法
kubectl taint node node_name key1=value1:NoExecute
3. 删除污点
3.1 删除 NoSchedule 污点
- 语法
kubectl taint node node1 key1:NoSchedule-
这里的key可以不用指定value
- 示例
查看
[root@AiK8sM1 ~]# kubectl describe node aik8sm2 |grep Taint
Taints: node-role.kubernetes.io/master:NoSchedule
删除
[root@AiK8sM1 ~]# kubectl taint node aik8sm2 node-role.kubernetes.io/master:NoSchedule-
kubectl taint node :NoSchedule-
再次查看,污点没有了
[root@AiK8sM1 ~]# kubectl describe node aik8sm2 |grep Taint
Taints: <none>
3.2 删除 NoExecute 污点
kubectl taint node node1 key1:NoExecute-
3.3 删除指定key所有的effect
kubectl taint node node1 key1-
4. 其他操作
4.1 not-ready时的taint
-
描述
node是 node ready 状态时,节点是NoSchedule -
查看如下
kubectl describe node aik8sm2 |grep Taint
Taints: node.kubernetes.io/not-ready:NoSchedule-
说明:
- key指明了是not-ready 。
- 这个污点是删除不掉的,除非node变成ready
4.2 污点处启动pod
增加 tolerations部分,实例如下
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitoring
labels:
k8s-app: node-exporter
spec:
template:
metadata:
labels:
k8s-app: node-exporter
spec:
containers:
- image: harbor.xxx.com/kubernetes/node-exporter
name: node-exporter
ports:
- containerPort: 9100
protocol: TCP
name: http
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"