Skip to content

Instantly share code, notes, and snippets.

@misterikkit
Last active June 1, 2018 23:46
Show Gist options
  • Save misterikkit/16c7c36311f1f4029305348cc3f40654 to your computer and use it in GitHub Desktop.
Save misterikkit/16c7c36311f1f4029305348cc3f40654 to your computer and use it in GitHub Desktop.
Architecture diagram of the k8s scheduler
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?
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment