Evictor is a major component responsible for actively bin-packing customer clusters. It is one of the pillars that provides active cost-saving value. Evictor as a component, has multiple modes that it can operate on:
- Default - targets every eviction friendly pod and node in the clusters.
- Aggressive Mode - targets every pod (single replica, bare-pods, jobs, but not Pods with PVC) and node in the cluster, disregarding the number of replicas pods have, which might cause some small interrupts from applications at times.
- Scoped mode - targets only CAST AI created nodes in the cluster
There are several use cases to run Evictor in aggressive mode on specific resources.
For this Advanced Configuration can be used to configure Evictor with additional rules.
What does Evictor Advanced Configuration do?
It provides additional rules for Evictor to target specific nodes and/or pods to override default Evictor behaviour.
When should Evictor Advanced Configuration be used?
It should be used to achieve granular optimisation to evict specific resources.
What are the current eviction modes available with Advanced Configuration?
The available modes are:
Advanced Configuration serves as an additional set of rules to work along side the default CAST AI Evictor rules. You can start configuring Evictor with Advanced Configuration, by creating YAML file and passing it to Evictor.
Evictor Advanced Configuration use case for marking
Job kind pods as
removalDisabled if matchers are fulfilled:
evictionConfig: - podSelector: namespace: "namespace" kind: Job labelSelector: matchLabels: pod.cast.ai/name: "cron-job" app.kubernetes.io/active: "true" settings: removalDisabled: enabled: true
Marking node as
evictionConfig: - nodeSelector: labelSelector: matchLabels: app.kubernetes.io/name: castai-node app.kubernetes.io/instance: instance settings: disposable: enabled: true
Disposing pod(s) with attached PVC(s) using
evictionConfig: - podSelector: namespace: "statefulSet-ns" kind: StatefulSet labelSelector: matchExpressions: - key: pod.cast.ai/flag operator: In values: - "true" settings: disposable: enabled: true
aggressive mode even if Evictor is running without
aggressive mode turned on:
evictionConfig: - podSelector: namespace: "namespace" kind: ReplicaSet labelSelector: matchExpressions: - key: pod.cast.ai/flag operator: In values: - "true" settings: aggressive: enabled: true
Selectors specify criteria for matching specific resources, e.g.: pods or nodes.
If selector satisfies rules, it applies eviction mode specified in settings. If no matches are found or if matches are found with the eviction mode
enabled flag set to
false, default Evictor rules will be applied for given pod or node selector.
|podSelector||Pod||namespace, kind, labelSelector|
Selectors have specific matchers for deciding if targeting mode should be applied for resource.
matchExpressions follow same structure as in Kubernetes, documentation
|namespace||string||Specifies namespace to match for pod|
|kind||string||Pod owner kind matcher|
Settings hold one of supported targeting modes and if that mode is enabled.
|Name||Supported Targeting Modes||Mode Enable Key|
|settings||removalDisabled, aggressive, disposable||enabled|
Targeting mode - specifies the eviction type for the matched resource. The specified mode takes precedence and overrides default Evictor behaviour.
|removalDisabled||Resource is not removed|
|aggressive||Apply aggressive mode to targeted resource|
|disposable||Resource is eligible to be removed|
aggressive targeting works same as turning it from console, but only for a certain pod or node. If
aggressive mode is turned on in console and specified in advanced configuration it won't have any additional behaviour.
|enabled||boolean||specifies if to apply selector if match is successful|
During Evictor initialisation CM (ConfigMap) is created under
castai-agent namespace with
castai-evictor-config CM data, under
config.yaml: | part with wanted
evictionConfig YAML format contents, e.g.:
apiVersion: v1 kind: ConfigMap metadata: name: "castai-evictor-config" labels: helm.sh/chart: castai-evictor-1 app.kubernetes.io/name: castai-evictor app.kubernetes.io/instance: release-name app.kubernetes.io/version: "version" app.kubernetes.io/managed-by: Helm data: config.yaml: | evictionConfig: - nodeSelector: labelSelector: matchLabels: app.kubernetes.io/name: castai-node app.kubernetes.io/instance: instance settings: removalDisabled: enabled: true - podSelector: namespace: "namespace" kind: ReplicaSet labelSelector: matchLabels: pod.cast.ai/name: castai-pod settings: disposable: enabled: true - podSelector: namespace: "namespace" kind: ReplicaSet labelSelector: matchExpressions: - key: pod.cast.ai/flag operator: In values: - "true" - key: pod.cast.ai/name operator: Exists matchLabels: pod-label: "pod-label-value" settings: disposable: enabled: true
To pass Evictor Advanced Configuration with manual Evictor installation, you can provide path to created YAML file through
helm, by setting file location flag or with set flag. You can find guide how to install Evictor manually here.
Updated 18 days ago