第10章 Kubernetes运维管理

10.1 Node管理

本节讲解Node管理方面的内容。

10.1.1 Node的隔离与恢复

在硬件升级、维护等情况下,我们需要将某些Node隔离,使其脱离Kubernetes集群的调度范围。Kubernetes提供了一种机制,既可以将Node纳入调度范围,也可以将Node脱离调度范围。我们可以使用YAML文件或者kubectl命令进行调整,示例如下。

1. 使用YAML文件

创建配置文件unschedule_node.yaml,在spec部分指定unschedulable为true:

执行kubectl replace命令,完成对Node状态的修改:

查看Node的状态,可以观察到其中增加了一项SchedulingDisabled:

这样,系统就不会将后续创建的Pod调度向该Node了。

如果需要将某个Node重新纳入集群调度范围,则将unschedulable设置为false,再次运行kubectl replace命令,就能恢复系统对该Node的调度了。

2. 使用kubectl patch命令

我们也可以直接运行kubectl patch命令实现Node隔离调度的效果,不使用配置文件:

3. 使用kubectl cordon和uncordon命令

另外,使用kubectl子命令cordon和uncordon也可以实现Node的隔离调度和恢复调度。例如,运行kubectl cordon <node_name>命令对某个Node进行隔离调度操作:

又如,运行kubectl uncordon <node_name>命令对某个Node进行恢复调度操作:

需要注意的是,某个Node脱离调度范围时,其上运行的Pod并不会自动停止,用户需要对其手动停止。

10.1.2 Node的扩容

在实际生产系统中经常会出现服务器容量不足的情况,这时就需要购买新的服务器,然后将应用系统进行水平扩展来完成对系统的扩容。

在Kubernetes集群中,一个新Node的加入是非常简单的。在新的Node上安装docker、kubelet和kube-proxy服务,然后配置kubelet和kube-proxy服务的启动参数,将Master URL指定为当前Kubernetes集群Master的地址,最后启动这些服务。通过kubelet服务默认的自动注册机制,新的Node将自动加入现有的Kubernetes集群中,如图10.1所示。

图10.1 新Node自动注册并加入现有的Kubernetes集群中

Kubernetes Master在接受新Node的注册之后,会自动将其纳入当前集群的调度范围,之后创建容器时就可以对新的Node进行调度了。

通过这种机制,Kubernetes实现了集群中Node的扩容。