[μΏ λ²λ€ν°μ€] k8sμ κΈ°λ³Έ λ¨μμΈ ν¬λ (Pods)μ ν¬λ μμ±νκΈ°
μΏ λ²λ€ν°μ€λ 컨ν μ΄λλ€μ Life cycle μμ λΆν° scheudling κΉμ§ μ λ°μ μΈ μ€μΌμ€νΈλ μ΄μ λꡬλΌκ³ νμλ€.
μ΄λ° μΏ λ²λ€ν°μ€λ ν¬μ»€μ€κ° 컨ν μ΄λμ λ§μΆ°μ Έ μλ€.
λ컀μμλ κΈ°λ³Έ λ¨μκ° μ»¨ν μ΄λ μμμ§λ§ μΏ λ²λ€ν°μ€μμλ κΈ°λ³Έ λ¨μλ₯Ό ν¬λ, Pods λΌκ³ λΆλ₯Έλ€.
μ€λμ μ΄ ν¬λμ λν΄μ μμ보λλ‘ νμ.
ν¬λ, Pods
ν¬λλ μμ μ΄μΌκΈ° νμλ― μ»¨ν μ΄λ μ ν리μΌμ΄μ μ ꡬλνκΈ° μν΄ κΌ νμν μ€λΈμ νΈ(Object) μ΄λ€.
μ¦, μΏ λ²λ€ν°μ€μμ κ°μ₯ κΈ°λ³Έ λ¨μλ₯Ό λ§ νλ©° μ°λ¦¬λ ν¬λλ₯Ό μ΄μ©ν΄μ 컨ν μ΄λλ₯Ό κ°λμκ³ μΏ λ²λ€ν°μ€λ 컨ν μ΄λλ₯Ό μ§μ κ΄λ¦¬νμ§ μκ³ ν¬λλ₯Ό μ΄μ©ν΄ 컨ν μ΄λλ€μ κ΄λ¦¬νκ² λλ€.
ν¬λ λ΄λΆμ 컨ν μ΄λλ€μ κΈ°λ³Έμ μΌλ‘ Shared Context μμ μ€νλμ΄μ 리λ μ€μ λ€μ μ€νμ΄μ€μ 컨νΈλ‘€ κ·Έλ£Ή (cgroup)μ ν¨κ» 곡μ νλ€.
μ΄ κ°λ μ΄ ν¬λμ 컨ν μ΄λλ₯Ό κ΅¬λΆ μ§λ μμ£Ό μ€μν κ°λ μ΄ λλλ° μ κΈ°μ΅ ν΄λλλ‘ νμ
κ·Έλ¦¬κ³ νλμ λ컀 컨ν μ΄λμμ νλμ λ컀 μ΄λ―Έμ§λ₯Ό μ΄μ©νλ κ²κ³Όλ λ¬λ¦¬ μΏ λ²λ€ν°μ€μ ν¬λλ νλμ ν¬λμμ μ¬λ¬ 컨ν μ΄λλ₯Ό ꡬλμν¬ μ μλ€.
μ΄ κ°λ μ νμ λ°°μΈ Sidecar ν¨ν΄μ΄λΌκ³ λ νλλ°, λ³΄ν΅ μ€μ§μ μΈ κΈ°λ₯ λμμ νλ μ ν리μΌμ΄μ 컨ν μ΄λ νλμ ν΄λΉ μ ν리μΌμ΄μ μ μ‘°μνλ 창ꡬμ λΉμ·ν 컨ν μ΄λ νλλ₯Ό μ‘°ν©νμ¬ κ΅¬μ±νκΈ°λ νλ€.
ν¬λ λ΄μ 곡μ λλ 리μμ€
μκΉ μμμ μ΄μΌκΈ° νλ Shared Contextμ λν΄μ λ€μ μ΄μΌκΈ° ν΄λ³΄μ.
λ§μ½ νλμ ν¬λμμ μ¬λ¬ 컨ν μ΄λλ₯Ό ꡬλ μμΌ°λ€κ³ ν΄λ³΄μ.
κ·ΈλΌ ν¬λλ λ΄λΆμ μΌλ‘ 2κ°μ 리μμ€λ₯Ό 곡μ ν μ μλ€.
- Pod Storage
- Pod Networking
λ§μ½ μ°λ¦¬κ° λ컀λ₯Ό μ¬μ©νλ€λ©΄ μ΄λ μκΉ? μ°μ νλμ 컨ν μ΄λλ νλμ μ ν리μΌμ΄μ λ§ μ€ννλλ‘ νκ³ λ컀 λΈλ¦Ώμ§ λ€νΈμν¬(Bridge Network)λ₯Ό ꡬμ±νμ΄μΌ νλ€. νμ§λ§ μΏ λ²λ€ν°μ€μμλ κ·Έλ΄ νμκ° μλ€.
μ΄μ ν¬λλ₯Ό μμ±νλ λ°©λ²μ λν΄μ μμ보μ.
ν¬λλ₯Ό μμ±νλ 2κ°μ§ λ°©λ²
ν¬λλ₯Ό μμ±νκΈ° μν λ°©λ²μ ν¬κ² 2κ°μ§κ° μ‘΄μ¬νλ€.
- μ§μ ν¬λλ₯Ό μμ±νλ κ²½μ°
- ν¬λλ₯Ό κ°μΈλ μμ 리μμ€λ₯Ό μ¬μ©νλ κ²½μ°
μ°λ¦¬λ λλΆλΆ ν¬λλ₯Ό κ°μΈλ μμ 리μμ€λ₯Ό μ¬μ©νλ κ²½μ°λ₯Ό λ§μ΄ λ³Ό κ²μ΄λ€.
κ·Έλλ κ°λ¨νλ λ λ°©λ² λͺ¨λλ₯Ό μμ보μ.
μ§μ ν¬λλ₯Ό μμ±νλ κ²½μ°
μ§μ ν¬λλ₯Ό μμ±νκΈ° μν΄μλ yml νμΌμ kindλ₯Ό Pod λ‘ μ§μ νκ³ specμ ν¬λκ° μ€νμν¬ μ»¨ν μ΄λ μ€μ μ μΆκ°νκΈ°λ§ νλ©΄ λλ€.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: service-container-name
images: my-service:v1.0
ports:
- containerPort: 80
protocol: TCP
- apiVersion
- yml νμΌμμ μ μν μ€λΈμ νΈμ API λ²μ μ λνλΈλ€.
- kind
- ν΄λΉ yml νμΌμ μ‘΄μ¬νλ 리μμ€μ μ’ λ₯λ₯Ό λνλΈλ€
- metadata
- μ£Όμ, μ΄λ¦, λΌλ²¨κ³Ό κ°μ λ©νλ°μ΄ν°λ₯Ό μ§μ ν μ μλ€
- spec
- 리μμ€λ₯Ό μμ±νκΈ° μν μμΈν μ 보λ₯Ό μ λ ₯νλ€.
ν¬λλ₯Ό κ°μΈλ μμ 리μμ€λ₯Ό μ¬μ©νλ κ²½μ°
λλΆλΆμ κ²½μ°μμ μ°λ¦¬λ μ΄ λ°©λ²μ μ¬μ©ν κ²μ΄λ€.
ν¬λμ μμ 리μμ€λ λνμ μΌλ‘ λ€μ 3κ°μ§κ° μλ€.
- ReplicaSet
- StatefulSet
- Deployment
μ΄λ€μ ν¬λλ₯Ό μ‘°μνκ³ κ΄λ¦¬νλ μμ 리μμ€λ€μΈλ°, μμ 리μμ€μμ ν¬λλ₯Ό μ μνκΈ° μν΄μλ PodTemplate μ ν¬λμ spec, μμ±μ μ§μ ν΄μ£Όλ©΄ λλ€.
μμ§ λ°°μ°μ§ μμμ§λ§ ReplicaSet μ κ²½μ°λ₯Ό κ°λ¨ν λ΄λ³΄μ.
apiVersion: v1
kind: ReplicaSet # ν¬λμ μμ 리μμ€μΈ λ ν리카 μ
metadata:
name: my-replicaset
spec:
replicas: 4
selector:
matchLabels:
app: my-pod-label
template: # Pod Template (ν¬νΈ μμ± μ μ)
metadata:
name: my-pod
labels:
app: my-pod-label
spec:
containers:
- name: nginx-pod
image: nginx
ports:
- containerPort: 80
kubectlλ‘ yml μ ν΄λΉ νλ ν¬λ μ€λΈμ νΈ μ€ννκΈ°
μ΄μ kubectl μ μ΄μ©ν΄μ μ°λ¦¬κ° λ§λ 2κ°μ§ yml νμΌμ μ΄μ©ν΄ ν¬λλ€μ ꡬλμμΌλ³΄μ.
- apply λͺ λ Ήμ΄λ₯Ό μ΄μ©νμ¬ yml νμΌ μ€ννκΈ°
- pods μν νμΈνκΈ°
- replica set μννμΈνκΈ°
apply λͺ λ Ήμ΄λ₯Ό μ΄μ©νμ¬ yml νμΌ μ€ννκΈ°
yml νμΌμ μ€ννλ λ°©λ²μλ λ€μν λ°©λ²λ€μ΄ μ‘΄μ¬νκ² μ§λ§ λνμ μΌλ‘ kubectl apply
λ₯Ό μ¬μ©νλ€.
apply λͺ λ Ήμ΄μλ μ΅μ μ μ€ μ μλλ° -f μ΅μ μ μ€μ yml νμΌμ μ€νμν€λλ‘ ν΄λ³΄μ.
$ kubectl apply -f my-pod.yml
pod/my-pod created
$ kubectl apply -f my-replicaset.yml
replicaset.apps/my-replicaset created
κ·ΈλΌ μμ κ°μ΄ created μνλ‘ ν¬λμ replicasetμ΄ λͺ¨λ μ μμ±λμλ€.
pods μν νμΈνκΈ°
pod μνλ₯Ό νμΈνκΈ° μν΄μλ kubectl get pods
λͺ
λ Ήμ΄λ₯Ό μ¬μ©νλ€.
podλ§ μμ±ν ymlκ³Ό replicset μΌλ‘ μμ±ν ν¬λκ° μ μμ μΌλ‘ μ λμμ‘λμ§ νμΈν΄λ³΄μ.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 0 3m55s
my-replicaset 1/1 Running 0 2m51s
my-replicaset 1/1 Running 0 2m51s
my-replicaset 1/1 Running 0 2m51s
my-replicaset 1/1 Running 0 2m51s
κ·ΈλΌ μμ κ°μ΄ ν¬λκ° μ λμνλ κ²μ λ³Ό μ μλ€.