文档中心 > 聚石塔

一、操作手册

1. 节点排空(排水)


排空的意思是,将本节点上的POD容器进行驱逐,驱逐后 原Pod会由集群重新调度到其他节点。排空操作一般用于节点问题排查与升级等。


image.png


image.png


1)选择设置为不可调度,节点状态变为不可调度。即在后续进行应用部署时,Pod不会再调度到该节点。

2)选择置为可调度节点状态变为可调度。

3)选择排空节点(同时设置为不可调度)节点状态变为不可调度,同时会将节点上已经存在的Pod进行(排空)驱逐,pod会被调度到其他节点进行重建。注意:节点上由守护进程集DaemonSet控制的Pod不会被排空。


2. 节点不可调度


当节点不可调度时,新的容器(比如新的发布)不会再调度到该节点。可以手动将节点状态设置为不可调度。


3. 节点不可用


节点不可用,集群认为节点not ready。

通常地,节点不可调用(非主动设置)和节点不可用,一般是由于节点出现了异常状况,比如磁盘满、机器负载过高(节点上kubelet进程无法和集群通信)、网络不可用、docker进程hung住、PLEG异常等,可以进入运维中心-集群-节点-管理,看到节点状态。


例如:某个节点出现PLEG异常导致节点不可用。


image.png


导致PLEG异常的原因可能是:

1)由于Docker管理进程(Docker Daemon)异常导致,可以尝试重启kubelet;再尝试重启Docker进程。


//重启kubelet
systemctl restart kubelet
//重启docker
systemctl restart docker
//查看docker日志
journalctl -xeu docker > docker.log


2)是由于systemd版本问题导致,重启节点可短暂修复,彻底解决的话需要升级节点的systemd。


systemd: (rpm -qa | grep systemd, 版本<219-67.el7需要升级)
升级systemd指令: 
yum update -y systemd && systemctl daemon-reexec && killall runc


附:journalctl -xeu kubelet > kubelet.log,将kubelet日志输出到文件中,具体问题具体分析


二、节点内部升级或维护


在某些情况下,需要对ECS本身进行升级和维护,比如上面例子中的升级systemd,或者磁盘清理、挂载新的数据盘、漏洞修复扩容系统盘等等。操作过程中如果会影响到docker或kubelet的运行,导致节点上面的业务POD不可用。

推荐的操作流程如下:

1)排空节点并设置为不可调度。目的是将已经部署的POD部署到其他节点上,注意:其他节点如果资源不够(或者因为什么原因状态异常 不可调度),也是无法部署的,会影响业务。

2)进行节点升级或维护操作。

3)重新设置节点为可调度。


三、节点重启


ECS节点重启会导致已经运行中的容器失联而引发线上业务问题,所以一般不推荐直接重启集群中的ECS机器。最好在节点排空已有容器之后操作。参考上方《节点排空》的操作步骤。


四、节点不可用(Not Ready)


通用恢复流程:

1. 先登录异常节点重启kubelet,然后查看是否恢复可用。


//重启节点上的kubelet,对已运行的容器没有影响
systemctl restart kubelet


如果恢复,则问题解决。后续如果怀疑该节点ECS异常,可以排空(节点维护)将Pod迁移到其他节点避免再次发生不可用影响业务,后续针对该ECS定位问题。


2. 登录异常节点重启docker daemon进程,然后查看是否恢复可用。


//重启docker,对已运行的容器没有影响
systemctl restart docker


3. 如果步骤1、2中重启kubelet docker等均没有效果,节点依然不可用,那么需要强制重启ECS节点。通常该操作后可以恢复。 不可用的原因包括负载过高等因素。


4. 避免节点不可用的建议: 保持节点和集群的合理水位,避免节点超卖严重。高负载情况会让kubelet得不到同步状态的机会。即便有部分节点NotReady,也可以使Pod驱逐、排水到其他节点。 部署npd,node export等监控组件,npd可以发现PID、磁盘空间不足等异常;node export可以较好发现NodeNotReady的异常。


五、一些节点容器实例状态异常的解决方案


容器实例状态异常包括但不限于:

1)本该下线的容器实例长时间没有下线成功

2)部分容器实例一直挂起(需要先排除由于健康检查配置导致的异常)


请在容器实例页面找到容器对应宿主机,登录宿主机执行下面的命令尝试恢复:


1. 重启kubelet服务(不影响已运行的容器)


//重启节点上的kubelet,对已运行的容器没有影响
systemctl restart kubelet
//查看kubelet日志
journalctl -xeu kubelet > kubelet.log


等待几分钟,观察容器实例状态是否正常同步。


2. 重启docker服务(不影响已运行的容器)

一般docker主进程挂掉会导致像docker ps,或docker exec等命令hung住或异常失败。


//重启节点上的docker daemon,对运行中容器没有影响
systemctl restart docker
//查看docker日志
journalctl -xeu docker > docker.log


等待几分钟,观察容器实例状态是否正常同步。


3. 在ECS节点已经排空的情况下尝试节点重启。

ECS节点重启会导致已经运行中的容器失联而引发线上业务问题,所以最好在节点排空已有容器之后操作。参考上方《节点排空》的操作步骤。

FAQ

关于此文档暂时还没有FAQ
返回
顶部