@@ -18,8 +18,8 @@ weight: 20
18
18
각 단계는 익스텐션 포인트(extension point)를 통해 노출된다. 플러그인은 이러한
19
19
익스텐션 포인트 중 하나 이상을 구현하여 스케줄링 동작을 제공한다.
20
20
21
- KubeSchedulerConfiguration ([ v1beta1 ] ( /docs/reference/config-api/kube-scheduler-config.v1beta1 / )
22
- 또는 [ v1beta2 ] ( /docs/reference/config-api/kube-scheduler-config.v1beta2 / ) )
21
+ KubeSchedulerConfiguration ([ v1beta2 ] ( /docs/reference/config-api/kube-scheduler-config.v1beta2 / )
22
+ 또는 [ v1beta3 ] ( /docs/reference/config-api/kube-scheduler-config.v1beta3 / ) )
23
23
구조에 맞게 파일을 작성하고,
24
24
` kube-scheduler --config <filename> ` 을 실행하여
25
25
스케줄링 프로파일을 지정할 수 있다.
@@ -78,6 +78,8 @@ clientConnection:
78
78
플러그인은 적어도 하나 이상 필요하다.
79
79
1. `postBind` : 파드가 바인드된 후 호출되는
80
80
정보성 익스텐션 포인트이다.
81
+ 1. `multiPoint` : 이 필드는 플러그인들의 모든 적용 가능한 익스텐션 포인트에 대해
82
+ 플러그인들을 동시에 활성화하거나 비활성화할 수 있게 하는 환경 설정 전용 필드이다.
81
83
82
84
각 익스텐션 포인트에 대해 특정 [기본 플러그인](#스케줄링-플러그인)을 비활성화하거나
83
85
자체 플러그인을 활성화할 수 있다. 예를 들면, 다음과 같다.
@@ -101,7 +103,7 @@ profiles:
101
103
모든 기본 플러그인을 비활성화할 수 있다. 원하는 경우, 플러그인 순서를 재정렬하는 데
102
104
사용할 수도 있다.
103
105
104
- # ## 스케줄링 플러그인
106
+ # ## 스케줄링 플러그인 {#scheduling-plugins}
105
107
106
108
기본적으로 활성화된 다음의 플러그인은 이들 익스텐션 포인트 중
107
109
하나 이상을 구현한다.
@@ -178,30 +180,6 @@ profiles:
178
180
- `CinderLimits` : 노드에 대해 [OpenStack Cinder](https://docs.openstack.org/cinder/)
179
181
볼륨 제한이 충족될 수 있는지 확인한다.
180
182
익스텐션 포인트 : ` filter` .
181
-
182
- 다음 플러그인은 더 이상 사용되지 않으며 `v1beta1`에서만
183
- 사용할 수 있다.
184
-
185
- - `NodeResourcesLeastAllocated` : 리소스 할당이 낮은 노드를
186
- 선호한다.
187
- Extension points : ` score` .
188
- - `NodeResourcesMostAllocated` : 리소스 할당이 많은 노드를
189
- 선호한다.
190
- 익스텐션 포인트 : ` score` .
191
- - `RequestedToCapacityRatio` : 할당된 리소스의 구성된 기능에 따라 노드를
192
- 선호한다.
193
- 익스텐션 포인트 : ` score` .
194
- - `NodeLabel` : 설정된 {{< glossary_tooltip text="레이블" term_id="label" >}}에 따라
195
- 노드를 필터링하거나 스코어링한다.
196
- 익스텐션 포인트 : ` Filter` , `Score`.
197
- - `ServiceAffinity` : {{< glossary_tooltip text="서비스" term_id="service" >}}에
198
- 속한 파드가 구성된 레이블로 정의된 노드 집합에 맞는지
199
- 확인한다. 이 플러그인은 또한 서비스에 속한 파드를 노드 간에
200
- 분산하는 것을 선호한다.
201
- 익스텐션 포인트 : ` preFilter` , `filter`, `score`.
202
- - `NodePreferAvoidPods` : 노드 주석 `scheduler.alpha.kubernetes.io/preferAvoidPods`에 따라
203
- 노드의 우선 순위를 지정한다.
204
- 익스텐션 포인트 : ` score` .
205
183
206
184
# ## 여러 프로파일
207
185
@@ -251,6 +229,186 @@ profiles:
251
229
단 하나만 가질 수 있기 때문이다.
252
230
{{< /note >}}
253
231
232
+ # ## 다수의 익스텐션 포인트에 플러그인 적용하기 {#multipoint}
233
+
234
+ ` kubescheduler.config.k8s.io/v1beta3` 부터,
235
+ 다수의 익스텐션 포인트에 대해 플러그인을 쉽게 활성화하거나
236
+ 비활성화할 수 있게 하는 프로파일 환경 설정 `multiPoint` 가 추가되었다.
237
+ 이를 사용하여 사용자와 관리자가 커스텀 프로파일을 사용할 때 환경 설정을 간소화할 수 있다.
238
+
239
+ ` preScore` , `score`, `preFilter`, `filter` 익스텐션 포인트가 있는 `MyPlugin` 이라는 플러그인이 있다고 가정하자.
240
+ 모든 사용 가능한 익스텐션 포인트에 대해 `MyPlugin` 을 활성화하려면,
241
+ 다음과 같은 프로파일 환경 설정을 사용한다.
242
+
243
+ ` ` ` yaml
244
+ apiVersion: kubescheduler.config.k8s.io/v1beta3
245
+ kind: KubeSchedulerConfiguration
246
+ profiles:
247
+ - schedulerName: multipoint-scheduler
248
+ plugins:
249
+ multiPoint:
250
+ enabled:
251
+ - name: MyPlugin
252
+ ` ` `
253
+
254
+ 위의 예시는 아래와 같이 모든 익스텐션 포인트에 대해 `MyPlugin` 을 수동으로 활성화하는 것과
255
+ 동일한 효과를 갖는다.
256
+
257
+ ` ` ` yaml
258
+ apiVersion: kubescheduler.config.k8s.io/v1beta3
259
+ kind: KubeSchedulerConfiguration
260
+ profiles:
261
+ - schedulerName: non-multipoint-scheduler
262
+ plugins:
263
+ preScore:
264
+ enabled:
265
+ - name: MyPlugin
266
+ score:
267
+ enabled:
268
+ - name: MyPlugin
269
+ preFilter:
270
+ enabled:
271
+ - name: MyPlugin
272
+ filter:
273
+ enabled:
274
+ - name: MyPlugin
275
+ ` ` `
276
+
277
+ 여기서 `multiPoint` 를 사용했을 때의 이점은,
278
+ 추후 `MyPlugin` 이 다른 익스텐션 포인트에 대한 구현을 추가했을 때,
279
+ 새로운 익스텐션에 대해서도 `multiPoint` 환경 설정이 자동으로 활성화될 것이라는 점이다.
280
+
281
+ ` disabled` 필드를 사용하여, `MultiPoint` 확장으로부터 특정 익스텐션 포인트를 제외할 수 있다.
282
+ 기본 플러그인을 비활성화하거나, 기본이 아닌(non-default) 플러그인을 비활성화하거나,
283
+ 와일드카드(`'*'`)를 사용하여 모든 플러그인을 비활성화할 수 있다.
284
+ 다음은 `Score` 와 `PreScore` 에 대해 비활성화하는 예시이다.
285
+
286
+ ` ` ` yaml
287
+ apiVersion: kubescheduler.config.k8s.io/v1beta3
288
+ kind: KubeSchedulerConfiguration
289
+ profiles:
290
+ - schedulerName: non-multipoint-scheduler
291
+ plugins:
292
+ multiPoint:
293
+ enabled:
294
+ - name: 'MyPlugin'
295
+ preScore:
296
+ disabled:
297
+ - name: '*'
298
+ score:
299
+ disabled:
300
+ - name: '*'
301
+ ` ` `
302
+
303
+ ` v1beta3` 에서, `MultiPoint` 필드를 통해 내부적으로 모든 [기본 플러그인](#scheduling-plugins)이 활성화된다.
304
+ 그러나, 개별 익스텐션 포인트에 대해 기본값(예 : 순서, Score 가중치)을 유연하게 재설정하는 것도 여전히 가능하다.
305
+ 예를 들어, 2개의 Score 플러그인 `DefaultScore1` 과 `DefaultScore2` 가 있고
306
+ 각각의 가중치가 `1` 이라고 하자.
307
+ 이 때, 다음과 같이 가중치를 다르게 설정하여 순서를 바꿀 수 있다.
308
+
309
+ ` ` ` yaml
310
+ apiVersion: kubescheduler.config.k8s.io/v1beta3
311
+ kind: KubeSchedulerConfiguration
312
+ profiles:
313
+ - schedulerName: multipoint-scheduler
314
+ plugins:
315
+ score:
316
+ enabled:
317
+ - name: 'DefaultScore2'
318
+ weight: 5
319
+ ` ` `
320
+
321
+ 이 예제에서, 이 플러그인들을 `MultiPoint` 에 명시할 필요는 없는데,
322
+ 이는 이 플러그인들이 기본 플러그인이기 때문이다.
323
+ 그리고 `Score` 에는 `DefaultScore2` 플러그인만 명시되었다.
324
+ 이는 익스텐션 포인트를 명시하여 설정된 플러그인은 언제나 `MultiPoint` 플러그인보다 우선순위가 높기 때문이다.
325
+ 결론적으로, 위의 예시에서는 두 플러그인을 모두 명시하지 않고도 두 플러그인의 순서를 조정하였다.
326
+
327
+ ` MultiPoint` 플러그인을 설정할 때, 일반적인 우선 순위는 다음과 같다.
328
+ 1. 명시된 익스텐션 포인트가 먼저 실행되며, 여기에 명시된 환경 설정은 다른 모든 곳에 설정된 내용보다 우선한다.
329
+ 2. `MultiPoint` 및 플러그인 설정을 통해 수동으로 구성된 플러그인
330
+ 3. 기본 플러그인 및 기본 플러그인의 기본 설정
331
+
332
+ 위의 우선 순위를 설명하기 위해, 다음과 같은 예시를 가정한다.
333
+ | 플러그인 | 익스텐션 포인트 |
334
+ |---|---|
335
+ |`DefaultQueueSort`|`QueueSort`|
336
+ |`CustomQueueSort`|`QueueSort`|
337
+ |`DefaultPlugin1`|`Score`, `Filter`|
338
+ |`DefaultPlugin2`|`Score`|
339
+ |`CustomPlugin1`|`Score`, `Filter`|
340
+ |`CustomPlugin2`|`Score`, `Filter`|
341
+
342
+ 이들 플러그인에 대한 유효한 예시 환경 설정은 다음과 같다.
343
+
344
+ ` ` ` yaml
345
+ apiVersion: kubescheduler.config.k8s.io/v1beta3
346
+ kind: KubeSchedulerConfiguration
347
+ profiles:
348
+ - schedulerName: multipoint-scheduler
349
+ plugins:
350
+ multiPoint:
351
+ enabled:
352
+ - name: 'CustomQueueSort'
353
+ - name: 'CustomPlugin1'
354
+ weight: 3
355
+ - name: 'CustomPlugin2'
356
+ disabled:
357
+ - name: 'DefaultQueueSort'
358
+ filter:
359
+ disabled:
360
+ - name: 'DefaultPlugin1'
361
+ score:
362
+ enabled:
363
+ - name: 'DefaultPlugin2'
364
+ ` ` `
365
+
366
+ 명시한 익스텐션 포인트 내에 `MultiPoint` 플러그인을 재정의해도 에러가 발생하지 않음에 유의한다.
367
+ 명시한 익스텐션 포인트의 우선 순위가 더 높으므로,
368
+ 이 재정의는 무시되고 로그에만 기록된다.
369
+
370
+ 대부분의 환경 설정을 한 곳에서 관리하는 것 말고도, 이 예시는 다음과 같은 내용을 포함한다.
371
+ * 커스텀 `queueSort` 플러그인을 활성화하고 기존의 기본 플러그인을 비활성화한다
372
+ * `CustomPlugin1` 과 `CustomPlugin2` 플러그인을 활성화하며, 이 플러그인에 연결된 모든 익스텐션 포인트를 위해 이 플러그인들이 먼저 실행된다
373
+ * `filter` 에 대해서만 `DefaultPlugin1` 을 비활성화한다
374
+ * `score` 에 대해, `DefaultPlugin2` 플러그인이 (심지어 커스텀 플러그인보다도) 가장 먼저 실행되도록 순서를 조정한다
375
+
376
+ ` multiPoint` 필드가 없는 `v1beta3` 이전 버전의 환경 설정에서는, 위의 스니펫을 다음과 같이 표현할 수 있다.
377
+ ` ` ` yaml
378
+ apiVersion: kubescheduler.config.k8s.io/v1beta2
379
+ kind: KubeSchedulerConfiguration
380
+ profiles:
381
+ - schedulerName: multipoint-scheduler
382
+ plugins:
383
+
384
+ # 기본 QueueSort 플러그인을 비활성화한다
385
+ queueSort:
386
+ enabled:
387
+ - name: 'CustomQueueSort'
388
+ disabled:
389
+ - name: 'DefaultQueueSort'
390
+
391
+ # 커스텀 Filter 플러그인을 활성화한다
392
+ filter:
393
+ enabled:
394
+ - name: 'CustomPlugin1'
395
+ - name: 'CustomPlugin2'
396
+ - name: 'DefaultPlugin2'
397
+ disabled:
398
+ - name: 'DefaultPlugin1'
399
+
400
+ # 커스텀 score 플러그인을 활성화하고 순서를 조정한다
401
+ score:
402
+ enabled:
403
+ - name: 'DefaultPlugin2'
404
+ weight: 1
405
+ - name: 'DefaultPlugin1'
406
+ weight: 3
407
+ ` ` `
408
+
409
+ 다소 복잡한 예시를 통해, 익스텐션 포인트를 설정함에 있어서 `MultiPoint` 환경 설정의 유연성과
410
+ 기존 방법과의 끊김없는 통합을 확인할 수 있다.
411
+
254
412
# # 스케줄러 설정 전환
255
413
256
414
{{< tabs name="tab_with_md" >}}
@@ -284,14 +442,20 @@ profiles:
284
442
285
443
* v1beta2 설정 파일에서 활성화된 플러그인은 해당 플러그인의 기본 설정값보다 v1beta2 설정 파일의 값이 우선 적용된다.
286
444
287
- * 스케줄러 healthz와 metrics 바인드 주소에 대해 `host` 또는 `port`가 잘못 설정되면 검증 실패를 유발한다.
445
+ * 스케줄러 healthz와 metrics 바인드 주소에 대해 `host` 또는 `port` 가 잘못 설정되면 검증 실패를 유발한다.
446
+ {{% /tab %}}
288
447
448
+ {{% tab name="v1beta2 → v1beta3" %}}
449
+ * 세 플러그인의 가중치 기본값이 다음과 같이 증가한다.
450
+ * `InterPodAffinity`: 1 에서 2 로
451
+ * `NodeAffinity`: 1 에서 2 로
452
+ * `TaintToleration`: 1 에서 3 으로
289
453
{{% /tab %}}
290
454
{{< /tabs >}}
291
455
292
456
# # {{% heading "whatsnext" %}}
293
457
294
458
* [kube-scheduler 레퍼런스](/docs/reference/command-line-tools-reference/kube-scheduler/) 읽어보기
295
459
* [스케줄링](/ko/docs/concepts/scheduling-eviction/kube-scheduler/)에 대해 알아보기
296
- * [kube-scheduler 설정 (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/) 레퍼런스 읽어보기
297
460
* [kube-scheduler 설정 (v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/) 레퍼런스 읽어보기
461
+ * [kube-scheduler 설정 (v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/) 레퍼런스 읽어보기
0 commit comments