Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Scheduler Configuration
์ค์ผ์ค๋ฌ ๊ตฌ์ฑ
Kubernetes v1.25 [stable]
๊ตฌ์ฑ ํ์ผ์ ์์ฑํ๊ณ ํด๋น ๊ฒฝ๋ก๋ฅผ ์ปค๋งจ๋ ๋ผ์ธ ์ธ์๋ก ์ ๋ฌํ์ฌ
kube-scheduler
์ ๋์์ ์ฌ์ฉ์ ์ ์ํ ์ ์๋ค.
์ค์ผ์ค๋ง ํ๋กํ์ผ(Profile)์ ์ฌ์ฉํ๋ฉด kube-scheduler์์ ์ฌ๋ฌ ๋จ๊ณ์ ์ค์ผ์ค๋ง์ ๊ตฌ์ฑํ ์ ์๋ค. ๊ฐ ๋จ๊ณ๋ ์ต์คํ ์ ํฌ์ธํธ(extension point)๋ฅผ ํตํด ๋ ธ์ถ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์ด๋ฌํ ์ต์คํ ์ ํฌ์ธํธ ์ค ํ๋ ์ด์์ ๊ตฌํํ์ฌ ์ค์ผ์ค๋ง ๋์์ ์ ๊ณตํ๋ค.
KubeSchedulerConfiguration (v1beta3
๋๋ v1)
๊ตฌ์กฐ์ ๋ง๊ฒ ํ์ผ์ ์์ฑํ๊ณ ,
kube-scheduler --config <filename>
์ ์คํํ์ฌ
์ค์ผ์ค๋ง ํ๋กํ์ผ์ ์ง์ ํ ์ ์๋ค.
์ต์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
clientConnection:
kubeconfig: /etc/srv/kubernetes/kube-scheduler/kubeconfig
์ฐธ๊ณ :
KubeSchedulerConfiguration v1beta2๋ v1.25๋ถํฐ ์ฌ์ฉ ์ค๋จ๋์๊ณ v1.26๋ถํฐ ์ ๊ฑฐ๋๋ค. KubeSchedulerConfiguration์ v1beta3 ๋๋ v1๋ก ์ ํํ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ v1.25๋ก ์ ๊ทธ๋ ์ด๋ํ๋๋ก ํ๋ค.ํ๋กํ์ผ
์ค์ผ์ค๋ง ํ๋กํ์ผ์ ์ฌ์ฉํ๋ฉด kube-scheduler์์ ์ฌ๋ฌ ๋จ๊ณ์ ์ค์ผ์ค๋ง์ ๊ตฌ์ฑํ ์ ์๋ค. ๊ฐ ๋จ๊ณ๋ ์ต์คํ ์ ํฌ์ธํธ์ ๋ ธ์ถ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์ด๋ฌํ ์ต์คํ ์ ํฌ์ธํธ ์ค ํ๋ ์ด์์ ๊ตฌํํ์ฌ ์ค์ผ์ค๋ง ๋์์ ์ ๊ณตํ๋ค.
kube-scheduler
์ ๋จ์ผ ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ์ฌ
์ฌ๋ฌ ํ๋กํ์ผ์ ์คํํ ์ ์๋ค.
์ต์คํ ์ ํฌ์ธํธ
์ค์ผ์ค๋ง์ ๋ค์ ์ต์คํ ์ ํฌ์ธํธ๋ฅผ ํตํด ๋ ธ์ถ๋๋ ์ผ๋ จ์ ๋จ๊ณ์์ ๋ฐ์ํ๋ค.
queueSort
: ์ด ํ๋ฌ๊ทธ์ธ์ ์ค์ผ์ค๋ง ๋๊ธฐ์ด์์ ๋ณด๋ฅ ์ค์ธ ํ๋๋ฅผ ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋๊ธฐ์ด ์ ๋ ฌ ํ๋ฌ๊ทธ์ธ์ ํ ๋ฒ์ ๋จ ํ๋๋ง ํ์ฑํ๋ ์ ์๋ค. ์ฌ์ฉํ ์ ์๋ค.preFilter
: ์ด ํ๋ฌ๊ทธ์ธ์ ํํฐ๋งํ๊ธฐ ์ ์ ํ๋ ๋๋ ํด๋ฌ์คํฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด ํ๋ฌ๊ทธ์ธ์ ํ๋๋ฅผ unschedulable๋ก ํ์ํ ์ ์๋ค.filter
: ์ด ํ๋ฌ๊ทธ์ธ์ ์ค์ผ์ค๋ง ์ ์ฑ ์ ๋จ์ (Predicates)๊ณผ ๋์ผํ๋ฉฐ ํ๋๋ฅผ ์คํํ ์ ์๋ ๋ ธ๋๋ฅผ ํํฐ๋งํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ํํฐ๋ ๊ตฌ์ฑ๋ ์์๋๋ก ํธ์ถ๋๋ค. ๋ ธ๋๊ฐ ๋ชจ๋ ํํฐ๋ฅผ ํต๊ณผํ์ง ์์ผ๋ฉด ํ๋๋ unschedulable๋ก ํ์๋๋ค.postFilter
: ์ด ํ๋ฌ๊ทธ์ธ์ ํ๋์ ์คํ ๊ฐ๋ฅํ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์์ ๋, ๊ตฌ์ฑ๋ ์์๋๋ก ํธ์ถ๋๋ค.postFilter
ํ๋ฌ๊ทธ์ธ์ด ํ๋ schedulable ์ ํ์ํ๋ ๊ฒฝ์ฐ, ๋๋จธ์ง ํ๋ฌ๊ทธ์ธ์ ํธ์ถ ๋์ง ์๋๋ค.preScore
: ์ด๊ฒ์ ์ฌ์ ์ค์ฝ์ด๋ง ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ ๋ณด์ฑ ์ต์คํ ์ ํฌ์ธํธ์ด๋ค.score
: ์ด ํ๋ฌ๊ทธ์ธ์ ํํฐ๋ง ๋จ๊ณ๋ฅผ ํต๊ณผํ ๊ฐ ๋ ธ๋์ ์ ์๋ฅผ ์ ๊ณตํ๋ค. ๊ทธ๋ฐ ๋ค์ ์ค์ผ์ค๋ฌ๋ ๊ฐ์ค์น ํฉ๊ณ๊ฐ ๊ฐ์ฅ ๋์ ๋ ธ๋๋ฅผ ์ ํํ๋ค.reserve
: ์ง์ ๋ ํ๋์ ๋ฆฌ์์ค๊ฐ ์์ฝ๋ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ์ ์๋ฆฌ๋ ์ ๋ณด์ฑ ์ต์คํ ์ ํฌ์ธํธ์ด๋ค. ํ๋ฌ๊ทธ์ธ์ ๋ํReserve
๋์ค ๋๋ ์ดํ์ ์คํจํ ๊ฒฝ์ฐ ํธ์ถ ๋๋Unreserve
ํธ์ถ์ ๊ตฌํํ๋ค.permit
: ์ด ํ๋ฌ๊ทธ์ธ์ ํ๋ ๋ฐ์ธ๋ฉ์ ๋ฐฉ์งํ๊ฑฐ๋ ์ง์ฐ์ํฌ ์ ์๋ค.preBind
: ์ด ํ๋ฌ๊ทธ์ธ์ ํ๋๊ฐ ๋ฐ์ธ๋ฉ๋๊ธฐ ์ ์ ํ์ํ ๋ชจ๋ ์์ ์ ์ํํ๋ค.bind
: ํ๋ฌ๊ทธ์ธ์ ํ๋๋ฅผ ๋ ธ๋์ ๋ฐ์ธ๋ฉํ๋ค.bind
ํ๋ฌ๊ทธ์ธ์ ์์๋๋ก ํธ์ถ๋๋ฉฐ ์ผ๋จ ๋ฐ์ธ๋ฉ์ด ์๋ฃ๋๋ฉด ๋๋จธ์ง ํ๋ฌ๊ทธ์ธ์ ๊ฑด๋๋ด๋ค. bind ํ๋ฌ๊ทธ์ธ์ ์ ์ด๋ ํ๋ ์ด์ ํ์ํ๋ค.postBind
: ํ๋๊ฐ ๋ฐ์ธ๋๋ ํ ํธ์ถ๋๋ ์ ๋ณด์ฑ ์ต์คํ ์ ํฌ์ธํธ์ด๋ค.multiPoint
: ์ด ํ๋๋ ํ๋ฌ๊ทธ์ธ๋ค์ ๋ชจ๋ ์ ์ฉ ๊ฐ๋ฅํ ์ต์คํ ์ ํฌ์ธํธ์ ๋ํด ํ๋ฌ๊ทธ์ธ๋ค์ ๋์์ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์๊ฒ ํ๋ ํ๊ฒฝ ์ค์ ์ ์ฉ ํ๋์ด๋ค.
๊ฐ ์ต์คํ ์ ํฌ์ธํธ์ ๋ํด ํน์ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๊ฑฐ๋ ์์ฒด ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- plugins:
score:
disabled:
- name: PodTopologySpread
enabled:
- name: MyCustomPluginA
weight: 2
- name: MyCustomPluginB
weight: 1
๋นํ์ฑํ๋ ๋ฐฐ์ด์ ์ด๋ฆ์ผ๋ก *
๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ต์คํ
์
ํฌ์ธํธ์ ๋ํ
๋ชจ๋ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ ์ ์๋ค. ์ํ๋ ๊ฒฝ์ฐ, ํ๋ฌ๊ทธ์ธ ์์๋ฅผ ์ฌ์ ๋ ฌํ๋ ๋ฐ
์ฌ์ฉํ ์๋ ์๋ค.
์ค์ผ์ค๋ง ํ๋ฌ๊ทธ์ธ
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ ๋ค์์ ํ๋ฌ๊ทธ์ธ์ ์ด๋ค ์ต์คํ ์ ํฌ์ธํธ ์ค ํ๋ ์ด์์ ๊ตฌํํ๋ค.
ImageLocality
: ํ๋๊ฐ ์คํํ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ์ด๋ฏธ ์๋ ๋ ธ๋๋ฅผ ์ ํธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:score
.TaintToleration
: ํ ์ธํธ(taint)์ ํจ๋ฌ๋ ์ด์ (toleration)์ ๊ตฌํํ๋ค. ์ต์คํ ์ ํฌ์ธํธ ๊ตฌํ:filter
,preScore
,score
.NodeName
: ํ๋ ๋ช ์ธ ๋ ธ๋ ์ด๋ฆ์ด ํ์ฌ ๋ ธ๋์ ์ผ์นํ๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.NodePorts
: ๋ ธ๋์ ์์ฒญ๋ ํ๋ ํฌํธ์ ๋ํด ์ฌ์ฉ ๊ฐ๋ฅํ ํฌํธ๊ฐ ์๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:preFilter
,filter
.NodeAffinity
: ๋ ธ๋ ์ ๋ ํฐ์ ๋ ธ๋ ์ดํผ๋ํฐ๋ฅผ ๊ตฌํํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
,score
.PodTopologySpread
: ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ๊ตฌํํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:preFilter
,filter
,preScore
,score
.NodeUnschedulable
:.spec.unschedulable
์ด true๋ก ์ค์ ๋ ๋ ธ๋๋ฅผ ํํฐ๋งํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.NodeResourcesFit
: ๋ ธ๋์ ํ๋๊ฐ ์์ฒญํ๋ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ์๋์ง ํ์ธํ๋ค. ์ ์๋LeastAllocated
(๊ธฐ๋ณธ๊ฐ),MostAllocated
,RequestedToCapacityRatio
๋ฑ 3๊ฐ์ง ์ ๋ต ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ต์คํ ์ ํฌ์ธํธ:preFilter
,filter
,score
.NodeResourcesBalancedAllocation
: ํ๋๊ฐ ์ค์ผ์ค๋ ๊ฒฝ์ฐ, ๋ณด๋ค ๊ท ํ์กํ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ป์ ์ ์๋ ๋ ธ๋๋ฅผ ์ ํธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:score
.VolumeBinding
: ๋ ธ๋์ ์์ฒญ๋ ๋ณผ๋ฅจ์ด ์๋์ง ๋๋ ๋ฐ์ธ๋ฉํ ์ ์๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:preFilter
,filter
,reserve
,preBind
,score
.์ฐธ๊ณ :
score
์ต์คํ ์ ํฌ์ธํธ๋VolumeCapacityPriority
๊ธฐ๋ฅ์ด ํ์ฑํ๋์ด ์์ด์ผ ํ์ฑํ๋๋ฉฐ, ์์ฒญ๋ ๋ณผ๋ฅจ ์ฌ์ด์ฆ๋ฅผ ๋ง์กฑํ๋ ๊ฐ์ฅ ์์ PV๋ค์ ์ฐ์ ์์ ๋งค๊ธด๋ค.VolumeRestrictions
: ๋ ธ๋์ ๋ง์ดํธ๋ ๋ณผ๋ฅจ์ด ๋ณผ๋ฅจ ์ ๊ณต์์ ํน์ ํ ์ ํ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.VolumeZone
: ์์ฒญ๋ ๋ณผ๋ฅจ์ด ๊ฐ์ง ์ ์๋ ์์ญ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.NodeVolumeLimits
: ๋ ธ๋์ ๋ํด CSI ๋ณผ๋ฅจ ์ ํ์ ์ถฉ์กฑํ ์ ์๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.EBSLimits
: ๋ ธ๋์ ๋ํด AWS EBS ๋ณผ๋ฅจ ์ ํ์ ์ถฉ์กฑํ ์ ์๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.GCEPDLimits
: ๋ ธ๋์ ๋ํด GCP-PD ๋ณผ๋ฅจ ์ ํ์ ์ถฉ์กฑํ ์ ์๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.AzureDiskLimits
: ๋ ธ๋์ ๋ํด Azure ๋์คํฌ ๋ณผ๋ฅจ ์ ํ์ ์ถฉ์กฑํ ์ ์๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.InterPodAffinity
: ํ๋ ๊ฐ ์ดํผ๋ํฐ ๋ฐ ์ํฐ-์ดํผ๋ํฐ๋ฅผ ๊ตฌํํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:preFilter
,filter
,preScore
,score
.PrioritySort
: ๊ธฐ๋ณธ ์ฐ์ ์์ ๊ธฐ๋ฐ ์ ๋ ฌ์ ์ ๊ณตํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:queueSort
.DefaultBinder
: ๊ธฐ๋ณธ ๋ฐ์ธ๋ฉ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:bind
.DefaultPreemption
: ๊ธฐ๋ณธ ์ ์ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:postFilter
.
๊ธฐ๋ณธ์ผ๋ก ํ์ฑํ๋์ง ์๋ ๋ค์์ ํ๋ฌ๊ทธ์ธ์ ์ปดํฌ๋ํธ ๊ตฌ์ฑ API๋ฅผ ํตํด ํ์ฑํํ ์๋ ์๋ค.
CinderLimits
: ๋ ธ๋์ ๋ํด OpenStack Cinder ๋ณผ๋ฅจ ์ ํ์ด ์ถฉ์กฑ๋ ์ ์๋์ง ํ์ธํ๋ค. ์ต์คํ ์ ํฌ์ธํธ:filter
.
์ฌ๋ฌ ํ๋กํ์ผ
๋ ์ด์์ ํ๋กํ์ผ์ ์คํํ๋๋ก kube-scheduler
๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
๊ฐ ํ๋กํ์ผ์๋ ์ฐ๊ด๋ ์ค์ผ์ค๋ฌ ์ด๋ฆ์ด ์์ผ๋ฉฐ ์ต์คํ
์
ํฌ์ธํธ์ ๊ตฌ์ฑ๋
๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ ์ธํธ๋ฅผ ๊ฐ์ง ์ ์๋ค.
๋ค์์ ์ํ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ฉด, ์ค์ผ์ค๋ฌ๋ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ด ์๋ ํ๋กํ์ผ๊ณผ ๋ชจ๋ ์ค์ฝ์ด๋ง ํ๋ฌ๊ทธ์ธ์ด ๋นํ์ฑํ๋ ํ๋กํ์ผ์ ๋ ๊ฐ์ง ํ๋กํ์ผ๋ก ์คํ๋๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
- schedulerName: no-scoring-scheduler
plugins:
preScore:
disabled:
- name: '*'
score:
disabled:
- name: '*'
ํน์ ํ๋กํ์ผ์ ๋ฐ๋ผ ์ค์ผ์คํ๋ ค๋ ํ๋๋
.spec.schedulerName
์ ํด๋น ์ค์ผ์ค๋ฌ ์ด๋ฆ์ ํฌํจํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก, ์ค์ผ์ค๋ฌ ์ด๋ฆ default-scheduler
๋ฅผ ๊ฐ์ง ํ๋์ ํ๋กํ์ผ์ด ์์ฑ๋๋ค.
์ด ํ๋กํ์ผ์๋ ์์์ ์ค๋ช
ํ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ด ํฌํจ๋์ด ์๋ค. ๋ ์ด์์
ํ๋กํ์ผ์ ์ ์ธํ ๋, ๊ฐ๊ฐ์ ๋ํ ๊ณ ์ ํ ์ค์ผ์ค๋ฌ ์ด๋ฆ์ด ํ์ํ๋ค.
ํ๋๊ฐ ์ค์ผ์ค๋ฌ ์ด๋ฆ์ ์ง์ ํ์ง ์์ผ๋ฉด, kube-apiserver๋ ์ด๋ฅผ default-scheduler
๋ก
์ค์ ํ๋ค. ๋ฐ๋ผ์, ํด๋น ํ๋๋ฅผ ์ค์ผ์คํ๋ ค๋ฉด ์ด ์ค์ผ์ค๋ฌ ์ด๋ฆ์ ๊ฐ์ง ํ๋กํ์ผ์ด
์์ด์ผ ํ๋ค.
์ฐธ๊ณ :
ํ๋์ ์ค์ผ์ค๋ง ์ด๋ฒคํธ์๋ ReportingController๋ก.spec.schedulerName
์ด ์๋ค.
๋ฆฌ๋ ์ ์ถ์ ์ํ ์ด๋ฒคํธ๋ ๋ชฉ๋ก์์ ์ฒซ ๋ฒ์งธ ํ๋กํ์ผ์ ์ค์ผ์ค๋ฌ ์ด๋ฆ์
์ฌ์ฉํ๋ค.์ฐธ๊ณ :
๋ชจ๋ ํ๋กํ์ผ์queueSort
์ต์คํ
์
ํฌ์ธํธ์์ ๋์ผํ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด์ผ ํ๋ฉฐ
๋์ผํ ๊ตฌ์ฑ ํ๋ผ๋ฏธํฐ(ํด๋นํ๋ ๊ฒฝ์ฐ)๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. ๊ทธ ์ด์ ๋ ์ค์ผ์ค๋ฌ๊ฐ ๋ณด๋ฅ ์ค ์ํ์ธ ํ๋ ๋๊ธฐ์ด์
๋จ ํ๋๋ง ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.๋ค์์ ์ต์คํ ์ ํฌ์ธํธ์ ํ๋ฌ๊ทธ์ธ ์ ์ฉํ๊ธฐ
kubescheduler.config.k8s.io/v1beta3
๋ถํฐ,
๋ค์์ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด ํ๋ฌ๊ทธ์ธ์ ์ฝ๊ฒ ํ์ฑํํ๊ฑฐ๋
๋นํ์ฑํํ ์ ์๊ฒ ํ๋ ํ๋กํ์ผ ํ๊ฒฝ ์ค์ multiPoint
๊ฐ ์ถ๊ฐ๋์๋ค.
์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ๊ด๋ฆฌ์๊ฐ ์ปค์คํ
ํ๋กํ์ผ์ ์ฌ์ฉํ ๋ ํ๊ฒฝ ์ค์ ์ ๊ฐ์ํํ ์ ์๋ค.
preScore
, score
, preFilter
, filter
์ต์คํ
์
ํฌ์ธํธ๊ฐ ์๋ MyPlugin
์ด๋ผ๋ ํ๋ฌ๊ทธ์ธ์ด ์๋ค๊ณ ๊ฐ์ ํ์.
๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด MyPlugin
์ ํ์ฑํํ๋ ค๋ฉด,
๋ค์๊ณผ ๊ฐ์ ํ๋กํ์ผ ํ๊ฒฝ ์ค์ ์ ์ฌ์ฉํ๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: multipoint-scheduler
plugins:
multiPoint:
enabled:
- name: MyPlugin
์์ ์์๋ ์๋์ ๊ฐ์ด ๋ชจ๋ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด MyPlugin
์ ์๋์ผ๋ก ํ์ฑํํ๋ ๊ฒ๊ณผ
๋์ผํ ํจ๊ณผ๋ฅผ ๊ฐ๋๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: non-multipoint-scheduler
plugins:
preScore:
enabled:
- name: MyPlugin
score:
enabled:
- name: MyPlugin
preFilter:
enabled:
- name: MyPlugin
filter:
enabled:
- name: MyPlugin
์ฌ๊ธฐ์ multiPoint
๋ฅผ ์ฌ์ฉํ์ ๋์ ์ด์ ์,
์ถํ MyPlugin
์ด ๋ค๋ฅธ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํ ๊ตฌํ์ ์ถ๊ฐํ์ ๋,
์๋ก์ด ์ต์คํ
์
์ ๋ํด์๋ multiPoint
ํ๊ฒฝ ์ค์ ์ด ์๋์ผ๋ก ํ์ฑํ๋ ๊ฒ์ด๋ผ๋ ์ ์ด๋ค.
disabled
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ, MultiPoint
ํ์ฅ์ผ๋ก๋ถํฐ ํน์ ์ต์คํ
์
ํฌ์ธํธ๋ฅผ ์ ์ธํ ์ ์๋ค.
๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๊ฑฐ๋, ๊ธฐ๋ณธ์ด ์๋(non-default) ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๊ฑฐ๋,
์์ผ๋์นด๋('*'
)๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ ์ ์๋ค.
๋ค์์ Score
์ PreScore
์ ๋ํด ๋นํ์ฑํํ๋ ์์์ด๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: non-multipoint-scheduler
plugins:
multiPoint:
enabled:
- name: 'MyPlugin'
preScore:
disabled:
- name: '*'
score:
disabled:
- name: '*'
kubescheduler.config.k8s.io/v1beta3
๋ถํฐ, MultiPoint
ํ๋๋ฅผ ํตํด
๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ด ํ์ฑํ๋๋ค.
๊ทธ๋ฌ๋, ๊ฐ๋ณ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด ๊ธฐ๋ณธ๊ฐ(์: ์์, Score ๊ฐ์ค์น)์ ์ ์ฐํ๊ฒ ์ฌ์ค์ ํ๋ ๊ฒ๋ ์ฌ์ ํ ๊ฐ๋ฅํ๋ค.
์๋ฅผ ๋ค์ด, 2๊ฐ์ Score ํ๋ฌ๊ทธ์ธ DefaultScore1
๊ณผ DefaultScore2
๊ฐ ์๊ณ
๊ฐ๊ฐ์ ๊ฐ์ค์น๊ฐ 1
์ด๋ผ๊ณ ํ์.
์ด ๋, ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ค์น๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ์ฌ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: multipoint-scheduler
plugins:
score:
enabled:
- name: 'DefaultScore2'
weight: 5
์ด ์์ ์์, ์ด ํ๋ฌ๊ทธ์ธ๋ค์ MultiPoint
์ ๋ช
์ํ ํ์๋ ์๋๋ฐ,
์ด๋ ์ด ํ๋ฌ๊ทธ์ธ๋ค์ด ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ Score
์๋ DefaultScore2
ํ๋ฌ๊ทธ์ธ๋ง ๋ช
์๋์๋ค.
์ด๋ ์ต์คํ
์
ํฌ์ธํธ๋ฅผ ๋ช
์ํ์ฌ ์ค์ ๋ ํ๋ฌ๊ทธ์ธ์ ์ธ์ ๋ MultiPoint
ํ๋ฌ๊ทธ์ธ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์์ ์์์์๋ ๋ ํ๋ฌ๊ทธ์ธ์ ๋ชจ๋ ๋ช
์ํ์ง ์๊ณ ๋ ๋ ํ๋ฌ๊ทธ์ธ์ ์์๋ฅผ ์กฐ์ ํ์๋ค.
MultiPoint
ํ๋ฌ๊ทธ์ธ์ ์ค์ ํ ๋, ์ผ๋ฐ์ ์ธ ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ช ์๋ ์ต์คํ ์ ํฌ์ธํธ๊ฐ ๋จผ์ ์คํ๋๋ฉฐ, ์ฌ๊ธฐ์ ๋ช ์๋ ํ๊ฒฝ ์ค์ ์ ๋ค๋ฅธ ๋ชจ๋ ๊ณณ์ ์ค์ ๋ ๋ด์ฉ๋ณด๋ค ์ฐ์ ํ๋ค.
MultiPoint
๋ฐ ํ๋ฌ๊ทธ์ธ ์ค์ ์ ํตํด ์๋์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ฌ๊ทธ์ธ- ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ ๋ฐ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ณธ ์ค์
์์ ์ฐ์ ์์๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด, ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๊ฐ์ ํ๋ค.
ํ๋ฌ๊ทธ์ธ | ์ต์คํ ์ ํฌ์ธํธ |
---|---|
DefaultQueueSort | QueueSort |
CustomQueueSort | QueueSort |
DefaultPlugin1 | Score , Filter |
DefaultPlugin2 | Score |
CustomPlugin1 | Score , Filter |
CustomPlugin2 | Score , Filter |
์ด๋ค ํ๋ฌ๊ทธ์ธ์ ๋ํ ์ ํจํ ์์ ํ๊ฒฝ ์ค์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: multipoint-scheduler
plugins:
multiPoint:
enabled:
- name: 'CustomQueueSort'
- name: 'CustomPlugin1'
weight: 3
- name: 'CustomPlugin2'
disabled:
- name: 'DefaultQueueSort'
filter:
disabled:
- name: 'DefaultPlugin1'
score:
enabled:
- name: 'DefaultPlugin2'
๋ช
์ํ ์ต์คํ
์
ํฌ์ธํธ ๋ด์ MultiPoint
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ ์ํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์์ ์ ์ํ๋ค.
๋ช
์ํ ์ต์คํ
์
ํฌ์ธํธ์ ์ฐ์ ์์๊ฐ ๋ ๋์ผ๋ฏ๋ก,
์ด ์ฌ์ ์๋ ๋ฌด์๋๊ณ ๋ก๊ทธ์๋ง ๊ธฐ๋ก๋๋ค.
๋๋ถ๋ถ์ ํ๊ฒฝ ์ค์ ์ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ ๊ฒ ๋ง๊ณ ๋, ์ด ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ํฌํจํ๋ค.
- ์ปค์คํ
queueSort
ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ๊ณ ๊ธฐ์กด์ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๋ค CustomPlugin1
๊ณผCustomPlugin2
ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ๋ฉฐ, ์ด ํ๋ฌ๊ทธ์ธ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ต์คํ ์ ํฌ์ธํธ๋ฅผ ์ํด ์ด ํ๋ฌ๊ทธ์ธ๋ค์ด ๋จผ์ ์คํ๋๋คfilter
์ ๋ํด์๋งDefaultPlugin1
์ ๋นํ์ฑํํ๋คscore
์ ๋ํด,DefaultPlugin2
ํ๋ฌ๊ทธ์ธ์ด (์ฌ์ง์ด ์ปค์คํ ํ๋ฌ๊ทธ์ธ๋ณด๋ค๋) ๊ฐ์ฅ ๋จผ์ ์คํ๋๋๋ก ์์๋ฅผ ์กฐ์ ํ๋ค
multiPoint
ํ๋๊ฐ ์๋ v1beta3
์ด์ ๋ฒ์ ์ ํ๊ฒฝ ์ค์ ์์๋, ์์ ์ค๋ํซ์ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค.
apiVersion: kubescheduler.config.k8s.io/v1beta2
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: multipoint-scheduler
plugins:
# ๊ธฐ๋ณธ QueueSort ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๋ค
queueSort:
enabled:
- name: 'CustomQueueSort'
disabled:
- name: 'DefaultQueueSort'
# ์ปค์คํ
Filter ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ๋ค
filter:
enabled:
- name: 'CustomPlugin1'
- name: 'CustomPlugin2'
- name: 'DefaultPlugin2'
disabled:
- name: 'DefaultPlugin1'
# ์ปค์คํ
score ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ๊ณ ์์๋ฅผ ์กฐ์ ํ๋ค
score:
enabled:
- name: 'DefaultPlugin2'
weight: 1
- name: 'DefaultPlugin1'
weight: 3
๋ค์ ๋ณต์กํ ์์๋ฅผ ํตํด, ์ต์คํ
์
ํฌ์ธํธ๋ฅผ ์ค์ ํจ์ ์์ด์ MultiPoint
ํ๊ฒฝ ์ค์ ์ ์ ์ฐ์ฑ๊ณผ
๊ธฐ์กด ๋ฐฉ๋ฒ๊ณผ์ ๋๊น์๋ ํตํฉ์ ํ์ธํ ์ ์๋ค.
์ค์ผ์ค๋ฌ ์ค์ ์ ํ
์ค์ ๋ฒ์ v1beta2 ์์๋,
NodeResourcesFit
ํ๋ฌ๊ทธ์ธ์ ์ํ ์๋ก์ด ์ค์ฝ์ด๋ง ํ์ฅ์ ์ด์ฉํ ์ ์๋ค. ์ ํ์ฅ์NodeResourcesLeastAllocated
,NodeResourcesMostAllocated
,RequestedToCapacityRatio
ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ฅ์ ํตํฉํ์ฌ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค์ด, ์ด์ ์NodeResourcesMostAllocated
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ค๋ฉด, ๋์NodeResourcesFit
(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์)์ ์ฌ์ฉํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ดscoreStrategy
๋ฅผ ํฌํจํ๋pluginConfig
๋ฅผ ์ถ๊ฐํ ์ ์๋ค.apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration profiles: - pluginConfig: - args: scoringStrategy: resources: - name: cpu weight: 1 type: MostAllocated name: NodeResourcesFit
์ค์ผ์ค๋ฌ ํ๋ฌ๊ทธ์ธ
NodeLabel
์ ์ฌ์ฉ ์ค๋จ๋์๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํดNodeAffinity
ํ๋ฌ๊ทธ์ธ(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์)์ ์ฌ์ฉํ๋ค.์ค์ผ์ค๋ฌ ํ๋ฌ๊ทธ์ธ
ServiceAffinity
์ ์ฌ์ฉ ์ค๋จ๋์๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํดInterPodAffinity
ํ๋ฌ๊ทธ์ธ(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์)์ ์ฌ์ฉํ๋ค.์ค์ผ์ค๋ฌ ํ๋ฌ๊ทธ์ธ
NodePreferAvoidPods
์ ์ฌ์ฉ ์ค๋จ๋์๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ๋ ธ๋ ํ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ค.v1beta2 ์ค์ ํ์ผ์์ ํ์ฑํ๋ ํ๋ฌ๊ทธ์ธ์ ํด๋น ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ณธ ์ค์ ๊ฐ๋ณด๋ค v1beta2 ์ค์ ํ์ผ์ ๊ฐ์ด ์ฐ์ ์ ์ฉ๋๋ค.
์ค์ผ์ค๋ฌ healthz์ metrics ๋ฐ์ธ๋ ์ฃผ์์ ๋ํด
host
๋๋port
๊ฐ ์๋ชป ์ค์ ๋๋ฉด ๊ฒ์ฆ ์คํจ๋ฅผ ์ ๋ฐํ๋ค.
- ์ธ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ค์น ๊ธฐ๋ณธ๊ฐ์ด ๋ค์๊ณผ ๊ฐ์ด ์ฆ๊ฐํ๋ค.
InterPodAffinity
: 1 ์์ 2 ๋กNodeAffinity
: 1 ์์ 2 ๋กTaintToleration
: 1 ์์ 3 ์ผ๋ก
- ์ค์ผ์ค๋ฌ ํ๋ฌ๊ทธ์ธ
SelectorSpread
๋ ์ ๊ฑฐ๋์๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํดPodTopologySpread
ํ๋ฌ๊ทธ์ธ(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์)์ ์ฌ์ฉํ๋ค.
๋ค์ ๋ด์ฉ
- kube-scheduler ๋ ํผ๋ฐ์ค ์ฝ์ด๋ณด๊ธฐ
- ์ค์ผ์ค๋ง์ ๋ํด ์์๋ณด๊ธฐ
- kube-scheduler ์ค์ (v1beta2) ๋ ํผ๋ฐ์ค ์ฝ์ด๋ณด๊ธฐ
- kube-scheduler ์ค์ (v1beta3) ๋ ํผ๋ฐ์ค ์ฝ์ด๋ณด๊ธฐ
- kube-scheduler ์ค์ (v1) ๋ ํผ๋ฐ์ค ์ฝ์ด๋ณด๊ธฐ