Overview
This folder holds the NetworkAware plugins implemented as discussed in the KEP - Network-Aware framework.
Maturity Level
- 💡 Sample (for demonstrating and inspiring purpose)
- 👶 Alpha (used in companies for pilot projects)
- 👦 Beta (used in companies and developed actively)
- 👨 Stable (used in companies for production workloads)
TopologicalSort Plugin (QueueSort)
The TopologicalSort
QueueSort plugin orders pods to be scheduled in an AppGroup based on their
microservice dependencies related to TopologicalSort.
Further details and examples are described here.
NetworkOverhead Plugin (Filter & Score)
The NetworkOverhead
Filter & Score plugin filters out nodes based on microservice dependencies
defined in an AppGroup and scores nodes with lower network costs (described in a NetworkTopology)
higher to achieve latency-aware scheduling.
Further details and examples are described here.
Scheduler Config example
Consider the following scheduler config as an example to enable both plugins:
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
leaderElection:
leaderElect: false
clientConnection:
kubeconfig: "/etc/kubernetes/scheduler.conf"
profiles:
- schedulerName: network-aware-scheduler
plugins:
multiPoint:
enabled:
- name: NetworkOverhead
weight: 5 # A higher weight is given to NetworkOverhead to favor allocation schemes with lower latency.
- name: BalancedAllocation
weight: 1
disabled:
- name: NodeResourcesFit # Preferably avoid the combination of NodeResourcesFit with NetworkOverhead
queueSort:
enabled:
- name: TopologicalSort
disabled:
- name: "*"
pluginConfig:
- name: TopologicalSort
args:
namespaces:
- "default"
- name: NetworkOverhead
args:
namespaces:
- "default"
weightsName: "UserDefined" # The respective weights to consider in the plugins
networkTopologyName: "net-topology-test" # networkTopology CR to be used by the plugins
Summary
Further details about the network-aware framework are available here.