๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[DevOps]/Kubernetes

kubernetes - ๋…ธ๋“œ์™€ ํŒŒ๋“œ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ์ œ์–ด ๊ธฐ์ˆ (Taint, Toleration, Node Selector, Node Affinity)

by ํŒกํŽ‘ํ 2023. 11. 23.
728x90

๐Ÿ“Œ Taint & Toleration

  • ์‰ฝ๊ฒŒ ๋งํ•ด ๋…ธ๋“œ์™€ ํŒŒ๋“œ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ œ์–ดํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
  • Taint์™€ Toleration์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋…ธ๋“œ์—๋งŒ ํŠน์ • ์œ ํ˜•์˜ ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ํŠน์ •ํ•œ ์—ญํ• ์„ ๊ฐ€์ง„ ๋…ธ๋“œ์—๋งŒ ํŠน์ •ํ•œ ์œ ํ˜•์˜ ํŒŒ๋“œ๋ฅผ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜, ๋…ธ๋“œ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋ง๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๐Ÿ“Œ Taint

  • ๋…ธ๋“œ์— ํŠน์ •ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•œ๋‹ค.
  • ์ฃผ๋กœ ๋…ธ๋“œ์— ํŠน์ •ํ•œ ์ƒํ™ฉ์ด๋‚˜ ์ œ์•ฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ๋…ธ๋“œ์—๋Š” ํŠน์ •ํ•œ ์œ ํ˜•์˜ ํŒŒ๋“œ๋งŒ ์Šค์ผ€์ค„๋งํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ•ด๋‹น ๋…ธ๋“œ์— Taint๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํŒŒ๋“œ๊ฐ€ ํ•ด๋‹น ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Kubectl taint nodes <nodeName> key=value:<taintEffect>

 

๐Ÿ’ก taint-effect

NoSchedule

  • Taint๊ฐ€ ์„ค์ •๋œ ๋…ธ๋“œ์— ํ•ด๋‹น toleration์ด ์—†๋Š” ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•  ์ˆ˜ ์—†๋„๋ก ๋ง‰๋Š” ์˜ต์…˜์ด๋‹ค.
  • ๋งŒ์•ฝ ๋…ธ๋“œ์— NoSchedule Taint๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋…ธ๋“œ์—๋Š” ํŒŒ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์Šค์ผ€์ค„๋ง๋˜์ง€ ์•Š๋Š”๋‹ค.

PreferNoSchedule

  • Taint๊ฐ€ ์„ค์ •๋œ ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ธด ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋…ธ๋“œ(Taint๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€)๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๊ณ ๋ คํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.
    • ์ฆ‰, ํŒŒ๋“œ๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง๋˜์ง€๋งŒ, ํ•ด๋‹น ๋…ธ๋“œ์—๋งŒ ์Šค์ผ€์ค„๋ง์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋Œ€๋กœ ์Šค์ผ€์ค„๋ง๋œ๋‹ค.
  • ํŠน์ • ๋…ธ๋“œ๋ฅผ ํ”ผํ•˜๊ณ ์ž ํ•˜์ง€๋งŒ, ์–ด์ฉ” ์ˆ˜ ์—†์„ ๋•Œ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

NoExecute

  • Taint๊ฐ€ ์„ค์ •๋œ ๋…ธ๋“œ์— ์ด๋ฏธ ์Šค์ผ€์ค„๋ง๋˜์–ด ์žˆ๋Š” ํŒŒ๋“œ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ๋Š” ์˜ต์…˜์ด๋‹ค.
  • NoExecute Taint๊ฐ€ ์„ค์ •๋œ ๋…ธ๋“œ์— ํŒŒ๋“œ๊ฐ€ ์ด๋ฏธ ์Šค์ผ€์ค„๋ง๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ๋…ธ๋“œ์—์„œ Taint๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ํŒŒ๋“œ๋“ค์€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ์ด๋Š” ๋…ธ๋“œ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ํŒŒ๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ด๋™์‹œํ‚ค๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿงน taint ์ œ๊ฑฐ

kubectl taint nodes controlplane node-role.kubernetes.io/control-plane:NoSchedule-

์œ„ ๋ช…๋ น์–ด์™€ ๊ฐ™์ด '-'๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์œผ๋กœ taint๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ Toleration

  • ํŒŒ๋“œ๊ฐ€ ํŠน์ •ํ•œ Taint๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • Toleration์„ ์„ค์ •ํ•œ ํŒŒ๋“œ๋Š” ํ•ด๋‹น Taint๊ฐ€ ์„ค์ •๋œ ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง๋  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ํŒŒ๋“œ์˜ ์ŠคํŽ™์— tolerations ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์‹œ

  • key: ๋ง ๊ทธ๋Œ€๋กœ key์ด๋‹ค.
  • value: ๋ง๊ทธ๋Œ€๋กœ value์ด๋‹ค.
  • effect: ์œ„์˜ taint-effect๋ฅผ ๋งํ•œ๋‹ค.

operator

  • "Equal" ์—ฐ์‚ฐ์ž (=): Tolerations์˜ ํ‚ค-๊ฐ’ ์Œ๊ณผ ๋…ธ๋“œ์˜ Taint์˜ ํ‚ค-๊ฐ’ ์Œ์ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŒŒ๋“œ๋ฅผ ํ•ด๋‹น ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋งํ•œ๋‹ค.
  • "Exists" ์—ฐ์‚ฐ์ž (Exists): Tolerations์˜ ํ‚ค-๊ฐ’ ์Œ๊ณผ ๋…ธ๋“œ์˜ Taint์˜ ํ‚ค๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŒŒ๋“œ๋ฅผ ํ•ด๋‹น ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • "DoesNotExist" ์—ฐ์‚ฐ์ž (DoesNotExist): Tolerations์˜ ํ‚ค๊ฐ€ ๋…ธ๋“œ์˜ ์–ด๋–ค Taint์™€๋„ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŒŒ๋“œ๋ฅผ ํ•ด๋‹น ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋งํ•œ๋‹ค.

 

๐Ÿ“Œ Node Selector & Node Affinity

  • ํŒŒ๋“œ๊ฐ€ ํŠน์ • ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋“œ ์„ ํƒ์— ์ œํ•œ์„ ๋‘๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๐Ÿ“Œ Node Selector

  • ํŒŒ๋“œ๊ฐ€ ์–ด๋–ค ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง๋ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋…ธ๋“œ์˜ ๋ ˆ์ด๋ธ”(Label)๊ณผ ์ผ์น˜ํ•˜๋Š” ์กฐ๊ฑด์„ ์ง€์ •ํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, "env=production"์ด๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ๋…ธ๋“œ์—๋งŒ ํŒŒ๋“œ๋ฅผ ํ• ๋‹นํ•˜๊ณ ์ž ํ•  ๋•Œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ ˆ์ด๋ธ”์„ ํŒŒ๋“œ์˜ spec.nodeSelector์˜ ํ•˜์œ„์— ์ž…๋ ฅํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ’ก ๋…ธ๋“œ์— Label์„ ์ ์šฉํ•˜๊ธฐ

kubectl label nodes <node-name> <label-key>=<label-value>

 

 

๐Ÿ“Œ Node Affinity

  • ํŒŒ๋“œ๊ฐ€ ํŠน์ • ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง๋˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • Node Selector๋ณด๋‹ค ๋” ์œ ์—ฐํ•œ ์Šค์ผ€์ค„๋ง ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

operator

"In" ์—ฐ์‚ฐ์ž

  • key์™€ ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ ๋ ˆ์ด๋ธ”์˜ ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์— ์กฐ๊ฑด์ด ์ถฉ์กฑ๋œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด size: ["small", "medium"]๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ณ ์ž ํ•  ๋•Œ operator: In์„ ์‚ฌ์šฉํ•˜๋ฉด size์˜ ๊ฐ’์ด "small" ๋˜๋Š” "medium"์ธ ๋…ธ๋“œ์—๋งŒ ํŒŒ๋“œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

"NotIn" ์—ฐ์‚ฐ์ž

  • key์™€ ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ ๋ ˆ์ด๋ธ”์˜ ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์กฐ๊ฑด์ด ์ถฉ์กฑ๋œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด size: ["large", "x-large"]๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์—†๋Š” ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ณ ์ž ํ•  ๋•Œ operator: NotIn์„ ์‚ฌ์šฉํ•˜๋ฉด size ํ‚ค์˜ ๊ฐ’์ด "medium"์ด๋‚˜ "small" ๋“ฑ "large" ๋˜๋Š” "x-large"์ด ์•„๋‹Œ ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ๋…ธ๋“œ์—๋งŒ ํŒŒ๋“œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

"Exists" ์—ฐ์‚ฐ์ž

  • key์™€ ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ ๋ ˆ์ด๋ธ”์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์— ์กฐ๊ฑด์ด ์ถฉ์กฑ๋œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, size๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ณ ์ž ํ•  ๋•Œ operator: Exists๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด size ๋ ˆ์ด๋ธ”์ด ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ์—๋งŒ ํŒŒ๋“œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

"DoesNotExist" ์—ฐ์‚ฐ์ž

  • key์™€ ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ ๋ ˆ์ด๋ธ”์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์กฐ๊ฑด์ด ์ถฉ์กฑ๋œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, size๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์—†๋Š” ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ณ ์ž ํ•  ๋•Œ operator: DoesNotExist๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด size๋ ˆ์ด๋ธ”์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ์—๋งŒ ํŒŒ๋“œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก Node Affinity์˜ ์„ธ ๊ฐ€์ง€ ์œ ํ˜•

  • ์•„๋ž˜์˜ ์„ธ ์œ ํ˜•์„ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ์— ํŒŒ๋“œ๋ฅผ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋…ธ๋“œ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

requiredDuringSchedulingIgnoredDuringExecution

  • ํŒŒ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋ง๋  ๋•Œ ๋ฐ˜๋“œ์‹œ ์ง€์ •๋œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋…ธ๋“œ์— ํ• ๋‹น๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ์Šค์ผ€์ค„๋ง ๋‹จ๊ณ„์—์„œ๋งŒ Node Affinity๋ฅผ ๊ณ ๋ คํ•˜๋ฉฐ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํŒŒ๋“œ๋Š” ๋ฌด์‹œํ•œ๋‹ค.

preferredDuringSchedulingIgnoredDuringExecution

  • ํŒŒ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋ง๋  ๋•Œ ์ง€์ •๋œ ์กฐ๊ฑด์„ ๊ฐ€์ง„ ๋…ธ๋“œ์— ๊ฐ€๋Šฅํ•œ ํ•œ ํ• ๋‹น๋˜๋„๋ก ํ•œ๋‹ค.
    • ํ•ด๋‹น ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ์— ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์Šค์ผ€์ค„๋ง ๋‹จ๊ณ„์—์„œ๋Š” ์„ ํ˜ธ๋„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์Šค์ผ€์ค„๋ง ํ•˜์ง€๋งŒ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํŒŒ๋“œ๋Š” ๋ฌด์‹œํ•œ๋‹ค.

requiredDuringSchedulingRequiredDuringExecution

  • ํŒŒ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋ง๋  ๋•Œ ์ง€์ •๋œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋…ธ๋“œ์— ํ• ๋‹น๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ์‹คํ–‰ ์ค‘์ธ ํŒŒ๋“œ๋„ ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋…ธ๋“œ์—์„œ ๊ณ„์† ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. 
    • ๋งŒ์•ฝ, ์‹คํ–‰์ค‘์ธ ํŒŒ๋“œ๊ฐ€ ํ•ด๋‹น ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋…ธ๋“œ์—์„œ ํ‡ด์ถœ๋‹นํ•œ๋‹ค.

 

 

 

์ถœ์ฒ˜

๋คผํŠผ

Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests

https://velog.io/@pinion7/Kubernetes-Pod-๋ฐฐ์น˜์ „๋žต-Taint์™€-Toleration์—-๋Œ€ํ•ด-์ดํ•ดํ•˜๊ณ -์‹ค์Šตํ•ด๋ณด๊ธฐ

728x90