1、Kubernetes node
node(节点)是Kubernetes集群中的一个工作机器。它们是工作单元,可以是物理的、VM或云实例。每个节点都拥有运行pod所需的所有配置,例如,代理服务和kubelet服务以及Docker, Docker用于在节点上创建的pod上运行Docker容器。它们不是由Kubernetes创建的,而是由云服务提供商或Kubernetes集群管理器在物理或虚拟机上外部创建的。Kubernetes处理多个节点的关键组件是控制器管理器,它运行多种控制器来管理节点。为了管理节点,Kubernetes创建了一个类节点对象,该对象将验证所创建的对象是否是一个有效的节点。
2、节点管理
向 API 服务器添加节点的方式主要有两种,节点上的 kubelet 向控制面执行自注册,也可以动添加一个 Node 对象。创建了 Node 对象或者节点上的 kubelet 执行了自注册操作之后, 控制面会检查新的 Node 对象是否合法。可以使用YAML或JSON 对象来创建 Node 对象,
例如,
kind: Node apiVersion: v1 metadata: name: 10.221.31.143 labels: name: my-first-k8s-node
或
{ "kind": "Node", "apiVersion": "v1", "metadata": { "name": "10.221.31.143", "labels": { "name": "my-first-k8s-node" } } }
Kubernetes 会在内部创建一个 Node 对象作为节点的表示。Kubernetes 检查 kubelet 向 API 服务器注册节点时使用的 metadata.name 字段是否匹配。 如果节点是健康的(即所有必要的服务都在运行中),则该节点可以用来运行 Pod。 否则,直到该节点变为健康之前,所有的集群活动都会忽略该节点。
节点调度可以使用nodeSelector和nodeAffinity,NodeSelector 通过标签的方式,简单实现了限制 Pod 所在节点的方式。nodeAffinity 亲和性调度机制则极大的扩展了 Pod 的调度能力。使用 nodeAffinity 可以使用软限制、优先采用等限制方式,取代 nodeSelector 的硬限制。
例如,
apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: beta.kubernetes.io/arch operator: In values: - amd64 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: disk-type operator: In values: - ssd
3、节点控制器
节点控制器(Node Controller)是运行在Kubernetes主节点上的服务的集合,并根据metadata.name持续监控集群中的节点。如果所有必需的服务都在运行,则验证节点,并由控制器将新创建的pod分配给该节点。如果它是无效的,那么主服务器将不会分配任何pod给它,并将等待直到它变得有效。
1)如果–register-node标志为true, Kubernetes master自动注册节点。
–register-node = true
2)手动管理需要将–register-node标志为false
–register-node = false