Latest update: 2022-05-29
笔记 | 状态 |
---|---|
Informer系列之Reflector | ✔️ |
Informer系列之Indexer | ✔️ |
Informer系列之SharedIndexInformer | ✔️ |
集群 leader 选举机制 | ✔️ |
事件管理机制 | todo |
关键组件:
- type PodLifecycleEventGenerator interface
- type PodWorkers interface
笔记 | 状态 |
---|---|
Deployment Controller | todo |
笔记 | 状态 |
---|---|
资源注册流程-核心服务 | ✔️ |
资源注册流程-扩展服务 | ✔️ |
资源注册流程-聚合服务️ | todo |
配置与结构体创建流程 | ✔️ |
Extension Server 创建流程 | ✔️ |
API Server 创建流程 | todo |
Aggregator Server 创建流程 | todo |
认证 | ✔️ |
授权 | ✔️ |
准入 | ✔️ |
对接 Etcd | ✔️ |
- find all feasible nodes
- runs a set of functions to score the feasible Nodes
- picks a Node with the highest score
- binding: notifies the API server about this decision
QueueSort | PreFilter/Filter | Filter | PreScore | Score | Normalize Score | Reserve | Permit | WaitOnPermit | PreBind | Bind | PostBind | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
调用链路 | NextPod -> MakeNextPodFunc -> SchedulingQueue.Pop -> activeQ.Pop -> ··· -> Less |
scheduleOne -> SchedulePod -> findNodesThatFitPod -> RunPreFilterPlugins |
||||||||||
PrioritySort | Fit | |||||||||||
InterPodAffinity | ||||||||||||
NodeAffinity | ||||||||||||
NodePorts | ||||||||||||
[PodTopologySpread] | ||||||||||||
VolumeBinding | ||||||||||||
VolumeRestrictions | ||||||||||||
笔记 | 状态 |
---|---|
util/wait | todo |
- GenericAPIServer.Handler.GoRestfulContainer 中注册了各个路由到 handler 的映射
- 注册路由的关键路经:InstallAPIGroup -> installAPIResources -> InstallREST -> Install -> registerResourceHandlers
kubectl proxy --port=8080
后访问 http://127.0.0.1:8080/apis/apiextensions.k8s.io/v1- ResourceVersion(利用 Etcd 中的 modifiedIndex 来实现) 有两个已知用处:
- 客户端并发操作时实现乐观锁;
- ListWatch 时实现类似断点续传,防止数据丢失
- StatefulSet 中的关键:
- 为 Pod 生成一个 DNS 记录:${pod_name}.${statefulset_name}.${namespace}.svc.cluster.local
- 为 Pod 的 PVC 生成名字:${pvc_name}-${statefulset_name}-${编号}
- StatefulSet 中的 Pod 被删除后,对应的 PVC 不会删除。等待 Controller 执行控制循环后,新生成的 Pod 将重新挂载原来的 PVC
- 为 StatefulSet 指定一个 Headless Service 后,StatefulSet 的 Controller 会为 StatefulSet 中的每一个 Pod 生成固定的 DNS 记录