KR_K8s_Scheduling - somaz94/DevOps-Engineer GitHub Wiki

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณ ๊ธ‰ ์Šค์ผ€์ค„๋ง (Q46-Q50)

๊ณ ๊ธ‰ ์Šค์ผ€์ค„๋ง (46~50๋ฒˆ)


Q46. Pod Priority์™€ Preemption์˜ ์‹ค๋ฌด ์ ์šฉ ์ „๋žต์€?

Pod Priority๋Š” ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ ์‹œ ์–ด๋–ค Pod๋ฅผ ๋จผ์ € ์ข…๋ฃŒํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

PriorityClass ์ •์˜:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
description: "Critical system pods"

์šฐ์„ ์ˆœ์œ„ ์ „๋žต:

  • System-critical(1์–ต): kube-system ์ปดํฌ๋„ŒํŠธ
  • Production-high(100๋งŒ): ํ•ต์‹ฌ ์„œ๋น„์Šค
  • Production-normal(10๋งŒ): ์ผ๋ฐ˜ ์„œ๋น„์Šค
  • Best-effort(0): ๋ฐฐ์น˜ ์ž‘์—…

Preemption(์„ ์ )์€ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ Pod๋ฅผ ์œ„ํ•ด ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ Pod๋ฅผ ์ถ•์ถœํ•œ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ: PDB์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๊ณผ๋„ํ•œ Preemption ๋ฐฉ์ง€, preemptionPolicy: Never๋กœ ์„ ์  ๋น„ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ, ๋ฆฌ์†Œ์Šค ํ• ๋‹น๋Ÿ‰๊ณผ ์กฐํ•ฉํ•˜์—ฌ ๊ณต์ •์„ฑ ๋ณด์žฅ.


Q47. Topology Spread Constraints vs Pod Anti-Affinity ์„ ํƒ ๊ธฐ์ค€์€?

๋‘ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋ชจ๋‘ Pod ๋ถ„์‚ฐ์„ ์ œ์–ดํ•˜์ง€๋งŒ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค.

Pod Anti-Affinity:

  • ํŠน์ • Label Pod์™€ ๊ฐ™์€ ๋…ธ๋“œ/AZ์— ๋ฐฐ์น˜๋˜์ง€ ์•Š๋„๋ก ์ œํ•œ, ์ด์ง„๋ฒ•์ (๋ฐฐ์น˜ ๊ฐ€๋Šฅ/๋ถˆ๊ฐ€๋Šฅ), ์—„๊ฒฉํ•œ ๋ถ„๋ฆฌ.

Topology Spread Constraints:

  • Pod๋ฅผ ํ† ํด๋กœ์ง€ ๋„๋ฉ”์ธ(๋…ธ๋“œ/AZ/๋ฆฌ์ „)์— ๊ท ๋“ฑ ๋ถ„์‚ฐ, maxSkew๋กœ ๋ถˆ๊ท ํ˜• ํ—ˆ์šฉ ๋ฒ”์œ„ ์„ค์ •, ์œ ์—ฐํ•œ ๋ถ„์‚ฐ.
topologySpreadConstraints:
- maxSkew: 1
  topologyKey: topology.kubernetes.io/zone
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app: web

์„ ํƒ ๊ธฐ์ค€: ์ ˆ๋Œ€์  ๋ถ„๋ฆฌ(DB Primary/Replica)๋Š” Anti-Affinity, ๊ท ๋“ฑ ๋ถ„์‚ฐ(Stateless ์•ฑ)์€ Topology Spread, ๋ฉ€ํ‹ฐ AZ ๊ณ ๊ฐ€์šฉ์„ฑ์€ Topology Spread with maxSkew=1.


Q48. Node์˜ Taint Effect(NoSchedule/PreferNoSchedule/NoExecute) ์ฐจ์ด์™€ ํ™œ์šฉ์€?

Taint๋Š” ๋…ธ๋“œ์— ์„ค์ •ํ•˜์—ฌ ํŠน์ • Pod๋งŒ ์Šค์ผ€์ค„๋˜๋„๋ก ์ œํ•œํ•œ๋‹ค.

Effect ์ข…๋ฅ˜:

NoSchedule:

  • Toleration ์—†๋Š” Pod๋Š” ์Šค์ผ€์ค„ ์•ˆ ๋จ, ๊ธฐ์กด Pod๋Š” ์˜ํ–ฅ ์—†์Œ, ์‹ ๊ทœ ์›Œํฌ๋กœ๋“œ ์ฐจ๋‹จ.

PreferNoSchedule:

  • ๊ฐ€๋Šฅํ•˜๋ฉด ์Šค์ผ€์ค„ ์•ˆ ํ•˜์ง€๋งŒ ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ ์‹œ ํ—ˆ์šฉ, ์†Œํ”„ํŠธ ์ œ์•ฝ, ์šฐ์„ ์ˆœ์œ„ ๋‚ฎ์€ ์›Œํฌ๋กœ๋“œ.

NoExecute:

  • ๊ธฐ์กด Pod๋„ ์ถ•์ถœ, Toleration ์—†์œผ๋ฉด ์ฆ‰์‹œ ์ข…๋ฃŒ, tolerationSeconds๋กœ ์œ ์˜ˆ ์‹œ๊ฐ„ ์„ค์ •, ๋…ธ๋“œ ์œ ์ง€๋ณด์ˆ˜ ์‹œ ์‚ฌ์šฉ.

์‹ค๋ฌด ํ™œ์šฉ:

# GPU ๋…ธ๋“œ์— Taint ์„ค์ •
kubectl taint nodes gpu-node nvidia.com/gpu=true:NoSchedule

# ์œ ์ง€๋ณด์ˆ˜ ๋ชจ๋“œ
kubectl taint nodes node-1 maintenance=true:NoExecute

Spot ์ธ์Šคํ„ด์Šค๋Š” NoSchedule, ์žฅ์•  ๋…ธ๋“œ๋Š” NoExecute, ํŠน์ˆ˜ ํ•˜๋“œ์›จ์–ด(GPU/ARM)๋Š” Taint + Toleration ์กฐํ•ฉ.


Q49. Scheduler Profile๊ณผ Multiple Schedulers ํ™œ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š”?

Kubernetes๋Š” ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ ์™ธ์— ์ปค์Šคํ…€ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

Scheduler Profile:

  • ํ•˜๋‚˜์˜ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์—ฌ๋Ÿฌ ํ”„๋กœํŒŒ์ผ ์ œ๊ณต, ํ”Œ๋Ÿฌ๊ทธ์ธ ์กฐํ•ฉ์œผ๋กœ ๋‹ค๋ฅธ ์Šค์ผ€์ค„๋ง ๋กœ์ง ๊ตฌํ˜„.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
- schedulerName: no-scoring-scheduler
  plugins:
    score:
      disabled:
      - name: '*'

Multiple Schedulers:

  • ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ์Šค์ผ€์ค„๋Ÿฌ ๋ฐฐํฌ, ML ์›Œํฌ๋กœ๋“œ์šฉ GPU ์ตœ์ ํ™” ์Šค์ผ€์ค„๋Ÿฌ, ๋ฐฐ์น˜ ์ž‘์—…์šฉ ๋นˆํŒจํ‚น ์Šค์ผ€์ค„๋Ÿฌ.

Pod์—์„œ schedulerName ์ง€์ •ํ•˜์—ฌ ์„ ํƒ.

์‹ค๋ฌด: ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ๋กœ ๋Œ€๋ถ€๋ถ„ ์ฒ˜๋ฆฌ, ํŠน์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ(Volcano for Batch, Yunikorn for Multi-tenancy)๋งŒ ๋ณ„๋„ ์Šค์ผ€์ค„๋Ÿฌ ์‚ฌ์šฉ.


Q50. Large Scale ํด๋Ÿฌ์Šคํ„ฐ(1000+ ๋…ธ๋“œ)์—์„œ์˜ ์„ฑ๋Šฅ ํŠœ๋‹ ํฌ์ธํŠธ๋Š”?

๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ๋Š” API Server, etcd, Scheduler ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

API Server ํŠœ๋‹:

  • --max-requests-inflight ์ฆ๊ฐ€(400 โ†’ 800), --max-mutating-requests-inflight ์ฆ๊ฐ€(200 โ†’ 400), API Priority and Fairness ํ™œ์šฉ, ์ฝ๊ธฐ ์ „์šฉ ์ฟผ๋ฆฌ๋Š” ์บ์‹œ ์‚ฌ์šฉ.

etcd ํŠœ๋‹:

  • SSD ํ•„์ˆ˜, --quota-backend-bytes=8GB, Compaction ์ž๋™ํ™”, ๋ณ„๋„ ๋ฌผ๋ฆฌ ์„œ๋ฒ„ ๋ฐฐ์น˜, 5๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ํ™•์žฅ.

Scheduler ํŠœ๋‹:

  • --kube-api-qps, --kube-api-burst ์ฆ๊ฐ€, Informer cache ์ตœ์ ํ™”, IPVS ๋ชจ๋“œ ์‚ฌ์šฉ(iptables ๋Œ€์‹ ).

๊ธฐํƒ€:

  • Node lease ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ heartbeat ์ตœ์ ํ™”, CoreDNS ์บ์‹œ ์ฆ๊ฐ€ ๋ฐ replicas ์ฆ๊ฐ€, Webhook ํƒ€์ž„์•„์›ƒ ๋‹จ์ถ•, ResourceQuota๋กœ ํญํƒ„ ๋ฐฐํฌ ๋ฐฉ์ง€.

Prometheus๋กœ apiserver_request_duration_seconds, etcd_disk_backend_commit_duration_seconds ๋ชจ๋‹ˆํ„ฐ๋ง.

๐Ÿ’ก ์šฉ์–ด ์„ค๋ช…:



โš ๏ธ **GitHub.com Fallback** โš ๏ธ