k8s scheduler不同namespace同名node节点调度异常

在Kubernetes 1.5版本中,由于Scheduler的节点缓存设计,当存在不同namespace但同名的Node时,调度可能会出现异常。Scheduler无法正确区分这些Node,导致Pod只能调度到缓存中的一个Node,引发资源不足的问题。解决方案是修改Scheduler的缓存键值,使用`namespace/name`作为标识,并在操作中限制只考虑当前或默认namespace的Node,确保namespace级别的空间区分。
摘要由CSDN通过智能技术生成

     上一篇文章中说到k8s是一个主从架构,接口管理和调度模块都在主节点上,node节点作为kubernetes的从节点,负责实际的pod管理。在创建Pod时决定Pod创建在那个node节点上则是由scheduler模块来进行调度。

       目前工作中用的kubernetes版本为1.5版本,在使用过程中发现存在同名节点导致调度异常的问题,这周仔细研究了下kubernetes scheduler模块的源码,发现在对node节点进行管理时,kubernetes维持了一个cache,cache采用Map<name,nodeInfo>对node节点的信息进行缓存,这里的name只是存了node节点的名称,并没有加入node的namespace,这个就会产生问题,在存在不同namespace下同名的node时,在缓存中只会随机存入一个node节点的信息,scheduler只会感知一个node,所有pod都会调度到缓存的节点上,当这个node节点资源不足时则调度失败,而这时另一个namespace下的同名node没有被调度。

func (cache *schedulerCache) AddNode(node *v1.Node) error {
	cache.mu.Lock()
	defer cache.mu.Unlock()

	n, ok := cache.nodes[node.Name]
	if !ok {
		n = NewNodeInfo()
		cache.nodes[node.Name] = n
	}
	return n.SetNode(node)
}

 

   node节点作为kubernetes的从节点,通过纳管流程将普通的计算节点纳管到kubermetes中进行管理,纳管时kubernetes会

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值