Descheduler 는 Kubernetes 의 Scheduler 를 직접적으로 호출하지않고 CRD 방식으로 여러가지 k8s scheduler 에 관련된 동작을 수행하게 해주는 MIG Kubernetes 중 하나이다.
설치는 아래와같은 여러가지 방식으로 가능하다.
[Manifest 로 직접 설치, rbac, configmap, workload 구성]
Run As A Job
kubectl create -f kubernetes/base/rbac.yaml
kubectl create -f kubernetes/base/configmap.yaml
kubectl create -f kubernetes/job/job.yaml
Run As A CronJob
kubectl create -f kubernetes/base/rbac.yaml
kubectl create -f kubernetes/base/configmap.yaml
kubectl create -f kubernetes/cronjob/cronjob.yaml
Run As A Deployment
kubectl create -f kubernetes/base/rbac.yaml
kubectl create -f kubernetes/base/configmap.yaml
kubectl create -f kubernetes/deployment/deployment.yaml
[Helm 설치]
- helm repo 등록
helm repo add descheduler https://kubernetes-sigs.github.io/descheduler/
helm install my-release --namespace kube-system descheduler/descheduler
- helm install 수행
helm install --namespace kube-system my-release descheduler/descheduler
- helm delete 방식
helm delete my-release
- helm 설치시 여러가지 Configuration
Parameter | Description | Default |
kind | Use as CronJob or Deployment | CronJob |
image.repository | Docker repository to use | k8s.gcr.io/descheduler/descheduler |
image.tag | Docker tag to use | v[chart appVersion] |
image.pullPolicy | Docker image pull policy | IfNotPresent |
imagePullSecrets | Docker repository secrets | [] |
nameOverride | String to partially override descheduler.fullname template (will prepend the release name) | "" |
fullnameOverride | String to fully override descheduler.fullname template | "" |
cronJobApiVersion | CronJob API Group Version | "batch/v1" |
schedule | The cron schedule to run the descheduler job on | "*/2 * * * *" |
startingDeadlineSeconds | If set, configure startingDeadlineSeconds for the descheduler job | nil |
successfulJobsHistoryLimit | If set, configure successfulJobsHistoryLimit for the descheduler job | nil |
failedJobsHistoryLimit | If set, configure failedJobsHistoryLimit for the descheduler job | nil |
deschedulingInterval | If using kind:Deployment, sets time between consecutive descheduler executions. | 5m |
cmdOptions | The options to pass to the descheduler command | see values.yaml |
deschedulerPolicy.strategies | The descheduler strategies to apply | see values.yaml |
priorityClassName | The name of the priority class to add to pods | system-cluster-critical |
rbac.create | If true, create & use RBAC resources | true |
podSecurityPolicy.create | If true, create PodSecurityPolicy | true |
resources | Descheduler container CPU and memory requests/limits | see values.yaml |
serviceAccount.create | If true, create a service account for the cron job | true |
serviceAccount.name | The name of the service account to use, if not set and create is true a name is generated using the fullname template | nil |
serviceAccount.annotations | Specifies custom annotations for the serviceAccount | {} |
nodeSelector | Node selectors to run the descheduler cronjob/deployment on specific nodes | nil |
affinity | Node affinity to run the descheduler cronjob/deployment on specific nodes | nil |
tolerations | tolerations to run the descheduler cronjob/deployment on specific nodes | nil |
suspend | Set spec.suspend in descheduler cronjob | false |
commonLabels | Labels to apply to all resources | {} |
livenessProbe | Liveness probe configuration for the descheduler container | see values.yaml |