@@ -18,15 +18,16 @@ weight: 20
18
18
각 단계는 익스텐션 포인트(extension point)를 통해 노출된다. 플러그인은 이러한
19
19
익스텐션 포인트 중 하나 이상을 구현하여 스케줄링 동작을 제공한다.
20
20
21
- [ KubeSchedulerConfiguration (v1beta1)] ( /docs/reference/config-api/kube-scheduler-config.v1beta1/ )
21
+ KubeSchedulerConfiguration ([ v1beta1] ( /docs/reference/config-api/kube-scheduler-config.v1beta1/ )
22
+ 또는 [ v1beta2] ( /docs/reference/config-api/kube-scheduler-config.v1beta2/ ) )
22
23
구조에 맞게 파일을 작성하고,
23
24
` kube-scheduler --config <filename> ` 을 실행하여
24
25
스케줄링 프로파일을 지정할 수 있다.
25
26
26
27
최소 구성은 다음과 같다.
27
28
28
29
``` yaml
29
- apiVersion : kubescheduler.config.k8s.io/v1beta1
30
+ apiVersion : kubescheduler.config.k8s.io/v1beta2
30
31
kind : KubeSchedulerConfiguration
31
32
clientConnection :
32
33
kubeconfig : /etc/srv/kubernetes/kube-scheduler/kubeconfig
@@ -48,38 +49,41 @@ clientConnection:
48
49
스케줄링은 다음 익스텐션 포인트를 통해 노출되는 일련의 단계에서
49
50
발생한다.
50
51
51
- 1. `QueueSort ` : 이 플러그인은 스케줄링 대기열에서 보류 중인 파드를
52
+ 1. `queueSort ` : 이 플러그인은 스케줄링 대기열에서 보류 중인 파드를
52
53
정렬하는 데 사용되는 정렬 기능을 제공한다. 대기열 정렬 플러그인은 한 번에 단 하나만 활성화될 수 있다.
53
54
사용할 수 있다.
54
- 1. `PreFilter ` : 이 플러그인은 필터링하기 전에 파드 또는 클러스터에 대한 정보를
55
+ 1. `preFilter ` : 이 플러그인은 필터링하기 전에 파드 또는 클러스터에 대한 정보를
55
56
사전 처리하거나 확인하는 데 사용된다. 이 플러그인은 파드를 unschedulable로
56
57
표시할 수 있다.
57
- 1. `Filter ` : 이 플러그인은 스케줄링 정책의 단정(Predicates)과 동일하며
58
+ 1. `filter ` : 이 플러그인은 스케줄링 정책의 단정(Predicates)과 동일하며
58
59
파드를 실행할 수 없는 노드를 필터링하는 데 사용된다. 필터는
59
60
구성된 순서대로 호출된다. 노드가 모든 필터를 통과하지 않으면 파드는 unschedulable로
60
61
표시된다.
61
- 1. `PreScore` : 이것은 사전 스코어링 작업을 수행하는 데 사용할 수 있는
62
+ 1. `postFilter` : 이 플러그인은 파드의 실행 가능한 노드를 찾을 수 없을 때,
63
+ 구성된 순서대로 호출된다. `postFilter` 플러그인이 파드 _schedulable_ 을 표시하는 경우,
64
+ 나머지 플러그인은 호출 되지 않는다.
65
+ 1. `preScore` : 이것은 사전 스코어링 작업을 수행하는 데 사용할 수 있는
62
66
정보성 익스텐션 포인트이다.
63
- 1. `Score ` : 이 플러그인은 필터링 단계를 통과한 각 노드에 점수를
67
+ 1. `score ` : 이 플러그인은 필터링 단계를 통과한 각 노드에 점수를
64
68
제공한다. 그런 다음 스케줄러는 가중치 합계가 가장 높은
65
69
노드를 선택한다.
66
- 1. `Reserve ` : 지정된 파드에 리소스가 예약된 경우 플러그인에
70
+ 1. `reserve ` : 지정된 파드에 리소스가 예약된 경우 플러그인에
67
71
알리는 정보성 익스텐션 포인트이다. 플러그인은 또한
68
72
` Reserve` 도중 또는 이후에 실패한 경우 호출 되는 `Unreserve` 호출을
69
73
구현한다.
70
- 1. `Permit ` : 이 플러그인은 파드 바인딩을 방지하거나 지연시킬 수 있다.
71
- 1. `PreBind ` : 이 플러그인은 파드가 바인딩되기 전에 필요한 모든 작업을 수행한다.
72
- 1. `Bind ` : 플러그인은 파드를 노드에 바인딩한다. Bind 플러그인은 순서대로 호출되며
73
- 일단 바인딩이 완료되면 나머지 플러그인은 건너뛴다. Bind
74
+ 1. `permit ` : 이 플러그인은 파드 바인딩을 방지하거나 지연시킬 수 있다.
75
+ 1. `preBind ` : 이 플러그인은 파드가 바인딩되기 전에 필요한 모든 작업을 수행한다.
76
+ 1. `bind ` : 플러그인은 파드를 노드에 바인딩한다. `bind` 플러그인은 순서대로 호출되며
77
+ 일단 바인딩이 완료되면 나머지 플러그인은 건너뛴다. bind
74
78
플러그인은 적어도 하나 이상 필요하다.
75
- 1. `PostBind ` : 파드가 바인드된 후 호출되는
79
+ 1. `postBind ` : 파드가 바인드된 후 호출되는
76
80
정보성 익스텐션 포인트이다.
77
81
78
82
각 익스텐션 포인트에 대해 특정 [기본 플러그인](#스케줄링-플러그인)을 비활성화하거나
79
83
자체 플러그인을 활성화할 수 있다. 예를 들면, 다음과 같다.
80
84
81
85
` ` ` yaml
82
- apiVersion: kubescheduler.config.k8s.io/v1beta1
86
+ apiVersion: kubescheduler.config.k8s.io/v1beta2
83
87
kind: KubeSchedulerConfiguration
84
88
profiles:
85
89
- plugins:
@@ -99,106 +103,111 @@ profiles:
99
103
100
104
# ## 스케줄링 플러그인
101
105
102
- 1. `UnReserve` : 파드가 예약된 후 거부되고 `Permit` 플러그인에 의해 보류된 경우
103
- 호출되는 정보성 익스텐션 포인트이다.
104
-
105
- # # 스케줄링 플러그인
106
-
107
106
기본적으로 활성화된 다음의 플러그인은 이들 익스텐션 포인트 중
108
107
하나 이상을 구현한다.
109
108
110
- - `SelectorSpread` : {{< glossary_tooltip text="서비스" term_id="service" >}},
111
- {{< glossary_tooltip text="레플리카셋(ReplicaSets)" term_id="replica-set" >}} 및
112
- {{< glossary_tooltip text="스테이트풀셋(StatefulSets)" term_id="statefulset" >}}에
113
- 속하는 파드에 대해 노드 간 분산을 선호한다.
114
- 익스텐션 포인트 : ` PreScore` , `Score`.
115
109
- `ImageLocality` : 파드가 실행하는 컨테이너 이미지가 이미 있는 노드를
116
110
선호한다.
117
- 익스텐션 포인트 : ` Score ` .
111
+ 익스텐션 포인트 : ` score ` .
118
112
- `TaintToleration` : [테인트(taint)와 톨러레이션(toleration)](/ko/docs/concepts/scheduling-eviction/taint-and-toleration/)을
119
113
구현한다.
120
- 익스텐션 포인트 구현 : ` Filter ` , `Prescore `, `Score `.
114
+ 익스텐션 포인트 구현 : ` filter ` , `preScore `, `score `.
121
115
- `NodeName` : 파드 명세 노드 이름이 현재 노드와 일치하는지 확인한다.
122
- 익스텐션 포인트 : ` Filter ` .
116
+ 익스텐션 포인트 : ` filter ` .
123
117
- `NodePorts` : 노드에 요청된 파드 포트에 대해 사용 가능한 포트가 있는지 확인한다.
124
- 익스텐션 포인트 : ` PreFilter ` , `Filter `.
118
+ 익스텐션 포인트 : ` preFilter ` , `filter `.
125
119
- `NodePreferAvoidPods` : 노드 {{< glossary_tooltip text="어노테이션" term_id="annotation" >}}
126
120
` scheduler.alpha.kubernetes.io/preferAvoidPods` 에 따라
127
121
노드 점수를 매긴다.
128
- 익스텐션 포인트 : ` Score ` .
122
+ 익스텐션 포인트 : ` score ` .
129
123
- `NodeAffinity` : [노드 셀렉터](/ko/docs/concepts/scheduling-eviction/assign-pod-node/#노드-셀렉터-nodeselector)와
130
124
[노드 어피니티](/ko/docs/concepts/scheduling-eviction/assign-pod-node/#노드-어피니티)를
131
125
구현한다.
132
- 익스텐션 포인트 : ` Filter ` , `Score `.
126
+ 익스텐션 포인트 : ` filter ` , `score `.
133
127
- `PodTopologySpread` : [파드 토폴로지 분배](/ko/docs/concepts/workloads/pods/pod-topology-spread-constraints/)를
134
128
구현한다.
135
- 익스텐션 포인트 : ` PreFilter ` , `Filter `, `PreScore `, `Score `.
129
+ 익스텐션 포인트 : ` preFilter ` , `filter `, `preScore `, `score `.
136
130
- `NodeUnschedulable` : ` .spec.unschedulable` 이 true로 설정된 노드를
137
131
필터링한다.
138
- 익스텐션 포인트 : ` Filter ` .
132
+ 익스텐션 포인트 : ` filter ` .
139
133
- `NodeResourcesFit` : 노드에 파드가 요청하는 모든 리소스가 있는지
140
- 확인한다.
141
- 익스텐션 포인트 : ` PreFilter ` , `Filter `.
134
+ 확인한다. 점수는 `LeastAllocated`(기본값), `MostAllocated`, `RequestedToCapacityRatio` 등 3가지 전략 중 하나를 사용할 수 있다.
135
+ 익스텐션 포인트 : ` preFilter ` , `filter`, `score `.
142
136
- `NodeResourcesBalancedAllocation` : 파드가 스케줄된 경우, 보다 균형잡힌 리소스 사용량을
143
137
얻을 수 있는 노드를 선호한다.
144
- 익스텐션 포인트 : ` Score ` .
138
+ 익스텐션 포인트 : ` score ` .
145
139
- `NodeResourcesLeastAllocated` : 리소스 할당이 적은 노드를
146
140
선호한다.
147
141
익스텐션 포인트 : ` Score` .
148
142
- `VolumeBinding` : 노드에 요청된 {{< glossary_tooltip text="볼륨" term_id="volume" >}}이 있는지
149
143
또는 바인딩할 수 있는지 확인한다.
150
- 익스텐션 포인트 : ` PreFilter ` , `Filter `, `Reserve `, `PreBind `, `Score `.
144
+ 익스텐션 포인트 : ` preFilter ` , `filter `, `reserve `, `preBind `, `score `.
151
145
{{< note >}}
152
- ` Score ` 익스텐션 포인트는 `VolumeCapacityPriority` 기능이
146
+ ` score ` 익스텐션 포인트는 `VolumeCapacityPriority` 기능이
153
147
활성화되어 있어야 활성화되며,
154
148
요청된 볼륨 사이즈를 만족하는 가장 작은 PV들을 우선순위 매긴다.
155
149
{{< /note >}}
156
150
- `VolumeRestrictions` : 노드에 마운트된 볼륨이 볼륨 제공자에 특정한
157
151
제한 사항을 충족하는지 확인한다.
158
- 익스텐션 포인트 : ` Filter ` .
152
+ 익스텐션 포인트 : ` filter ` .
159
153
- `VolumeZone` : 요청된 볼륨이 가질 수 있는 영역 요구 사항을 충족하는지
160
154
확인한다.
161
- 익스텐션 포인트 : ` Filter ` .
155
+ 익스텐션 포인트 : ` filter ` .
162
156
- `NodeVolumeLimits` : 노드에 대해 CSI 볼륨 제한을 충족할 수 있는지
163
157
확인한다.
164
- 익스텐션 포인트 : ` Filter ` .
158
+ 익스텐션 포인트 : ` filter ` .
165
159
- `EBSLimits` : 노드에 대해 AWS EBS 볼륨 제한을 충족할 수 있는지 확인한다.
166
- 익스텐션 포인트 : ` Filter ` .
160
+ 익스텐션 포인트 : ` filter ` .
167
161
- `GCEPDLimits` : 노드에 대해 GCP-PD 볼륨 제한을 충족할 수 있는지 확인한다.
168
- 익스텐션 포인트 : ` Filter ` .
162
+ 익스텐션 포인트 : ` filter ` .
169
163
- `AzureDiskLimits` : 노드에 대해 Azure 디스크 볼륨 제한을 충족할 수 있는지
170
164
확인한다.
171
- 익스텐션 포인트 : ` Filter ` .
165
+ 익스텐션 포인트 : ` filter ` .
172
166
- `InterPodAffinity` : [파드 간 어피니티 및 안티-어피니티](/ko/docs/concepts/scheduling-eviction/assign-pod-node/#파드간-어피니티와-안티-어피니티)를
173
167
구현한다.
174
- 익스텐션 포인트 : ` PreFilter ` , `Filter `, `PreScore `, `Score `.
168
+ 익스텐션 포인트 : ` preFilter ` , `filter `, `preScore `, `score `.
175
169
- `PrioritySort` : 기본 우선 순위 기반 정렬을 제공한다.
176
- 익스텐션 포인트 : ` QueueSort ` .
170
+ 익스텐션 포인트 : ` queueSort ` .
177
171
- `DefaultBinder` : 기본 바인딩 메커니즘을 제공한다.
178
- 익스텐션 포인트 : ` Bind ` .
172
+ 익스텐션 포인트 : ` bind ` .
179
173
- `DefaultPreemption` : 기본 선점 메커니즘을 제공한다.
180
- 익스텐션 포인트 : ` PostFilter ` .
174
+ 익스텐션 포인트 : ` postFilter ` .
181
175
182
176
기본으로 활성화되지 않는 다음의 플러그인을
183
177
컴포넌트 구성 API를 통해 활성화할 수도 있다.
184
178
179
+ - `SelectorSpread` : {{< glossary_tooltip text="Services" term_id="service" >}},
180
+ {{< glossary_tooltip text="ReplicaSets" term_id="replica-set" >}}와
181
+ {{< glossary_tooltip text="StatefulSets" term_id="statefulset" >}}에 속하는 파드의 경우,
182
+ 노드간에 퍼지는 것을 선호한다.
183
+ 익스텐션 포인트 : ` preScore` , `score`.
184
+ - `CinderLimits` : 노드에 대해 [OpenStack Cinder](https://docs.openstack.org/cinder/)
185
+ 볼륨 제한이 충족될 수 있는지 확인한다.
186
+ 익스텐션 포인트 : ` filter` .
187
+
188
+ 다음 플러그인은 더 이상 사용되지 않으며 `v1beta1`에서만
189
+ 사용할 수 있다.
190
+
191
+ - `NodeResourcesLeastAllocated` : 리소스 할당이 낮은 노드를
192
+ 선호한다.
193
+ Extension points : ` score` .
185
194
- `NodeResourcesMostAllocated` : 리소스 할당이 많은 노드를
186
195
선호한다.
187
- 익스텐션 포인트 : ` Score ` .
196
+ 익스텐션 포인트 : ` score ` .
188
197
- `RequestedToCapacityRatio` : 할당된 리소스의 구성된 기능에 따라 노드를
189
198
선호한다.
190
- 익스텐션 포인트 : ` Score` .
191
- - `CinderVolume` : 노드에 대해 OpenStack Cinder 볼륨 제한을 충족할 수 있는지
192
- 확인한다.
193
- 익스텐션 포인트 : ` Filter` .
199
+ 익스텐션 포인트 : ` score` .
194
200
- `NodeLabel` : Filters and / or scores a node according to configured
195
201
{{< glossary_tooltip text="label(s)" term_id="label" >}}.
196
202
익스텐션 포인트 : ` Filter` , `Score`.
197
203
- `ServiceAffinity` : {{< glossary_tooltip text="서비스" term_id="service" >}}에
198
204
속한 파드가 구성된 레이블로 정의된 노드 집합에 맞는지
199
205
확인한다. 이 플러그인은 또한 서비스에 속한 파드를 노드 간에
200
206
분산하는 것을 선호한다.
201
- 익스텐션 포인트 : ` PreFilter` , `Filter`, `Score`.
207
+ 익스텐션 포인트 : ` preFilter` , `filter`, `score`.
208
+ - `NodePreferAvoidPods` : 노드 주석 `scheduler.alpha.kubernetes.io/preferAvoidPods`에 따라
209
+ 노드의 우선 순위를 지정한다.
210
+ 익스텐션 포인트 : ` score` .
202
211
203
212
# ## 여러 프로파일
204
213
@@ -211,7 +220,7 @@ profiles:
211
220
실행된다.
212
221
213
222
` ` ` yaml
214
- apiVersion: kubescheduler.config.k8s.io/v1beta1
223
+ apiVersion: kubescheduler.config.k8s.io/v1beta2
215
224
kind: KubeSchedulerConfiguration
216
225
profiles:
217
226
- schedulerName: default-scheduler
@@ -243,7 +252,7 @@ profiles:
243
252
{{< /note >}}
244
253
245
254
{{< note >}}
246
- 모든 프로파일은 QueueSort 익스텐션 포인트에서 동일한 플러그인을 사용해야 하며
255
+ 모든 프로파일은 `queueSort` 익스텐션 포인트에서 동일한 플러그인을 사용해야 하며
247
256
동일한 구성 파라미터(해당하는 경우)를 가져야 한다. 그 이유는 스케줄러가 보류 중 상태인 파드 대기열을
248
257
단 하나만 가질 수 있기 때문이다.
249
258
{{< /note >}}
@@ -253,3 +262,4 @@ profiles:
253
262
* [kube-scheduler 레퍼런스](/docs/reference/command-line-tools-reference/kube-scheduler/) 읽어보기
254
263
* [스케줄링](/ko/docs/concepts/scheduling-eviction/kube-scheduler/)에 대해 알아보기
255
264
* [kube-scheduler configuration (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/) 레퍼런스 읽어보기
265
+ * [kube-scheduler configuration (v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/) 레퍼런스 읽어보기
0 commit comments