์ฟ ๋ฒ๋คํฐ์ค๋ ์ปจํ ์ด๋๋ค์ 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
๊ทธ๋ผ ์์ ๊ฐ์ด ํฌ๋๊ฐ ์ ๋์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋๊ธ