当k8s集群的某节点压力过高时,可以暂时将这个节点停止调度,使新启动的pod不再分配到这些节点上来(不会影响该节点上已存在的pod)

1.查看k8s的集群节点
root@master-node-1:~# kubectl get  node
NAME            STATUS   ROLES           AGE   VERSION
master-node-1   Ready    control-plane   73d   v1.28.1
worker-node-1   Ready    <none>          73d   v1.28.1
worker-node-2   Ready    <none>          73d   v1.28.1

2.将某个节点停止调度
[root@master-node-1:~# kubectl cordon master-node-1
node/master-node-1 already cordoned
root@master-node-1:~# kubectl get  node
NAME            STATUS                     ROLES           AGE   VERSION
master-node-1   Ready,SchedulingDisabled   control-plane   73d   v1.28.1
worker-node-1   Ready                      <none>          73d   v1.28.1
worker-node-2   Ready                      <none>          73d   v1.28.1

在 Kubernetes 中,cordon 是一个用于管理节点调制的命令。它的作用是将一个节点标记为 不可调度(Unschedulable),即阻止新的 Pod 被调度到该节点上。

cordon 的作用:

  • 当一个节点被标记为不可调度时:

    • 已有的 Pod 仍然可以继续运行。

    • 新的 Pod 不会被调度到该节点上(除非 Pod 有特定的节点亲和性规则)。

  • 这个操作通常用于:

    • 维护节点(例如升级或修复)。

    • 隔离节点以进行故障排查。

    • 防止新工作负载分配到资源不足或即将下线的节点。

3.结束调度禁用root@master-node-1:~# kubectl uncordon master-node-1
node/master-node-1 uncordoned
root@master-node-1:~# kubectl get  node
NAME            STATUS   ROLES           AGE   VERSION
master-node-1   Ready    control-plane   73d   v1.28.1
worker-node-1   Ready    <none>          73d   v1.28.1
worker-node-2   Ready    <none>          73d   v1.28.1

4.怎么查看pod被调度到哪个k8s节点

 kubectl get pod -A -o wide (-A是--all-namespaces 的简写形式。它的作用是列出所有命名空间(Namespace)中的 Pod。)

也可以用kubectl describe pod pod_name -n namespace去查看,这个命令显示的信息更加详细一些,除了显示被分配到哪个节点,还会显示该pod的配置、状态及event等。如果pod异常,event会显示异常的原因。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐