Node是Pod真正运行的主机。不像其他的资源(如Pod和Namespace),Node本质上不是Kubernetes创建的,kubernetes只是管理Node上的资源。虽然可以通过Manifest创建一个Node对象,但是也只是去检查一下是否真的有这么一个Node。如果检查失败,也不会往上调度Pod。

{
  "kind":"Node",
  "apiVersion":"v1",
  "metadata":{
    "name":"10.240.79.157",
    "labels":{
      "name":"my-first-k8s-node"
    }
  }
}

这个检查是由Node Controller完成的,它负责:

  • 维护Node状态

  • 与Cloud Provider同步Node

  • 给Node分配容器CIDR

  • 删除带有NoExecute 的Node上的Pods

默认情况下,kubelet在启动时会向master注册自己,并创建Node资源。

Node状态

每个Node都包括以下状态信息:

  • 地址: 包括hostname、外网IP和内网IP

  • 条件:包括OutOfDisk、Ready、MemoryPressure和DiskPressure

  • 容量: Node上的可用资源,包括CPU、内存和Pod总数

  • 基本信息:包括内核版本、容器引擎版本、OS类型等

Taints和tolerations

Taints和tolerations用于保证Pod不被调度到不合适的Node上。

Taint应用于Node上,而toleration应用于Pod上。

kubectl taint nodes node1 key1=value1:NoSchedule
kubectl taint nodes node1 key1=value2:NoExecute

Node维护模式

标识Node不可调度单不影响正在运行的Pod

kubectl cordon $NODENAME

results matching ""

    No results matching ""