Last active
June 1, 2018 23:46
-
-
Save misterikkit/16c7c36311f1f4029305348cc3f40654 to your computer and use it in GitHub Desktop.
Architecture diagram of the k8s scheduler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
digraph scheduler { | |
graph [fontname = "helvetica", pad="0.5", nodesep="1", ranksep="2"]; | |
node [fontname = "mono", shape = "box"]; | |
edge [fontname = "helvetica"]; | |
label="\nA partial picture of the k8s scheduler architecture\n" | |
subgraph cluster_legend { | |
style=dashed; | |
label="legend" | |
structVal [shape="octagon",label="struct value"] | |
type [shape="box",label="struct type"] | |
interface [shape="box", style="dashed"] | |
funcObj [shape="ellipse",style="dashed",label="func value"] | |
funcType [shape="ellipse",style="dotted",label="func type"] | |
func [shape="ellipse"] | |
} | |
// Create subgraphs to group nodes. | |
subgraph cluster_predicate { | |
label="" | |
color="none" | |
} | |
subgraph cluster_priority { | |
label="" | |
color="none" | |
} | |
subgraph cluster_config { | |
label="" | |
color="none" | |
} | |
subgraph cluster_core { | |
label="" | |
color="none" | |
} | |
//---------------------------------------- | |
// scheduler.go | |
subgraph cluster_core { | |
Scheduler | |
} | |
Scheduler -> Config [label="has"] | |
NewFromConfigurator -> Scheduler [label="produces"] | |
subgraph cluster_config { | |
Config | |
} | |
Config -> Cache [label="has"] | |
Config -> eCache [label="has"] | |
Config -> ScheduleAlgorithm [label="has"] | |
Config -> GetBinder [label="has"] | |
Config -> PodConditionUpdater [label="has"] | |
Config -> PodPreemptor [label="has"] | |
// TODO: add other func fields | |
subgraph cluster_config { | |
Configurator [style="dashed"] | |
} | |
Configurator -> Config [label="produces"] | |
Binder [style="dashed"] | |
PodConditionUpdater [style="dashed"] | |
PodPreemptor [style="dashed"] | |
NewFromConfigurator [shape="ellipse"] | |
GetBinder [shape="ellipse",style="dashed"] | |
GetBinder -> Binder [label="produces"] | |
//---------------------------------------- | |
// factory/factory.go | |
subgraph cluster_config { | |
configFactory | |
} | |
configFactory -> listers [label="has"] | |
configFactory -> genericScheduler [label="creates"] // Keep this? | |
configFactory -> Configurator [label="implements"] | |
//configFactory -> Clientset [label="has"] | |
NewConfigFactory -> configFactory [label="produces"] | |
NewConfigFactory [shape="ellipse"] | |
listers [label="Various Listers",style="dashed"] | |
listers -> Cache [label="updates"] | |
listers -> eCache [label="updates"] | |
listers -> SchedulingQueue [label="updates"] | |
binder | |
binder -> Binder [label="implements"] | |
GetBinder->binder [label="has"] | |
GetBinder->SchedulerExtender [label="has"] | |
//---------------------------------------- | |
// factory/plugins.go | |
subgraph cluster_config { | |
AlgorithmProviderConfig | |
} | |
AlgorithmProviderConfig -> ScheduleAlgorithm [label="produces*"] | |
subgraph cluster_predicate{ | |
PredicateMetadataProducerFactory [shape="ellipse",style="dotted"] | |
} | |
PredicateMetadataProducerFactory -> PredicateMetadataProducer [label="produces"] | |
subgraph cluster_priority { | |
PriorityMetadataProducerFactory [shape="ellipse",style="dotted"] | |
} | |
PriorityMetadataProducerFactory -> PriorityMetadataProducer [label="produces"] | |
//---------------------------------------- | |
// algorithmprovider/defaults/defaults.go | |
subgraph cluster_config { | |
DefaultProvider [shape="octagon"] | |
ClusterAutoscaleProvider [shape="octagon"] | |
} | |
defaults [shape="ellipse",label="defaults.init()"] | |
//---------------------------------------- | |
// core/generic_scheduler.go | |
subgraph cluster_core { | |
genericScheduler | |
} | |
genericScheduler -> Cache [label="has"] | |
genericScheduler -> eCache [label="has"] | |
genericScheduler -> SchedulingQueue [label="has"] | |
genericScheduler -> PredicateMetadataProducer [label="has"] | |
genericScheduler -> PriorityMetadataProducer [label="has"] | |
genericScheduler -> SchedulerExtender [label="has many"] | |
genericScheduler -> ScheduleAlgorithm [label="implements"] | |
//---------------------------------------- | |
// core/extender.go | |
HTTPExtender -> SchedulerExtender [label="implements"] | |
//---------------------------------------- | |
// core/scheduling_queue.go | |
subgraph cluster_core { | |
SchedulingQueue [style="dashed"] | |
// hide queue detail | |
//FIFO -> SchedulingQueue [label="implements"] | |
//PriorityQueue -> SchedulingQueue [label="implements"] | |
} | |
//---------------------------------------- | |
// core/equivalence/equivalence.go | |
subgraph cluster_core { | |
eCache [label="equivalence.Cache"] | |
} | |
//---------------------------------------- | |
// algorithm/types.go | |
subgraph cluster_predicate { | |
PredicateMetadataProducer [shape="ellipse",style="dashed"] | |
} | |
PredicateMetadataProducer -> PredicateMetadata [label="produces"] | |
subgraph cluster_priority { | |
PriorityMetadataProducer [shape="ellipse",style="dashed"] | |
} | |
PriorityMetadataProducer -> PriorityMetadata [label="produces"] | |
subgraph cluster_predicate { | |
PredicateMetadata [style="dashed"] | |
} | |
subgraph cluster_priority { | |
PriorityMetadata [style="dashed",label="PriorityMetadata\n(actually interface{})"] | |
} | |
//---------------------------------------- | |
// algorithm/scheduler_interface.go (algorithm) | |
subgraph cluster_core { | |
ScheduleAlgorithm [style="dashed"] | |
} | |
SchedulerExtender [style="dashed"] | |
SchedulerExtender -> Binder [label="implements"] | |
//---------------------------------------- | |
// algorithm/predicates/metadata.go | |
subgraph cluster_predicate { | |
PredicateMetadataFactory | |
predicateMetadata | |
} | |
PredicateMetadataFactory -> PredicateMetadataProducer [label="implements*"] | |
PredicateMetadataFactory -> predicateMetadata [label="produces"] | |
predicateMetadata -> PredicateMetadata [label="implements"] | |
// algorithm/priorities/metadata.go | |
subgraph cluster_priority { | |
PriorityMetadataFactory | |
priorityMetadata | |
listers2 [label="Various Listers",style="dashed"] | |
} | |
PriorityMetadataFactory -> PriorityMetadataProducer [label="implements*"] | |
PriorityMetadataFactory -> priorityMetadata [label="produces"] | |
PriorityMetadataFactory -> listers2 [label="has"] | |
priorityMetadata -> PriorityMetadata [label="implements"] | |
//---------------------------------------- | |
// cache/interface.go | |
subgraph cluster_core { | |
Cache [label="cache.Cache",style="dashed"] | |
} | |
// REGISTERS | |
DefaultProvider -> AlgorithmProviderConfig [label="RegisterAlgorithmProvider"] | |
ClusterAutoscaleProvider -> AlgorithmProviderConfig [label="RegisterAlgorithmProvider"] | |
configFactory->AlgorithmProviderConfig [label="GetAlgorithmProvider"] // TODO: maybe delete this edge | |
defaults->PredicateMetadataProducerFactory[label="RegisterPredicateMetadataProducerFactory"] | |
defaults->PriorityMetadataProducerFactory[label="RegisterPriorityMetadataProducerFactory"] | |
configFactory->PredicateMetadataProducer [label="GetPredicateMetadataProducer"] | |
configFactory->PriorityMetadataProducer [label="GetPriorityMetadataProducer"] | |
} | |
// TODO: informers & clientset | |
// TODO: volumebinder? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment