学习本节内容之前,希望你已经对Kubernetes有了初步的概念。具体请参考这篇文章:
Node(节点)是Kubernetes集群中相对Master主机而言的工作主机。在每个Node上都运行着kubelet服务进程,默认监听10250端口,接收并执行master发来的指令,管理Pod及Pod中的容器,并定期向master节点汇报节点的资源使用情况。在Node上运行的服务进程包括kubelet,kube-proxy和docker daemon。
1. Node的概念
Node通常是一台物理机,虚拟机或云服务商提供的资源,并不是由Kubernetes创建的。我们说Kubernetes创建一个Node,仅仅表示Kubernetes在系统内部创建了一个Node对象(保存在etcd中),创建后会对其进行一系列健康检查,包括是否可以连通,服务是否正确启动,是否可以创建Pod等。如果检查未能通过,则该Node会在集群中被标记为不可用。
一个Node对象通常包含以下信息:
- Addresses:可以是主机名,外部IP或者集群内IP。
- Condition:用于描述当前运行的Node的状态。主要包含以下状态:
- OutOfDisk:磁盘空间是否用完
- Ready:Node是否处于健康状态,能否创建新的Pod
- MemoryPressure:内存是否够用
- NetworkUnavailable:网络是否可用
- ConfigOK:kubelet是否配置良好
- Capacity:Node上可用的资源,包括CPU,内存,能够分配的最大Pod数量。
- Info:Node的其他信息。包括内核版本,Kubernentes版本,Docker版本等。
2. Node Controller
Node Controller是运行在Kubernetes Master上的一个组件,用于管理Node对象。他的主要功能包括:集群范围内的Node信息更新和同步(Node宕机能够及时发现,从而更新可用的Node列表),Node生命周期的管理。
Node Controller每隔一段时间去检查Node的健康状态,然后更新。时间间隔可以通过--node-monitor-period
参数指定。
3. Node的自注册
当kubelet的参数--register-node
为true时(默认即为true),kubelet会自动向Master(Api Server)注册自己。这也是Kubernetes推荐的管理Node的方式。
kubelet自注册时,有以下参数:
- --kubeconfig:向apiserver证明自己身份的凭证路径
- --node-ip:Node的IP地址
- --node-labels:注册时附加在Node上的Label。更多关于Label的信息请参考:Kubernetes基本概念之Label。
- --node-status-update-frequency:kubelet向master汇报节点运行状态的频率