k8s node的隔离与恢复

本文详细介绍如何在Kubernetes中使用不同方法对节点进行隔离和恢复调度,包括使用YAML文件、kubectl patch以及cordon和uncordon命令。通过这些操作,可以在节点硬件升级或维护时避免调度新的Pod到该节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k8s node的隔离与恢复
使用于node的硬件升级和维护,让node脱离k8s的调度范围
进行隔离时,只隔离了node,该node上运行的pod并不会自动停止,需要手动停止

1.使用yaml文件进行隔离和恢复调度(可能系统会报错,不允许进行隔离)

隔离:
vim unschedule_node.yaml

apiVersion: v1
kind: Node
metadata:
  name: kubernetes-node1
  labels:
    kubernetes.io/hostname: kubernetes-node1
spec:
  unschedulable: true
  
使用kubectl replace修改node的状态
kubectl replace -f unschedule_node.yaml

查看node的状态,注意SchedulingDisabled
kubectl get nodes

将unschedule_node.yaml文件种的unschedulagle: true改为unschedulagle: false后再运行yaml文件可以恢复调度
kubectl replace -f unschedule_node.yaml

查看node状态无SchedulingDisabled
kubectl get nodes

2.使用kubectl patch实现node的隔离和恢复调度,需要配置patch
隔离
kubectl patch node1 kubernetes-node1 '{"spec":{"unschedulable":true}}'
恢复调度
kubectl patch node1 kubernetes-node1 '{"spec":{"unschedulable":false}}'

3.使用cordon和uncordon进行隔离和恢复调度
[root@kubernetes k8s]# kubectl cordon kubernetes-node1
node/kubernetes-node1 cordoned

[root@kubernetes k8s]# kubectl get nodes
NAME               STATUS                     ROLES    AGE    VERSION
kubernetes         Ready                      master   176d   v1.13.3
kubernetes-node1   Ready,SchedulingDisabled   <none>   176d   v1.13.3
kubernetes-node2   Ready                      <none>   176d   v1.13.3

[root@kubernetes k8s]# kubectl uncordon kubernetes-node1
node/kubernetes-node1 uncordoned
[root@kubernetes k8s]# kubectl get nodes
NAME               STATUS   ROLES    AGE    VERSION
kubernetes         Ready    master   176d   v1.13.3
kubernetes-node1   Ready    <none>   176d   v1.13.3
kubernetes-node2   Ready    <none>   176d   v1.13.3
 

### 解决Kubernetes集群连接Node节点失败的方法 当遇到Kubernetes集群无法正常连接至Node节点的情况时,可以从以下几个方面排查并解决问题。 #### 1. 检查网络设置 确保所有节点之间的网络通信畅通无阻。这包括但不限于关闭防火墙、SELinux以及同步各服务器的时间戳[^2]。如果存在任何网络隔离措施,则可能导致MasterNodes之间通讯异常。另外还需确认集群内部DNS服务工作良好,以便各个组件能够互相解析域名。 #### 2. 确认Swap状态 禁用交换空间(Swap),因为启用swap可能会引起kubelet进程不稳定从而影响到整个系统的性能表现甚至导致节点离线。可以通过`swapon --show`命令查看当前系统是否启用了swap;若已开启则应考虑将其关闭以维持稳定运行环境。 #### 3. 核实容器运行时状况 对于采用Docker作为默认容器引擎的情形下,需保证其处于健康运作之中。一旦发现docker daemon停止响应或者频繁崩溃都会造成Pod调度失败等问题发生。此时建议先尝试重启相关服务(`systemctl restart docker`)来恢复正常使用[^5]。 #### 4. 排除存储卷挂载错误 有时由于本地磁盘资源不足或是文件权限不当也会引发类似的故障现象。因此有必要仔细审查/var/log/messages日志文件寻找有关mount操作失败的信息提示,并针对性采取相应补救措施如清理不必要的数据释放更多可用空间等。 #### 5. 处理CNI插件配置失误 Container Network Interface (CNI) 插件负责管理容器间的联网事宜,在某些情况下不恰当的参数设定会阻碍新加入成员顺利融入现有架构体系之内。针对此类情形可参照官方文档调整优化cni.conf等相关配置项直至恢复正常为止[^1]。 ```bash kubectl describe node <nodename> ``` 上述命令可以帮助获取指定节点更详细的诊断报告,其中往往包含了有助于定位具体原因的关键线索。 #### 6. 执行节点重置流程 假如经过以上步骤仍然未能有效改善现状的话,那么不妨按照标准指南实施一次完整的node节点重置动作。此过程中涉及到移除旧有残留记录、清除缓存资料库等内容,最终目的是让目标机器回归初始空白 slate 状态后再重新申请接入集群成为合法组成部分之一。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值