Kubernetes(简称K8S) 是Google开源的分布式的容器管理平台,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。本文主要介绍Kubernetes(K8s) node(节点)。

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

推荐文档