1. 概述

k8s集群进行节点管理时,需要进行集群扩缩容,即节点添加和删除,这里主要介绍添加节点的两种方式:

  • 节点上的 kubelet 向控制面执行自注册;
  • 手动添加一个 Node 对象。

在创建了 Node 对象或者节点上的 kubelet 执行了自注册操作之后,控制面会检查新的 Node 对象是否合法。

Kubernetes 会在内部创建一个 Node 对象作为节点的表示。Kubernetes 检查 kubelet 向 API 服务器注册节点时使用的 metadata.name 字段是否匹配。 如果节点是健康的(即所有必要的服务都在运行中),则该节点可以用来运行 Pod。 否则,直到该节点变为健康之前,所有的集群活动都会忽略该节点。

说明

Kubernetes 会一直保存着非法节点对应的对象,并持续检查该节点是否已经变得健康。必须显式地删除该 Node 对象以停止健康检查操作。

Node 对象的名称必须是合法的 DNS 子域名

2. 节点自注册

当 kubelet 标志 ==–register-node 为 true(默认)==时,它会尝试向 API 服务注册自己。 这是首选模式,被绝大多数发行版选用。

对于自注册模式,kubelet 使用下列参数启动:

  • --kubeconfig - 用于向 API 服务器执行身份认证所用的凭据的路径。
  • --cloud-provider - 与某云驱动 进行通信以读取与自身相关的元数据的方式。
  • --register-node - 自动向 API 服务注册。
  • --register-with-taints - 使用所给的污点列表 (逗号分隔的 <key>=<value>:<effect>)注册节点。当 register-node 为 false 时无效。
  • --node-ip - 节点 IP 地址。
  • --node-labels - 在集群中注册节点时要添加的标签。 (参见 NodeRestriction 准入控制插件所实施的标签限制)。
  • --node-status-update-frequency - 指定 kubelet 向 API 服务器发送其节点状态的频率。

Node 鉴权模式NodeRestriction 准入插件被启用后, 仅授权 kubelet 创建/修改自己的 Node 资源。

说明:

当执行kubectl delete node xxxx后,节点就会被从etcd中删除掉,集群中删除该节点,当kubelet重启后,节点会向apiserver服务发起自注册,如果未执行kubeadm reset -f或者集群中的配置未被删除(未执行kubeadm reset -f),可能导致节点自动重新加入集群。

如果在 kubelet 重启期间 Node 配置发生了变化,已经被调度到某 Node 上的 Pod 可能会出现行为不正常或者出现其他问题,例如,已经运行的 Pod 可能通过污点机制设置了与 Node 上新设置的标签相排斥的规则,也有一些其他 Pod, 本来与此 Pod 之间存在不兼容的问题,也会因为新的标签设置而被调到同一节点。 节点重新注册操作可以确保节点上所有 Pod 都被排空并被正确地重新调度

3. 手动注册

如果希望手动创建节点对象,可以设置kubelet flag参数--register-node=false

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐