k8s-node添加Taint

本文详细介绍了如何在 Kubernetes 中使用 `kubectl taint` 命令来添加和删除节点的 NoSchedule 和 NoExecute 污点,以及处理 not-ready 状态节点的污点。通过示例展示了添加不同效果的污点,以及如何删除污点,确保节点调度策略的正确实施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"

在这里插入图片描述

### 添加Node 节点的操作指南 要在 Kubernetes 集群中添加一个新的节点,通常需要完成以下几个方面的配置和操作: #### 1. 准备工作 确保目标机器满足加入 Kubernetes 集群的要求。这包括安装必要的软件组件(如 Docker 或 containerd 容器运行时、kubeadm 工具等),并设置网络环境以便能够与其他集群成员通信。 - **容器运行时**: 如果尚未安装容器运行时,则需按照官方文档指导完成部署[^3]。 ```bash sudo apt-get update && sudo apt-get install -y docker.io ``` - **Kubeadm 和 kubelet 的安装**: 使用 `apt` 或者其他包管理工具来安装 kubeadm 及其依赖项。 ```bash curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl ``` #### 2. 初始化 Master 节点获取 Token 在现有集群的 master 节点上通过命令生成 token,用于新节点加入集群时的身份验证。 ```bash kubeadm token create --print-join-command ``` 此命令会返回一条类似于下面的结果,保存好这条 join 命令供后续使用: ```plaintext kubeadm join 192.168.0.1:6443 --token abcdef.0123456789abcdef ... ``` #### 3. 加入 Cluster 于准备好的新节点上执行上述由 master 提供的具体 join 指令即可实现该节点向集群注册的过程。 ```bash kubeadm join <master-ip>:<master-port> --token <token> ``` 当成功完成后,可以再次回到任意一个拥有权限访问 API Server 的终端设备上去确认新增加的工作节点状态是否正常在线运转起来。 ```bash kubectl get nodes ``` 以上过程描述了一个标准流程下如何把额外计算资源引入已存在的 K8S 生产环境中去的方法论概述[^1]^. ### 注意事项 对于某些特定场景下的高级需求可能还需要考虑更多因素比如 taint/toleration 设置或者 affinity/anti-affinity 策略调整等问题,在实际应用过程中应依据具体业务情况灵活应对处理[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄德公笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值