NOTE

K8s Statefulset 控制器设计

目录 前言 控制器初始化 Sync 入口: UpdateStatefulset 方法 revision 版本控制 控制器的私有 updateStatefulSet 方法 前言 K8s 的 Statefulset 控制器,是 controller-manager 中比较重要的一个,了解其实现有助于我们开发自己的控制器。k8s文档中对于...

从宏观角度看 Golang map 实现[翻译]

这是一篇翻译,原文在这里:Macro View of Map Internals In Go 简介 有很多文章来介绍golang slice的内部实现,但是当涉及到map的时候,都有点说不清楚。在好奇之余,去查看了golang map的源代码,知道大家为什么都懵逼了,源代码链接: https://golang.org/src/runtime/hashmap.go 至少对我来说,...

K8s 调度器中 findNodesThatFit 实现

"scheduler中的细节"

由点到线,由线到面。本文针对的k8s的版本是1.16.0 findNodesThatFit是scheduler调用predicate的实现,即对每个node调用一系列predicate方法,查看这个node是否满足这个predicate,并返回一个满足这些predicate的node的列表,后续会对这个列表执行priority操作。 博客最后有这个函数的完整代码。 podFits...

K8s 中的 wait.Until

"K8s中一些设计模式"

因为理论还没成型,很多知识点看着很零散;理解深度也不够,所以一些硬骨头啃不动。需要一个循序渐进的过程。 K8s 代码中有很多这样的调用,一看大概意思就是每隔一段时间就执行一个方法,直到stopChan关闭(或者收到数据)。但是不仔细看一下总觉得有点虚,决定看一下。下面代码取自pkg/kubelet/kubelet.go, 启动一个用于kill不需要的pod的goroutine。 /...

Scheduler 调度 Pod 过程

"Scheduler 调度 Pod 的主线流程,及队列管理"

前言 打算分析一下调度器,将调度器拆成若干部分:调度主干,pod队列管理,缓存管理,调度算法等。本文分析下主干及pod调度队列管理。基于的k8s版本为1.9.3。 入口 代码文件:kubernetes/plugin/pkg/scheduler/scheduler.go 方法名字:func (sched *Scheduler) scheduleOne() 流程 取一个pod,从...

K8s volume expand 控制器介绍

"由点到线熟悉 K8s Controller Manager"

前言 打算开始写一些k8s的文章,已理解并记忆k8s的运行原理与设计模式,基于的k8s版本为1.9.3。 从volume expand controller开始是因为偶然发现这个控制器比较简单,麻雀虽小,五脏俱全,那就从这个开始吧。 入口 所有cm中的控制器都是在这里注册的,在后续文章会从宏观上分析整个cm的运行原理。 kubernetes/cmd/kube-controller-ma...