Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Assigning Pods to Nodes
๋ ธ๋์ ํ๋ ํ ๋นํ๊ธฐ
ํน์ ํ ๋ ธ๋(๋ค) ์งํฉ์์๋ง ๋์ํ๊ฑฐ๋ ํน์ ํ ๋ ธ๋ ์งํฉ์์ ๋์ํ๋ ๊ฒ์ ์ ํธํ๋๋ก ํ๋๋ฅผ ์ ํํ ์ ์๋ค. ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ผ๋ฉฐ ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์ ๋ชจ๋ ๋ ์ด๋ธ ์ ๋ ํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ์ ์ฉ์ดํ๊ฒ ํ๋ค. ๋ณดํต์ ์ค์ผ์ค๋ฌ๊ฐ ์๋์ผ๋ก ํฉ๋ฆฌ์ ์ธ ๋ฐฐ์น(์: ์์์ด ๋ถ์กฑํ ๋ ธ๋์ ํ๋๋ฅผ ๋ฐฐ์นํ์ง ์๋๋ก ๋ ธ๋ ๊ฐ์ ํ๋๋ฅผ ๋ถ๋ฐฐ)๋ฅผ ์ํํ๊ธฐ์ ์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ ํ์๋ ์๋ค. ๊ทธ๋ฌ๋, ์๋ฅผ ๋ค์ด SSD๊ฐ ์ฅ์ฐฉ๋ ๋จธ์ ์ ํ๋๊ฐ ๋ฐฐํฌ๋๋๋ก ํ๊ฑฐ๋ ๋๋ ๋ง์ ํต์ ์ ํ๋ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์๋น์ค์ ํ๋๋ฅผ ๋์ผํ ๊ฐ์ฉ์ฑ ์์ญ(availability zone)์ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ๊ฐ์ด, ํ๋๊ฐ ์ด๋ ๋ ธ๋์ ๋ฐฐํฌ๋ ์ง๋ฅผ ์ ์ดํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํน์ ํ๋๋ฅผ ์ด๋ ๋ ธ๋์ ์ค์ผ์ค๋งํ ์ง ๊ณ ๋ฅด๋ ๋ค์์ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ๊ณจ๋ผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ ธ๋ ๋ ์ด๋ธ์ ๋งค์นญ๋๋ nodeSelector ํ๋
- ์ดํผ๋ํฐ / ์ํฐ ์ดํผ๋ํฐ
- nodeName ํ๋
- ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด
๋ ธ๋ ๋ ์ด๋ธ
๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ ธ๋๋ ๋ ์ด๋ธ์ ๊ฐ์ง๋ค. ๋ ์ด๋ธ์ ์๋์ผ๋ก ์ถ๊ฐํ ์ ์๋ค. ๋ํ ์ฟ ๋ฒ๋คํฐ์ค๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์ ํ์คํ๋ ๋ ์ด๋ธ ์งํฉ์ ์ ์ฉํ๋ค. ์ ์๋ ค์ง ๋ ์ด๋ธ, ์ด๋ ธํ ์ด์ , ํ ์ธํธ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ ธ๋ ๋ ์ด๋ธ์ ๋ชฉ๋ก์ ํ์ธํ๋ค.
์ฐธ๊ณ :
์ด๋ฌํ ๋ ์ด๋ธ์ ๋ํ ๊ฐ์ ํด๋ผ์ฐ๋ ์ ๊ณต์๋ณ๋ก ๋ค๋ฅด๋ฉฐ ์ ํํ์ง ์์ ์ ์๋ค. ์๋ฅผ ๋ค์ด,kubernetes.io/hostname
์ ๋ํ ๊ฐ์ ํน์ ํ๊ฒฝ์์๋ ๋
ธ๋ ์ด๋ฆ๊ณผ ๋์ผํ ์ ์์ง๋ง
๋ค๋ฅธ ํ๊ฒฝ์์๋ ๋ค๋ฅธ ๊ฐ์ผ ์๋ ์๋ค.๋ ธ๋ ๊ฒฉ๋ฆฌ/์ ํ
๋ ธ๋์ ๋ ์ด๋ธ์ ์ถ๊ฐํ์ฌ ํ๋๋ฅผ ํน์ ๋ ธ๋ ๋๋ ๋ ธ๋ ๊ทธ๋ฃน์ ์ค์ผ์ค๋ง๋๋๋ก ์ง์ ํ ์ ์๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ํน์ ํ๋๊ฐ ํน์ ๊ฒฉ๋ฆฌ/๋ณด์/๊ท์ ์์ฑ์ ๋ง์กฑํ๋ ๋ ธ๋์์๋ง ์คํ๋๋๋ก ํ ์ ์๋ค.
๋ ธ๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ํด ๋ ์ด๋ธ์ ์ฌ์ฉํ ๋, kubelet์ด ๋ณ๊ฒฝํ ์ ์๋ ๋ ์ด๋ธ ํค๋ฅผ ์ ํํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด kubelet์ด ํด๋น ๋ ์ด๋ธ์ ๋ณ๊ฒฝํ์ฌ ๋ ธ๋๊ฐ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ(compromised) ์ํ๋ก ๋น ์ง๊ณ ์ค์ผ์ค๋ฌ๊ฐ ์ด ๋ ธ๋์ ์ํฌ๋ก๋๋ฅผ ์ค์ผ์ค๋งํ๋ ์ผ์ด ๋ฐ์ํ ์ ์๋ค.
NodeRestriction
์ด๋๋ฏธ์
ํ๋ฌ๊ทธ์ธ์
kubelet์ด node-restriction.kubernetes.io/
์ ๋์ฌ๋ฅผ ๊ฐ๋ ๋ ์ด๋ธ์
์ค์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ํ๋ค.
๋ ธ๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ํด ๋ ์ด๋ธ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด,
- ๋
ธ๋ ์ธ๊ฐ์(authorizer)๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ
NodeRestriction
์ด๋๋ฏธ์ ํ๋ฌ๊ทธ์ธ์ ํ์ฑํ ํ๋์ง ํ์ธํ๋ค. - ๋
ธ๋์
node-restriction.kubernetes.io/
์ ๋์ฌ๋ฅผ ๊ฐ๋ ๋ ์ด๋ธ์ ์ถ๊ฐํ๊ณ , ๋ ธ๋ ์ ๋ ํฐ์์ ํด๋น ๋ ์ด๋ธ์ ์ฌ์ฉํ๋ค. ์:example.com.node-restriction.kubernetes.io/fips=true
๋๋example.com.node-restriction.kubernetes.io/pci-dss=true
๋ ธ๋์ ๋ ํฐ(nodeSelector)
nodeSelector
๋ ๋
ธ๋ ์ ํ ์ ์ฝ์ฌํญ์ ๊ฐ์ฅ ๊ฐ๋จํ๋ฉด์๋ ์ถ์ฒํ๋ ํํ์ด๋ค.
ํ๋ ์คํ์ nodeSelector
ํ๋๋ฅผ ์ถ๊ฐํ๊ณ ,
ํ๊ฒ์ผ๋ก ์ผ๊ณ ์ถ์ ๋
ธ๋๊ฐ ๊ฐ๊ณ ์๋ ๋
ธ๋ ๋ ์ด๋ธ์ ๋ช
์ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ์ฌ์ฉ์๊ฐ ๋ช
์ํ ๋ ์ด๋ธ์ ๊ฐ๊ณ ์๋ ๋
ธ๋์๋ง
ํ๋๋ฅผ ์ค์ผ์ค๋งํ๋ค.
๋ ธ๋์ ํ๋ ํ ๋น์์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ํ์ธํ๋ค.
์ดํผ๋ํฐ(affinity)์ ์ํฐ-์ดํผ๋ํฐ(anti-affinity)
nodeSelector
๋ ํ๋๋ฅผ ํน์ ๋ ์ด๋ธ์ด ์๋ ๋
ธ๋๋ก ์ ํํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค.
์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ ๊ธฐ๋ฅ์ ํํํ ์ ์๋ ์ ์ฝ ์ข
๋ฅ๋ฅผ ํฌ๊ฒ ํ์ฅํ๋ค.
์ฃผ์ ๊ฐ์ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ ์ธ์ด๊ฐ ๋ ํํ์ ์ด๋ค.
nodeSelector
๋ก๋ ๋ช ์ํ ๋ ์ด๋ธ์ด ์๋ ๋ ธ๋๋ง ์ ํํ ์ ์๋ค. ์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ๋ ์ ํ ๋ก์ง์ ๋ํ ์ข ๋ ๋ง์ ์ ์ด๊ถ์ ์ ๊ณตํ๋ค. - ๊ท์น์ด "์ํํธ(soft)" ๋๋ "์ ํธ์ฌํญ(preference)" ์์ ๋ํ๋ผ ์ ์์ผ๋ฉฐ, ์ด ๋๋ถ์ ์ค์ผ์ค๋ฌ๋ ๋งค์น๋๋ ๋ ธ๋๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ ํ๋๋ฅผ ์ค์ผ์ค๋งํ ์ ์๋ค.
- ๋ค๋ฅธ ๋ ธ๋ (๋๋ ๋ค๋ฅธ ํ ํด๋ก์ง ๋๋ฉ์ธ)์์ ์คํ ์ค์ธ ๋ค๋ฅธ ํ๋์ ๋ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ํ๋๋ฅผ ์ ํํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ด๋ค ํ๋๋ค์ด ๋ ธ๋์ ํจ๊ป ์์นํ ์ ์๋์ง์ ๋ํ ๊ท์น์ ์ ์ํ ์ ์๋ค.
์ดํผ๋ํฐ ๊ธฐ๋ฅ์ ๋ค์์ ๋ ๊ฐ์ง ์ข ๋ฅ๋ก ๊ตฌ์ฑ๋๋ค.
- ๋
ธ๋ ์ดํผ๋ํฐ ๊ธฐ๋ฅ์
nodeSelector
ํ๋์ ๋น์ทํ์ง๋ง ๋ ํํ์ ์ด๊ณ ์ํํธ(soft) ๊ท์น์ ์ง์ ํ ์ ์๊ฒ ํด ์ค๋ค. - ํ๋ ๊ฐ ์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ ๋ ๋ค๋ฅธ ํ๋์ ๋ ์ด๋ธ์ ์ด์ฉํ์ฌ ํด๋น ํ๋๋ฅผ ์ ํํ ์ ์๊ฒ ํด ์ค๋ค.
๋ ธ๋ ์ดํผ๋ํฐ
๋
ธ๋ ์ดํผ๋ํฐ๋ ๊ฐ๋
์ ์ผ๋ก nodeSelector
์ ๋น์ทํ๋ฉฐ,
๋
ธ๋์ ๋ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋๊ฐ ์ค์ผ์ค๋ง๋ ์ ์๋ ๋
ธ๋๋ฅผ ์ ํํ ์ ์๋ค.
๋
ธ๋ ์ดํผ๋ํฐ์๋ ๋ค์์ ๋ ์ข
๋ฅ๊ฐ ์๋ค.
requiredDuringSchedulingIgnoredDuringExecution
: ๊ท์น์ด ๋ง์กฑ๋์ง ์์ผ๋ฉด ์ค์ผ์ค๋ฌ๊ฐ ํ๋๋ฅผ ์ค์ผ์ค๋งํ ์ ์๋ค. ์ด ๊ธฐ๋ฅ์nodeSelector
์ ์ ์ฌํ์ง๋ง, ์ข ๋ ํํ์ ์ธ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ค.preferredDuringSchedulingIgnoredDuringExecution
: ์ค์ผ์ค๋ฌ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ธ๋๋ฅผ ์ฐพ์ผ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค. ํด๋น๋๋ ๋ ธ๋๊ฐ ์๋๋ผ๋, ์ค์ผ์ค๋ฌ๋ ์ฌ์ ํ ํ๋๋ฅผ ์ค์ผ์ค๋งํ๋ค.
์ฐธ๊ณ :
์์ ๋ ์ ํ์์,IgnoredDuringExecution
๋
์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํ๋๋ฅผ ์ค์ผ์ค๋งํ ๋ค์ ๋
ธ๋ ๋ ์ด๋ธ์ด ๋ณ๊ฒฝ๋์ด๋ ํ๋๋ ๊ณ์ ํด๋น ๋
ธ๋์์ ์คํ๋จ์ ์๋ฏธํ๋ค.ํ๋ ์คํ์ .spec.affinity.nodeAffinity
ํ๋์
๋
ธ๋ ์ดํผ๋ํฐ๋ฅผ ๋ช
์ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ํ๋ ์คํ์ด ์๋ค๊ณ ํ์.
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- antarctica-east1
- antarctica-west1
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
containers:
- name: with-node-affinity
image: registry.k8s.io/pause:2.0
์ด ์์์์๋ ๋ค์์ ๊ท์น์ด ์ ์ฉ๋๋ค.
- ๋
ธ๋๋ ํค๊ฐ
topology.kubernetes.io/zone
์ธ ๋ ์ด๋ธ์ ๊ฐ๊ณ ์์ด์ผ ํ๋ฉฐ, ๋ ์ด๋ธ์ ๊ฐ์ดantarctica-east1
ํน์antarctica-west1
์ฌ์ผ ํ๋ค. - ํค๊ฐ
another-node-label-key
์ด๊ณ ๊ฐ์ดanother-node-label-value
์ธ ๋ ์ด๋ธ์ ๊ฐ๊ณ ์๋ ๋ ธ๋๋ฅผ ์ ํธํ๋ค .
operator
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ
์ฟ ๋ฒ๋คํฐ์ค๊ฐ ๊ท์น์ ํด์ํ ๋ ์ฌ์ฉํ ๋
ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ์ง์ ํ ์ ์๋ค.
In
, NotIn
, Exists
, DoesNotExist
, Gt
๋ฐ Lt
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
NotIn
๋ฐ DoesNotExist
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋
ธ๋ ์ํฐ-์ดํผ๋ํฐ ๊ท์น์ ์ ์ํ ์ ์๋ค.
๋๋, ํน์ ๋
ธ๋์์ ํ๋๋ฅผ ์ซ์๋ด๋
๋
ธ๋ ํ
์ธํธ(taint)๋ฅผ ์ค์ ํ ์ ์๋ค.
์ฐธ๊ณ :
nodeSelector
์ nodeAffinity
๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ,
ํ๋๊ฐ ๋
ธ๋์ ์ค์ผ์ค๋ง๋๋ ค๋ฉด ๋ ์กฐ๊ฑด ๋ชจ๋ ๋ง์กฑ๋์ด์ผ ํ๋ค.
nodeAffinity
์ nodeSelectorTerms
์ ์ฌ๋ฌ ์กฐ๊ฑด(term)์ ๋ช
์ํ ๊ฒฝ์ฐ,
๋
ธ๋๊ฐ ๋ช
์๋ ์กฐ๊ฑด ์ค ํ๋๋ง ๋ง์กฑํด๋ ํ๋๊ฐ
ํด๋น ๋
ธ๋์ ์ค์ผ์ค๋ง๋ ์ ์๋ค. (์กฐ๊ฑด๋ค์ OR ์ฐ์ฐ์๋ก ์ฒ๋ฆฌ)
nodeSelectorTerms
์ ์กฐ๊ฑด์ผ๋ก ๋จ์ผ matchExpressions
ํ๋์ ์ฌ๋ฌ ํํ์(expression)์ ๋ช
์ํ ๊ฒฝ์ฐ,
๋ชจ๋ ํํ์์ ๋์์ ๋ง์กฑํ๋ ๋
ธ๋์๋ง
ํ๋๊ฐ ์ค์ผ์ค๋ง๋ ์ ์๋ค. (ํํ์๋ค์ AND ์ฐ์ฐ์๋ก ์ฒ๋ฆฌ)
๋ ธ๋ ์ดํผ๋ํฐ๋ฅผ ์ฌ์ฉํด ๋ ธ๋์ ํ๋ ํ ๋น์์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ํ์ธํ๋ค.
๋ ธ๋ ์ดํผ๋ํฐ ๊ฐ์ค์น(weight)
๊ฐ preferredDuringSchedulingIgnoredDuringExecution
์ดํผ๋ํฐ ํ์
์ธ์คํด์ค์ ๋ํด
1-100 ๋ฒ์์ weight
๋ฅผ ๋ช
์ํ ์ ์๋ค.
์ค์ผ์ค๋ฌ๊ฐ ๋ค๋ฅธ ๋ชจ๋ ํ๋ ์ค์ผ์ค๋ง ์๊ตฌ ์ฌํญ์ ๋ง์กฑํ๋ ๋
ธ๋๋ฅผ ์ฐพ์ผ๋ฉด,
์ค์ผ์ค๋ฌ๋ ๋
ธ๋๊ฐ ๋ง์กฑํ ๋ชจ๋ ์ ํธํ๋(preferred) ๊ท์น์ ๋ํด
ํฉ๊ณ ๊ณ์ฐ์ ์ํ weight
๊ฐ์ ๊ฐ๊ฐ ์ถ๊ฐํ๋ค.
์ต์ข ํฉ๊ณ๋ ํด๋น ๋ ธ๋์ ๋ํ ๋ค๋ฅธ ์ฐ์ ์์ ํจ์ ์ ์์ ๋ํด์ง๋ค. ์ค์ผ์ค๋ฌ๊ฐ ํ๋์ ๋ํ ์ค์ผ์ค๋ง ํ๋จ์ ํ ๋, ์ด ์ ์๊ฐ ๊ฐ์ฅ ๋์ ๋ ธ๋๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ํ๋ ์คํ์ด ์๋ค๊ณ ํ์.
apiVersion: v1
kind: Pod
metadata:
name: with-affinity-anti-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/os
operator: In
values:
- linux
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: label-1
operator: In
values:
- key-1
- weight: 50
preference:
matchExpressions:
- key: label-2
operator: In
values:
- key-2
containers:
- name: with-node-affinity
image: registry.k8s.io/pause:2.0
preferredDuringSchedulingIgnoredDuringExecution
๊ท์น์ ๋ง์กฑํ๋ ๋
ธ๋๊ฐ 2๊ฐ ์๊ณ ,
ํ๋์๋ label-1:key-1
๋ ์ด๋ธ์ด ์๊ณ ๋ค๋ฅธ ํ๋์๋ label-2:key-2
๋ ์ด๋ธ์ด ์์ผ๋ฉด,
์ค์ผ์ค๋ฌ๋ ๊ฐ ๋
ธ๋์ weight
๋ฅผ ํ์ธํ ๋ค
ํด๋น ๋
ธ๋์ ๋ํ ๋ค๋ฅธ ์ ์์ ๊ฐ์ค์น๋ฅผ ๋ํ๊ณ ,
์ต์ข
์ ์๊ฐ ๊ฐ์ฅ ๋์ ๋
ธ๋์ ํด๋น ํ๋๋ฅผ ์ค์ผ์ค๋งํ๋ค.
์ฐธ๊ณ :
์ด ์์์์ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ ์์ ์ผ๋ก ํ๋๋ฅผ ์ค์ผ์ค๋งํ๋ ค๋ฉด, ๋ณด์ ํ๊ณ ์๋ ๋ ธ๋์kubernetes.io/os=linux
๋ ์ด๋ธ์ด ์์ด์ผ ํ๋ค.์ค์ผ์ค๋ง ํ๋กํ์ผ๋น ๋ ธ๋ ์ดํผ๋ํฐ
Kubernetes v1.20 [beta]
์ฌ๋ฌ ์ค์ผ์ค๋ง ํ๋กํ์ผ์ ๊ตฌ์ฑํ ๋
๋
ธ๋ ์ดํผ๋ํฐ๊ฐ ์๋ ํ๋กํ์ผ์ ์ฐ๊ฒฐํ ์ ์๋๋ฐ, ์ด๋ ํ๋กํ์ผ์ด ํน์ ๋
ธ๋ ์งํฉ์๋ง ์ ์ฉ๋๋ ๊ฒฝ์ฐ ์ ์ฉํ๋ค.
์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ์ ์๋
NodeAffinity
ํ๋ฌ๊ทธ์ธ์ args
ํ๋์ addedAffinity
๋ฅผ ์ถ๊ฐํ๋ค.
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
- schedulerName: foo-scheduler
pluginConfig:
- name: NodeAffinity
args:
addedAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: scheduler-profile
operator: In
values:
- foo
addedAffinity
๋ .spec.schedulerName
์ foo-scheduler
๋ก ์ค์ ํ๋ ๋ชจ๋ ํ๋์ ์ ์ฉ๋๋ฉฐ
PodSpec์ ์ง์ ๋ NodeAffinity๋ ์ ์ฉ๋๋ค.
์ฆ, ํ๋๋ฅผ ๋งค์นญ์ํค๋ ค๋ฉด, ๋
ธ๋๊ฐ addedAffinity
์
ํ๋์ .spec.NodeAffinity
๋ฅผ ์ถฉ์กฑํด์ผ ํ๋ค.
addedAffinity
๋ ์๋ ์ ์ ์๊ฒ ํ์๋์ง ์์ผ๋ฏ๋ก,
์์์น ๋ชปํ ๋์์ด ์ผ์ด๋ ์ ์๋ค.
์ค์ผ์ค๋ฌ ํ๋กํ์ผ ์ด๋ฆ๊ณผ ๋ช
ํํ ์๊ด ๊ด๊ณ๊ฐ ์๋ ๋
ธ๋ ๋ ์ด๋ธ์ ์ฌ์ฉํ๋ค.
์ฐธ๊ณ :
๋ฐ๋ชฌ์ ํ๋๋ฅผ ์์ฑํ๋ ๋ฐ๋ชฌ์ ์ปจํธ๋กค๋ฌ๋ ์ค์ผ์ค๋ง ํ๋กํ์ผ์ ์ง์ํ์ง ์๋๋ค. ๋ฐ๋ชฌ์ ์ปจํธ๋กค๋ฌ๊ฐ ํ๋๋ฅผ ์์ฑํ ๋, ๊ธฐ๋ณธ ์ฟ ๋ฒ๋คํฐ์ค ์ค์ผ์ค๋ฌ๋ ํด๋น ํ๋๋ฅผ ๋ฐฐ์นํ๊ณ ๋ฐ๋ชฌ์ ์ปจํธ๋กค๋ฌ์ ๋ชจ๋nodeAffinity
๊ท์น์ ์ค์ํ๋ค.ํ๋๊ฐ ์ดํผ๋ํฐ์ ์ํฐ-์ดํผ๋ํฐ
ํ๋๊ฐ ์ดํผ๋ํฐ์ ์ํฐ-์ดํผ๋ํฐ๋ฅผ ์ฌ์ฉํ์ฌ, ๋ ธ๋ ๋ ์ด๋ธ ๋์ , ๊ฐ ๋ ธ๋์ ์ด๋ฏธ ์คํ ์ค์ธ ๋ค๋ฅธ ํ๋ ์ ๋ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋๊ฐ ์ค์ผ์ค๋ง๋ ๋ ธ๋๋ฅผ ์ ํํ ์ ์๋ค.
ํ๋๊ฐ ์ดํผ๋ํฐ์ ์ํฐ-์ดํผ๋ํฐ ๊ท์น์ "X๊ฐ ๊ท์น Y๋ฅผ ์ถฉ์กฑํ๋ ํ๋ ์ด์์ ํ๋๋ฅผ ์ด๋ฏธ ์คํ์ค์ธ ๊ฒฝ์ฐ ์ด ํ๋๋ X์์ ์คํํด์ผ ํ๋ค(๋๋ ์ํฐ-์ดํผ๋ํฐ์ ๊ฒฝ์ฐ์๋ "์คํํ๋ฉด ์ ๋๋ค")"์ ํํ์ด๋ฉฐ, ์ฌ๊ธฐ์ X๋ ๋ ธ๋, ๋, ํด๋ผ์ฐ๋ ์ ๊ณต์ ์กด ๋๋ ๋ฆฌ์ ๋ฑ์ด๋ฉฐ Y๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ถฉ์กฑํ ๊ท์น์ด๋ค.
์ด๋ฌํ ๊ท์น(Y)์ ๋ ์ด๋ธ ์ ๋ ํฐ ํํ๋ก ์์ฑํ๋ฉฐ, ์ฐ๊ด๋ ๋ค์์คํ์ด์ค ๋ชฉ๋ก์ ์ ํ์ ์ผ๋ก ๋ช ์ํ ์๋ ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์ ํ๋๋ ๋ค์์คํ์ด์ค์ ์ํ๋(namespaced) ์ค๋ธ์ ํธ์ด๋ฏ๋ก, ํ๋ ๋ ์ด๋ธ๋ ์๋ฌต์ ์ผ๋ก ํน์ ๋ค์์คํ์ด์ค์ ์ํ๊ฒ ๋๋ค. ํ๋ ๋ ์ด๋ธ์ ๋ํ ๋ชจ๋ ๋ ์ด๋ธ ์ ๋ ํฐ๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํด๋น ๋ ์ด๋ธ์ ์ด๋ค ๋ค์์คํ์ด์ค์์ ํ์ํ ์ง๋ฅผ ๋ช ์ํด์ผ ํ๋ค.
topologyKey
๋ฅผ ์ฌ์ฉํ์ฌ ํ ํด๋ก์ง ๋๋ฉ์ธ(X)๋ฅผ ๋ํ๋ผ ์ ์์ผ๋ฉฐ,
์ด๋ ์์คํ
์ด ๋๋ฉ์ธ์ ํ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋
ธ๋ ๋ ์ด๋ธ์ ํค์ด๋ค.
์ด์ ๋ํ ์์๋ ์ ์๋ ค์ง ๋ ์ด๋ธ, ์ด๋
ธํ
์ด์
, ํ
์ธํธ๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ฐธ๊ณ :
ํ๋๊ฐ ์ดํผ๋ํฐ์ ์ํฐ-์ดํผ๋ํฐ์๋ ์๋นํ ์์ ํ๋ก์ธ์ฑ์ด ํ์ํ๊ธฐ์ ๋๊ท๋ชจ ํด๋ฌ์คํฐ์์๋ ์ค์ผ์ค๋ง ์๋๊ฐ ํฌ๊ฒ ๋๋ ค์ง ์ ์๋ค. ์๋ฐฑ ๊ฐ์ ๋ ธ๋๋ฅผ ๋์ด๊ฐ๋ ํด๋ฌ์คํฐ์์ ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ์ง ์๋๋ค.์ฐธ๊ณ :
ํ๋ ์ํฐ-์ดํผ๋ํฐ์์๋ ๋ ธ๋์ ์ผ๊ด๋ ๋ ์ด๋ธ์ ์ง์ ํด์ผ ํ๋ค. ์ฆ, ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋๋topologyKey
์ ๋งค์นญ๋๋ ์ ์ ํ ๋ ์ด๋ธ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
์ผ๋ถ ๋๋ ๋ชจ๋ ๋
ธ๋์ ์ง์ ๋ topologyKey
๋ ์ด๋ธ์ด ์๋ ๊ฒฝ์ฐ์๋
์๋ํ์ง ์์ ๋์์ด ๋ฐ์ํ ์ ์๋ค.ํ๋๊ฐ ์ดํผ๋ํฐ ๋ฐ ์ํฐ-์ดํผ๋ํฐ ์ข ๋ฅ
๋ ธ๋ ์ดํผ๋ํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ ์ดํผ๋ํฐ ๋ฐ ์ํฐ-์ดํผ๋ํฐ์๋ ๋ค์์ 2 ์ข ๋ฅ๊ฐ ์๋ค.
requiredDuringSchedulingIgnoredDuringExecution
preferredDuringSchedulingIgnoredDuringExecution
์๋ฅผ ๋ค์ด, requiredDuringSchedulingIgnoredDuringExecution
์ดํผ๋ํฐ๋ฅผ ์ฌ์ฉํ์ฌ
์๋ก ํต์ ์ ๋ง์ด ํ๋ ๋ ์๋น์ค์ ํ๋๋ฅผ
๋์ผ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์กด์ ๋ฐฐ์นํ๋๋ก ์ค์ผ์ค๋ฌ์๊ฒ ์ง์ํ ์ ์๋ค.
๋น์ทํ๊ฒ, preferredDuringSchedulingIgnoredDuringExecution
์ํฐ-์ดํผ๋ํฐ๋ฅผ ์ฌ์ฉํ์ฌ
์๋น์ค์ ํ๋๋ฅผ
์ฌ๋ฌ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์กด์ ํผ๋จ๋ฆด ์ ์๋ค.
ํ๋๊ฐ ์ดํผ๋ํฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ํ๋ ์คํ์ affinity.podAffinity
ํ๋๋ฅผ ์ฌ์ฉํ๋ค.
ํ๋๊ฐ ์ํฐ-์ดํผ๋ํฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด,
ํ๋ ์คํ์ affinity.podAntiAffinity
ํ๋๋ฅผ ์ฌ์ฉํ๋ค.
ํ๋ ์ดํผ๋ํฐ ์์
๋ค์๊ณผ ๊ฐ์ ํ๋ ์คํ์ ๊ฐ์ ํ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
topologyKey: topology.kubernetes.io/zone
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S2
topologyKey: topology.kubernetes.io/zone
containers:
- name: with-pod-affinity
image: registry.k8s.io/pause:2.0
์ด ์์๋ ํ๋์ ํ๋ ์ดํผ๋ํฐ ๊ท์น๊ณผ
ํ๋์ ํ๋ ์ํฐ-์ดํผ๋ํฐ ๊ท์น์ ์ ์ํ๋ค.
ํ๋ ์ดํผ๋ํฐ ๊ท์น์ "ํ๋" requiredDuringSchedulingIgnoredDuringExecution
์,
์ํฐ-์ดํผ๋ํฐ ๊ท์น์ "์ํํธ" preferredDuringSchedulingIgnoredDuringExecution
์ ์ฌ์ฉํ๋ค.
์์ ์ดํผ๋ํฐ ๊ท์น์ security=S1
๋ ์ด๋ธ์ด ์๋ ํ๋ ์ด์์ ๊ธฐ์กด ํ๋์ ์กด์ ๋์ผํ ์กด์ ์๋ ๋
ธ๋์๋ง
ํ๋๋ฅผ ์ค์ผ์ค๋งํ๋๋ก ์ค์ผ์ค๋ฌ์ ์ง์ํ๋ค.
๋ ์ ํํ ๋งํ๋ฉด, ๋ง์ฝ security=S1
ํ๋ ๋ ์ด๋ธ์ด ์๋ ํ๋ ์ด์์ ๊ธฐ์กด ํ๋๋ฅผ ์คํํ๊ณ ์๋ ๋
ธ๋๊ฐ
zone=V
์ ํ๋ ์ด์ ์กด์ฌํ๋ค๋ฉด,
์ค์ผ์ค๋ฌ๋ ํ๋๋ฅผ topology.kubernetes.io/zone=V
๋ ์ด๋ธ์ด ์๋ ๋
ธ๋์ ๋ฐฐ์นํด์ผ ํ๋ค.
์์ ์ํฐ-์ดํผ๋ํฐ ๊ท์น์ security=S2
๋ ์ด๋ธ์ด ์๋ ํ๋ ์ด์์ ๊ธฐ์กด ํ๋์ ์กด์ ๋์ผํ ์กด์ ์๋ ๋
ธ๋์๋
๊ฐ๊ธ์ ํ๋๋ฅผ ์ค์ผ์ค๋งํ์ง ์๋๋ก ์ค์ผ์ค๋ฌ์ ์ง์ํ๋ค.
๋ ์ ํํ ๋งํ๋ฉด, ๋ง์ฝ security=S2
ํ๋ ๋ ์ด๋ธ์ด ์๋ ํ๋๊ฐ ์คํ๋๊ณ ์๋ zone=R
์
๋ค๋ฅธ ๋
ธ๋๋ ์กด์ฌํ๋ค๋ฉด,
์ค์ผ์ค๋ฌ๋ topology.kubernetes.io/zone=R
๋ ์ด๋ธ์ด ์๋ ๋
ธ๋์๋ ๊ฐ๊ธ์ ํด๋น ํ๋๋ฅผ ์ค์ผ์ค๋งํ์ง ์์ผ์ ํ๋ค.
ํ๋ ์ดํผ๋ํฐ์ ์ํฐ-์ดํผ๋ํฐ์ ์์์ ๋ํด ์ต์ํด์ง๊ณ ์ถ๋ค๋ฉด, ๋์์ธ ์ ์์ ์ฐธ์กฐํ๋ค.
ํ๋ ์ดํผ๋ํฐ์ ์ํฐ-์ดํผ๋ํฐ์ operator
ํ๋์
In
, NotIn
, Exists
๋ฐ DoesNotExist
๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
์์น์ ์ผ๋ก, topologyKey
์๋ ์ฑ๋ฅ๊ณผ ๋ณด์์์ ์ด์ ๋ก ๋ค์์ ์์ธ๋ฅผ ์ ์ธํ๋ฉด
์ด๋ ๋ ์ด๋ธ ํค๋ ์ฌ์ฉํ ์ ์๋ค.
- ํ๋ ์ดํผ๋ํฐ ๋ฐ ์ํฐ-์ดํผ๋ํฐ์ ๋ํด, ๋น
topologyKey
ํ๋๋requiredDuringSchedulingIgnoredDuringExecution
๋ฐpreferredDuringSchedulingIgnoredDuringExecution
๋ด์ ํ์ฉ๋์ง ์๋๋ค. requiredDuringSchedulingIgnoredDuringExecution
ํ๋ ์ํฐ-์ดํผ๋ํฐ ๊ท์น์ ๋ํด,LimitPodHardAntiAffinityTopology
์ด๋๋ฏธ์ ์ปจํธ๋กค๋ฌ๋topologyKey
๋ฅผkubernetes.io/hostname
์ผ๋ก ์ ํํ๋ค. ์ปค์คํ ํ ํด๋ก์ง๋ฅผ ํ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ด๋๋ฏธ์ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ ํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์๋ค.
labelSelector
์ topologyKey
์ ๋ํ์ฌ ์ ํ์ ์ผ๋ก,
labelSelector
๊ฐ ๋น๊ตํด์ผ ํ๋ ๋ค์์คํ์ด์ค์ ๋ชฉ๋ก์
labelSelector
๋ฐ topologyKey
ํ๋์ ๋์ผํ ๊ณ์์ namespaces
ํ๋์ ๋ช
์ํ ์ ์๋ค.
์๋ตํ๊ฑฐ๋ ๋น์ ๋๋ฉด,
ํด๋น ์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ ์ ์๊ฐ ์๋ ํ๋์ ๋ค์์คํ์ด์ค๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค.
๋ค์์คํ์ด์ค ์ ๋ ํฐ
Kubernetes v1.24 [stable]
๋ค์์คํ์ด์ค ์งํฉ์ ๋ํ ๋ ์ด๋ธ ์ฟผ๋ฆฌ์ธ namespaceSelector
๋ฅผ ์ฌ์ฉํ์ฌ ์ผ์นํ๋ ๋ค์์คํ์ด์ค๋ฅผ ์ ํํ ์๋ ์๋ค.
namespaceSelector
๋๋ namespaces
ํ๋์ ์ํด ์ ํ๋ ๋ค์์คํ์ด์ค ๋ชจ๋์ ์ ์ฉ๋๋ค.
๋น namespaceSelector
({})๋ ๋ชจ๋ ๋ค์์คํ์ด์ค์ ์ผ์นํ๋ ๋ฐ๋ฉด,
null ๋๋ ๋น namespaces
๋ชฉ๋ก๊ณผ null namespaceSelector
๋ ๊ท์น์ด ์ ์ฉ๋ ํ๋์ ๋ค์์คํ์ด์ค์ ๋งค์น๋๋ค.
๋ ์ค์ ์ ์ธ ์ ์ค์ผ์ด์ค
ํ๋๊ฐ ์ดํผ๋ํฐ์ ์ํฐ-์ดํผ๋ํฐ๋ ๋ ํ๋ฆฌ์นด์ , ์คํ ์ดํธํ์ , ๋ํ๋ก์ด๋จผํธ ๋ฑ๊ณผ ๊ฐ์ ์์ ๋ ๋ฒจ ๋ชจ์๊ณผ ํจ๊ป ์ฌ์ฉํ ๋ ๋์ฑ ์ ์ฉํ ์ ์๋ค. ์ด๋ฌํ ๊ท์น์ ์ฌ์ฉํ๋ฉด, ์ํฌ๋ก๋ ์งํฉ์ด ์๋ฅผ ๋ค๋ฉด ์๋ก ์ฐ๊ด๋ ๋ ๊ฐ์ ํ๋๋ฅผ ๋์ผํ ๋ ธ๋์ ๋ฐฐ์นํ๋ ๊ฒ๊ณผ ๊ฐ์ด ๋์ผํ๊ฒ ์ ์๋ ํ ํด๋ก์ง์ ๊ฐ์ ์์น์ ๋ฐฐ์น๋๋๋ก ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋ค.
์ธ ๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ๋ฅผ ์์ํด ๋ณด์. ์ด ํด๋ฌ์คํฐ์์ redis์ ๊ฐ์ ์ธ-๋ฉ๋ชจ๋ฆฌ ์บ์๋ฅผ ์ด์ฉํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ค. ๋ํ ์ด ์์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์บ์ ์ฌ์ด์ ๋๊ธฐ ์๊ฐ์ ๋ ์ ์๋ ๋๋ก ์งง์์ผ ํ๋ค๊ณ ๊ฐ์ ํ์. ์ด ๋ ์น ์๋ฒ๋ฅผ ๊ฐ๋ฅํ ํ ์บ์์ ๊ฐ์ ์์น์์ ์คํ๋๋๋ก ํ๊ธฐ ์ํด ํ๋๊ฐ ์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ค์์ redis ์บ์ ๋ํ๋ก์ด๋จผํธ ์์์์, ๋ ํ๋ฆฌ์นด๋ app=store
๋ ์ด๋ธ์ ๊ฐ๋๋ค.
podAntiAffinity
๊ท์น์ ์ค์ผ์ค๋ฌ๋ก ํ์ฌ๊ธ
app=store
๋ ์ด๋ธ์ ๊ฐ์ง ๋ณต์ ๊ฐ์ ๋ ํ๋ฆฌ์นด๋ฅผ ๋จ์ผ ๋
ธ๋์ ๋ฐฐ์นํ์ง ์๊ฒ ํ๋ค.
์ด๋ ๊ฒ ํ์ฌ ์บ์ ํ๋๋ฅผ ๊ฐ ๋
ธ๋์ ๋ถ์ฐํ์ฌ ์์ฑํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-cache
spec:
selector:
matchLabels:
app: store
replicas: 3
template:
metadata:
labels:
app: store
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: redis-server
image: redis:3.2-alpine
์น ์๋ฒ๋ฅผ ์ํ ๋ค์์ ๋ํ๋ก์ด๋จผํธ๋ app=web-store
๋ ์ด๋ธ์ ๊ฐ๋ ๋ ํ๋ฆฌ์นด๋ฅผ ์์ฑํ๋ค.
ํ๋ ์ดํผ๋ํฐ ๊ท์น์ ์ค์ผ์ค๋ฌ๋ก ํ์ฌ๊ธ app=store
๋ ์ด๋ธ์ด ์๋ ํ๋๋ฅผ ์คํ ์ค์ธ ๋
ธ๋์ ๊ฐ ๋ ํ๋ฆฌ์นด๋ฅผ ๋ฐฐ์นํ๋๋ก ํ๋ค.
ํ๋ ์ํฐ-์ดํผ๋ํฐ ๊ท์น์ ์ค์ผ์ค๋ฌ๋ก ํ์ฌ๊ธ app=web-store
๋ ์ด๋ธ์ด ์๋ ์๋ฒ ํ๋๋ฅผ
ํ ๋
ธ๋์ ์ฌ๋ฌ ๊ฐ ๋ฐฐ์นํ์ง ๋ชปํ๋๋ก ํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
spec:
selector:
matchLabels:
app: web-store
replicas: 3
template:
metadata:
labels:
app: web-store
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-store
topologyKey: "kubernetes.io/hostname"
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: web-app
image: nginx:1.16-alpine
์์ ๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํด๋ฌ์คํฐ ํ์์ด ๋ํ๋๋๋ฐ, ์ธ ๋ ธ๋์ ๊ฐ ์น ์๋ฒ๊ฐ ์บ์์ ํจ๊ป ์๋ ํ์์ด๋ค.
node-1 | node-2 | node-3 |
---|---|---|
webserver-1 | webserver-2 | webserver-3 |
cache-1 | cache-2 | cache-3 |
์ ์ฒด์ ์ธ ํจ๊ณผ๋ ๊ฐ ์บ์ ์ธ์คํด์ค๋ฅผ ๋์ผํ ๋ ธ๋์์ ์คํ ์ค์ธ ๋จ์ผ ํด๋ผ์ด์ธํธ๊ฐ ์ก์ธ์คํ๊ฒ ๋ ๊ฒ ๊ฐ๋ค๋ ๊ฒ์ด๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฐจ์ด(๋ถ๊ท ํ ๋ก๋)์ ๋๊ธฐ โโ์๊ฐ์ ๋ชจ๋ ์ต์ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
ํ๋๊ฐ ์ํฐ-์ดํผ๋ํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๋ค๋ฅธ ์ด์ ๊ฐ ์์ ์ ์๋ค. ZooKeeper ํํ ๋ฆฌ์ผ์์ ์ ์์์ ๋์ผํ ๊ธฐ์ ์ ์ฌ์ฉํด ๊ณ ๊ฐ์ฉ์ฑ์ ์ํ ์ํฐ-์ดํผ๋ํฐ๋ก ๊ตฌ์ฑ๋ ์คํ ์ดํธํ์ ์ ์์๋ฅผ ํ์ธํ๋ค.
nodeName
nodeName
์ ์ดํผ๋ํฐ ๋๋ nodeSelector
๋ณด๋ค ๋ ์ง์ ์ ์ธ ํํ์ ๋
ธ๋ ์ ํ ๋ฐฉ๋ฒ์ด๋ค.
nodeName
์ ํ๋ ์คํ์ ํ๋ ์ค ํ๋์ด๋ค.
nodeName
ํ๋๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด, ์ค์ผ์ค๋ฌ๋ ํ๋๋ฅผ ๋ฌด์ํ๊ณ ,
๋ช
๋ช
๋ ๋
ธ๋์ kubelet์ด ํด๋น ํ๋๋ฅผ ์๊ธฐ ๋
ธ๋์ ๋ฐฐ์นํ๋ ค๊ณ ์๋ํ๋ค.
nodeName
์ nodeSelector
๋๋ ์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ ๊ท์น๋ณด๋ค ์ฐ์ ์ ์ผ๋ก ์ ์ฉ(overrule)๋๋ค.
nodeName
์ ์ฌ์ฉํด์ ๋
ธ๋๋ฅผ ์ ํํ ๋์ ๋ช ๊ฐ์ง ์ ํ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ง์ฝ ๋ช ๋ช ๋ ๋ ธ๋๊ฐ ์์ผ๋ฉด, ํ๋๊ฐ ์คํ๋์ง ์๊ณ ๋ฐ๋ผ์ ์๋์ผ๋ก ์ญ์ ๋ ์ ์๋ค.
- ๋ง์ฝ ๋ช ๋ช ๋ ๋ ธ๋์ ํ๋๋ฅผ ์์ฉํ ์ ์๋ ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋๊ฐ ์คํจํ๊ณ , ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์๋๋ค. ์: OutOfmemory ๋๋ OutOfcpu.
- ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋ ธ๋ ์ด๋ฆ์ ํญ์ ์์ธก ๊ฐ๋ฅํ๊ฑฐ๋ ์์ ์ ์ธ ๊ฒ์ ์๋๋ค.
๋ค์์ nodeName
ํ๋๋ฅผ ์ฌ์ฉํ๋ ํ๋ ์คํ ์์์ด๋ค.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
nodeName: kube-01
์ ํ๋๋ kube-01
๋
ธ๋์์๋ง ์คํ๋ ๊ฒ์ด๋ค.
ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด
_ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด_์ ์ฌ์ฉํ์ฌ ์ง์ญ(regions), ์์ญ(zones), ๋ ธ๋ ๋๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ๋ค๋ฅธ ํ ํด๋ก์ง ๋๋ฉ์ธ๊ณผ ๊ฐ์ ์ฅ์ ๋๋ฉ์ธ ์ฌ์ด์์ ํ๋๊ฐ ํด๋ฌ์คํฐ ์ ์ฒด์ ๋ถ์ฐ๋๋ ๋ฐฉ์์ ์ ์ดํ ์ ์๋ค. ์ฑ๋ฅ, ์์ ๊ฐ์ฉ์ฑ ๋๋ ์ ์ฒด ํ์ฉ๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ด ์์ ์ ์ํํ ์ ์๋ค.
ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์์ ์๋ ๋ฐฉ์์ ๋ํด ๋ ์์ธํ ์์๋ณผ ์ ์๋ค.
๋ค์ ๋ด์ฉ
- ํ ์ธํธ ๋ฐ ํจ๋ฌ๋ ์ด์ ์ ๋ํด ๋ ์ฝ์ด๋ณธ๋ค.
- ๋ ธ๋ ์ดํผ๋ํฐ์ ํ๋๊ฐ ์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ์ ๋ํ ๋์์ธ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณธ๋ค.
- ํ ํด๋ก์ง ๋งค๋์ ๊ฐ ๋ ธ๋ ์์ค ๋ฆฌ์์ค ํ ๋น ๊ฒฐ์ ์ ์ด๋ป๊ฒ ๊ด์ฌํ๋์ง ์์๋ณธ๋ค.
- ๋ ธ๋์ ๋ ํฐ(nodeSelector)๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์์๋ณธ๋ค.
- ์ดํผ๋ํฐ/์ํฐ-์ดํผ๋ํฐ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์์๋ณธ๋ค.