๋ชฉ์ฐจ
ย Scheduling
ย Scheduling Queue
Pod๋ค์ด ์์ฑ๋๋ฉด Scheduling Queue์ ๋ค์ด๊ฐ ์ค์ผ์ค๋ง๋๊ธธ ๊ธฐ๋ค๋ฆฐ๋ค. Scheduling Queue์์๋ ์ฐ์ ์์์ ๋ฐ๋ผ Pod์ ์ค์ผ์ค๋ง ์์๊ฐ ์ ํด์ง๋ค. ์ฐ์ ์์๋ PriorityClass๋ฅผ ํตํด ์์ฑํ ์ ์์ผ๋ฉฐ, Pod์ spec์ ํ๋๋ฅผ ์ถ๊ฐํ์ฌ ์ฐ์ ์์๋ฅผ ์ค์ ํ ์ ์๋ค.
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000 # value ๊ฐ์ ๋น๊ตํด ์ฐ์ ์์ ํ๋จ
globalDefault: false
description: "This priority class should be used for XYZ service pods only"
YAML
๋ณต์ฌ
ย Filtering
Scheduling Queue์์ ์ฐ์ ์์๊ฐ ๋์ ๋จผ์ ์ค์ผ์ค๋ง๋ Pod๋ Filtering ๋จ๊ณ์ ๋์
ํ๋ค.
Pod๋ฅผ ์คํํ ์ ์๋ Node๊ฐ ๊ฑธ๋ฌ์ง๋ค. ์๋ก, Pod์ CPU request ๊ฐ 10์ด๋ผ๋ฉด 10 ๋ฏธ๋ง์ CPU๋ฅผ ๊ฐ์ง Node๋ ๊ฑธ๋ฌ์ง๋ค.
ย Scoring
Filtering์ ํตํด ๊ฑธ๋ฌ์ง Node๋ค์ Pod์ ์๊ตฌ์ฌํญ์ ๊ทผ๊ฑฐํ์ฌ ์ ์๊ฐ ๋งค๊ฒจ์ง๋ค
๋์ ์ ์๊ฐ ๋งค๊ฒจ์ง Pod๊ฐ ์ ํ๋์ด ๋ค์ ๋จ๊ณ์ธ Binding์ผ๋ก ๋์ด๊ฐ๋ค
ย Binding
Pod๊ฐ ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ๊ฐ์ง Node์ ๋ฐ์ธ๋ฉ๋์ด ๋ฐฐํฌ๋๋ค
Scheduling Plugins
Scheduling Queue โ Filtering โ Scoring โ Binding
์ด ๋ชจ๋ ์์
์ ํน์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค
ย Scheduling Queue
โข
PrioritySort
โฆ
Scheduling Queue์์ ์ฐ์ ์์ ํ๋ฌ๊ทธ์ธ์ Pod์์ ์ฐ์ ์์๋ก ์ค์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ ์์๋๋ก ์ ๋ ฌํ๋ค
ย Filtering
โข
NodeResourcesFit
โฆ
Pod์ ํ์ํ ์ถฉ๋ถํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง ๋
ธ๋๋ฅผ ์๋ณํ๊ณ , ๋ถ์กฑํ ๋
ธ๋๋ ๊ฑธ๋ฌ๋ธ๋ค.
โข
NodeName
โฆ
Pod.spec์์ ์ธ๊ธ๋ ๋
ธ๋ ์ด๋ฆ์ด ์๋์ง ํ์ธํ๊ณ ์ผ์นํ์ง ์๋ ๋ชจ๋ ๋
ธ๋๋ฅผ ํํฐ๋งํ๋ค
โข
NodeUnschedulable
โฆ
Unshedulable Flag๊ฐ true๋ก ์ค์ ๋ ๋
ธ๋๋ฅผ ํํฐ๋งํ๋ค
โช
์ด๋ ๋
ธ๋๋ฅผ drain (cordon command)ํ ๋ ์ฌ์ฉํ๋ค
โฆ
์ด ํ๋ฌ๊ทธ์ธ์ ํด๋น ๋
ธ๋์ ์ค์ ๋ Pod๊ฐ ์๋ค๋ ๊ฒ์ ํ์คํ๊ฒ ํ๋ค.
ย Scoring
์ ์๋ฅผ ๋งค๊ธธ ๋ฟ ํน์ Node๊ฐ Pod ๋ฐฐ์น๋ฅผ ๊ฑฐ๋ถ(reject)ํ๋ ๊ฒ์ ์๋๋ค. ImageLocality์ ๋ฐ๋ผ Pod์ ์ด๋ฏธ์ง๋ฅผ ์ด๋ฏธ ์ฌ์ฉํ๋ Node๋ผ๋ ์ฌ์ฉํ ์ ์๋ ๋
ธ๋๋ฉด, ์ด๋ฏธ์ง๊ฐ ์๋ Node์ ๋ฐฐ์น๋๋ค
โข
NodeResourcesFit
โฆ
๊ฐ ๋
ธ๋์ ๊ฐ์ฉ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋ฅผ ํ ๋นํ์ฌ Pod๋ฅผ ํด๋น ๋
ธ๋์ ํ ๋นํ๋ค
โข
ImageLocality
โฆ
๋ค์ํ ๋
ธ๋ ์ค์์ Pod๊ฐ ์ฌ์ฉํ๋ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ด๋ฏธ ๋ณด์ ํ ๋
ธ๋์ ๋์ ์ ์๋ฅผ ํ ๋นํ๋ค
ย Binding
โข
DefaultBinder
โฆ
๋ฐ์ธ๋ฉ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค
ย Extension Points
์ฟ ๋ฒ๋คํฐ์ค์ ๋ฐ์ด๋ ํ์ฅ์ฑ์ผ๋ก ์ธํด ์ด๋ค ํ๋ฌ๊ทธ์ธ์ ์ด๋์ ๋ ๊ฒ์ธ์ง ์ง์ ํ ์ ์๊ณ , ์ปค์คํ
ํ๋ฌ๊ทธ์ธ์ ์์ฑํ ์๋ ์๋ค. ํ๋ฌ๊ทธ์ธ์ ๊ฐ ๋จ๊ณ๋ง๋ค ์ฐ๊ฒฐ๋ ์ ์๋ ํ์ฅ ์ง์ (Extension Points)์ด ์์ผ๋ฉฐ ์ฌ๋ฌ ํ์ฅ ์ง์ ์ ๊ฑธ์ณ ์์ ์ ์๋ค.
ย Scheduler Profiles
๋ค์ค ์ค์ผ์ค๋ฌ๋ฅผ ๋ฐฐํฌํ ๋ ๊ฐ๊ฐ์ ์ค์ผ์ค๋ฌ๋ ๋ณ๋์ ํ๋ก์ธ์ค์ด๊ธฐ ๋๋ฌธ์ scheduling decision์ ๋ด๋ฆฌ๋ ๊ณผ์ ์์ ๊ฒฝ์ ์กฐ๊ฑด(race conditions)์ ์ง๋ฉดํ ์ ์๋ค. ์๋ฅผ๋ค์ด, ํ ์ค์ผ์ค๋ฌ๊ฐ ๋
ธ๋์ ์์
์ ์ค์ผ์ค๋งํ ๋, ๋ค๋ฅธ ์ค์ผ์ค๋ฌ๊ฐ ๋์ผํ ๋
ธ๋์ ์์
์ ์ค์ผ์ค๋งํ๊ณ ์๋ค๋ ์ฌ์ค์ ์์ง ๋ชปํ ์ ์๋ค.
Multiple Profiles in a Single Scheduler
์ฟ ๋ฒ๋คํฐ์ค 1.18 ๋ฒ์ ๋ถํฐ ๋จ์ผ ์ค์ผ์ค๋ฌ๊ฐ ๋ค์ค profile์ ์ง์ํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๋ค. config ํ์ผ์์ profile ๋ชฉ๋ก์ ๊ฐ scheduler์ด๋ฆ์ ๋ช
์ํ์ฌ ๊ฐ ์ค์ผ์ค๋ฌ์ ๋ํด ๋ถ๋ฆฌ๋ ํ๋กํ์ผ์ ์์ฑํ ์ ์๋ค.
# my-scheduler-2-config.yaml
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: my-scheduler-2
- schedulerName: my-scheduler-3
- schedulerName: my-scheduler-4
YAML
๋ณต์ฌ
โข
์ฌ๋ฌ ๊ฐ์ ์ค์ผ์ค๋ฌ๊ฐ ํ๋์ ๋ฐ์ด๋๋ฆฌ๋ก ์คํ๋ ๋ฟ ๊ฐ๋ณ ์ค์ผ์ค๋ฌ๋ก ์๋ํ๋ค
How to work differently
๊ฐ profile๋ค์ ๋ค๋ฅด๊ฒ ๋์ํ๊ฒ ํ๊ธฐ ์ํด์๋ ์ถ๊ฐ ์ค์ ์ด ํ์ํ๋ค. ์์ ๊ฐ์ ๊ฒฝ์ฐ๋ ํ๋กํ์ผ์ ์ถ๊ฐ๋ง ํ์ ๋ฟ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์ฒ๋ผ ๋์ํ๋ค.
# my-scheduler-2-config.yaml
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: my-scheduler-2
plugins:
score:
disabled:
- name: TaintToleration
enabled:
- name: MyCustomPluginA
- name: MyCustomPluginB
- schedulerName: my-scheduler-3
plugins:
preScore:
disabled:
- name: '*'
score:
disabled:
- name: '*'
- schedulerName: my-scheduler-4
YAML
๋ณต์ฌ
โข
ํน์ ํ๋ฌ๊ทธ์ธ์ ๋ํด ํ์ฑํ/๋นํ์ฑํ๋ฅผ ํตํด profile๋ค์ด ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
โฆ
my-scheduler-2
โช
TaintToleration ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํ
โช
์ฌ์ฉ์ ์ ์ ํ๋ฌ๊ทธ์ธ MyCustomPluginA์ MyCustomPluginB๋ฅผ ํ์ฑํ
โฆ
my-scheduler-3
โช
๋ชจ๋ preScore ํ๋ฌ๊ทธ์ธ ๋นํ์ฑํ
โช
๋ชจ๋ score ํ๋ฌ๊ทธ์ธ ๋นํ์ฑํ