Kubernetes 污点命令

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何使用 kubectl taint 命令,这是 Kubernetes 中用于在节点上添加、修改和删除污点(taint)的强大工具。污点用于指示节点具有某些限制或要求,这有助于控制 Kubernetes 集群中 Pod 的调度。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicsGroup(["`Basics`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicCommandsGroup(["`Basic Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedCommandsGroup(["`Advanced Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["`Troubleshooting and Debugging Commands`"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("`Initialization`") kubernetes/BasicCommandsGroup -.-> kubernetes/get("`Get`") kubernetes/BasicCommandsGroup -.-> kubernetes/uncordon("`Uncordon`") kubernetes/BasicCommandsGroup -.-> kubernetes/taint("`Taint`") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("`Apply`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") subgraph Lab Skills kubernetes/initialization -.-> lab-9195{{"`Kubernetes 污点命令`"}} kubernetes/get -.-> lab-9195{{"`Kubernetes 污点命令`"}} kubernetes/uncordon -.-> lab-9195{{"`Kubernetes 污点命令`"}} kubernetes/taint -.-> lab-9195{{"`Kubernetes 污点命令`"}} kubernetes/apply -.-> lab-9195{{"`Kubernetes 污点命令`"}} kubernetes/describe -.-> lab-9195{{"`Kubernetes 污点命令`"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 重置环境(如有需要)。

探索 kubectl taint 命令

kubectl taint 命令用于在 Kubernetes 节点上添加、修改或删除污点(taint)。污点是带有影响效果的键值对,通过限制哪些 Pod 可以调度到特定节点上来影响 Pod 的调度。

运行以下命令以查看 kubectl taint 的可用选项:

kubectl taint -h

你将看到以下输出:

更新一个或多个节点上的污点。

  * 污点由键、值和效果组成。在此处作为参数时,表示为 key=value:effect。
  * 键必须以字母或数字开头,可以包含字母、数字、连字符、点和下划线,最多 253 个字符。
  * 可选地,键可以以 DNS 子域前缀和单个 '/' 开头,例如 example.com/my-app。
  * 值是可选的。如果提供,则必须以字母或数字开头,可以包含字母、数字、连字符、点和下划线,最多 63 个字符。
  * 效果必须是 NoSchedule、PreferNoSchedule 或 NoExecute。
  * 目前污点只能应用于节点。

示例:
  ## 使用键 'dedicated'、值 'special-user' 和效果 'NoSchedule' 更新节点 'foo' 的污点
  ## 如果具有该键和效果的污点已存在,则其值将按指定替换
  kubectl taint nodes foo dedicated=special-user:NoSchedule

  ## 从节点 'foo' 中删除具有键 'dedicated' 和效果 'NoSchedule' 的污点(如果存在)
  kubectl taint nodes foo dedicated:NoSchedule-

  ## 从节点 'foo' 中删除所有具有键 'dedicated' 的污点
  kubectl taint nodes foo dedicated-

  ## 在具有标签 mylabel=X 的节点上添加键为 'dedicated' 的污点
  kubectl taint node -l myLabel=X dedicated=foo:PreferNoSchedule

  ## 向节点 'foo' 添加一个键为 'bar' 且无值的污点
  kubectl taint nodes foo bar:NoSchedule

向节点添加污点

在本步骤中,你将学习如何使用 kubectl taint 命令向节点添加污点。污点用于标记节点具有某些限制或要求,这会影响 Pod 在该节点上的调度。

要向节点添加污点,可以使用以下命令:

kubectl taint nodes minikube app=prod:NoSchedule

这将向名为 minikube 的节点添加一个键为 app、值为 prod 的污点,效果为 NoSchedule。这将阻止 Pod 被调度到该节点,除非它们容忍该污点。

然后,你可以使用 kubectl describe node 命令查看当前应用于 Kubernetes 集群中节点的污点。

要查看节点上的污点,可以使用以下命令:

kubectl describe node minikube

应用于节点的污点将在输出的 "Taints" 部分列出。你可以使用此信息验证上一步中添加的污点是否已应用于节点。

从节点移除污点

在本步骤中,你将学习如何使用 kubectl taint 命令从节点移除污点。如果你需要更新节点的限制或要求,或者希望允许 Pod 调度到之前被污点标记的节点上,这一操作会非常有用。

要从节点移除污点,可以使用以下命令:

kubectl taint nodes minikube app-

这将从 minikube 节点移除 app=prod:NoSchedule 污点。这将允许 Pod 调度到该节点上,而无需容忍之前应用的污点。

修改节点上的污点

在本步骤中,你将学习如何使用 kubectl taint 命令修改节点上的污点。如果你需要更新节点的限制或要求,但希望保留现有的污点键和效果,这一操作会非常有用。

  1. 添加一个新的污点,内容如下:
kubectl taint nodes minikube app=uat:NoSchedule
  1. 使用覆盖选项强制更新:
kubectl taint nodes minikube app=dev:NoSchedule --overwrite=true

这将更新 minikube 节点上 app 污点的值,从 prod 更改为 dev。这将在保留相同污点键和效果的同时更新节点上的污点。

总结

在本实验中,你学习了如何在 Kubernetes 中使用 kubectl taint 命令。你首先使用 kubectl taint 命令为节点添加了一个具有特定键、值和效果的污点。随后,你学习了如何使用 kubectl describe node 命令查看应用于节点的污点。

您可能感兴趣的其他 Kubernetes 教程