06D. NodePort๋ก ์๋น์ค ์์ฑํ๊ธฐ
06D. NodePort๋ก ์๋น์ค ์์ฑํ๊ธฐ ๊ด๋ จ
์ง๊ธ๊น์ง Minikube์ ํ๊ณ๋ก ์ธํด ์๋น์ค๋ฅผ ์์ฑํ ๋ type
์ ClusterIP
๋ก ๋ง๋ค๊ณ kubectl port-forward
๋ก๋ง ์ค์ต์ ํด๋ณด์์ต๋๋ค. ์ด๋ฒ์๋ Vagrant์ VirtualBox๋ก ๊ตฌ์ถํ ์ ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ์๋น์ค type
์ NodePort
๋ก ๋ง๋ค์ด์ ์ค์ต์ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ค์ ๋ด์ฉ์ deployment.yaml
ํ์ผ๋ก ์ ์ฅํฉ๋๋ค. ์ด ๋ํ๋ก์ด๋จผํธ๋ Nginx ํ๋๋ฅผ 3๊ฐ ์์ฑํ๋๋ฐ, ๋ชจ๋ ์์ปค ๋
ธ๋(worker1, 2, 3)์ 1๊ฐ์ฉ ๊ณ ๋ฅด๊ฒ ์์ฑํฉ๋๋ค. affinity
๋ถ๋ถ์ด ์๋นํ ๋ณต์กํด๋ณด์ด์ง๋ง, ์์ธํ ๋ณด๋ฉด ํฌ๊ฒ ์ด๋ ค์ธ ๊ฒ์ด ์์ต๋๋ค. podAntiAffinity
๋ ์ด๋ฆ ๊ทธ๋๋ก ๊ด๋ จ์ฑ ์์(anti-affinity)์ด๋ผ๋ ์๋ฏธ๋ก requiredDuringSchedulingIgnoredDuringExecution
(์ค์ผ์ฅด๋งํ๋ ๋์ ๊ผญ ํ์ํ ์กฐ๊ฑด)๊ณผ ์กฐํฉํ์ฌ ํด๋น ํธ์คํธ(topologyKey: 'kubernetes.io/hostname'
)์ ํ๋๊ฐ ์์ฑ๋์ด ์์ง ์์ผ๋ฉด ํ๋๋ฅผ ์์ฑํ๋ค๋ ์๋ฏธ์
๋๋ค.
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-nginx
spec:
replicas: 3
selector:
matchLabels:
app: hello-nginx
template:
metadata:
labels:
app: hello-nginx
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- hello-nginx
topologyKey: 'kubernetes.io/hostname'
containers:
- name: hello-nginx
image: nginx:latest
ports:
- containerPort: 80
๋ค์ ๋ช
๋ น์ ์คํํ์ฌ deployment.yaml
ํ์ผ๋ก ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํฉ๋๋ค.
kubectl create -f deployment.yaml
#
# deployment.apps/hello-nginx created
์ ๋ง ํ๋๊ฐ ๊ฐ ๋
ธ๋์ ๊ณ ๋ฅด๊ฒ ์์ฑ๋์๋์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค. kubectl get pod
๋ช
๋ น์ ํ๋๋ง ์ถ๋ ฅํ๋ ๋ช
๋ น์
๋๋ค.
kubectl get pod -l app=hello-nginx -o wide
#
# NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
# hello-nginx-648486ccd-4shxl 1/1 Running 0 157m 10.244.1.5 worker1 <none> <none>
# hello-nginx-648486ccd-7jb46 1/1 Running 0 153m 10.244.3.5 worker3 <none> <none>
# hello-nginx-648486ccd-qjvkx 1/1 Running 0 153m 10.244.2.5 worker2 <none> <none>
-l
์ต์
์ ํน์ ๋ ์ด๋ธ์ ๊ฐ์ ธ์ค๊ฒ ๋ค๋ ๋ป์ด๊ณ , -o
์ต์
์ ์ถ๋ ฅ ๋ฐฉ์์ ๊ฒฐ์ ํ๋๋ฐ, wide
๋ฅผ ์ค์ ํ์ฌ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋๋ก ํ์ต๋๋ค. NODE ๋ถ๋ถ์ ๋ณด๋ฉด worker1, 2, 3์ ๊ณ ๋ฅด๊ฒ ํ๋๊ฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Nginx ์๋น์ค
์ด๋ฒ์๋ ์๋น์ค๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. ๋ค์ ๋ด์ฉ์ service.yaml
ํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-nginx
spec:
selector:
app: hello-nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
์ด ์๋น์ค๋ type
์ด NodePort
๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ฆ, ๊ฐ ๋
ธ๋์ ํฌํธ๋ก ์๋น์ค๋ฅผ ๋
ธ์ถํ๊ฒ ๋ค๋ ๋ป์
๋๋ค.
๋ค์ ๋ช
๋ น์ ์คํํ์ฌ service.yaml
ํ์ผ๋ก ์๋น์ค๋ฅผ ์์ฑํฉ๋๋ค.
kubectl create -f service.yaml
#
# service/hello-nginx created
์ด์ ์๋น์ค์ ํฌํธ ๋ฒํธ๋ฅผ ์กฐํํด๋ณด๊ฒ ์ต๋๋ค. kubectl get service
๋ช
๋ น์ ์๋น์ค๋ง ์ถ๋ ฅํ๋ ๋ช
๋ น์
๋๋ค.
kubectl get service
#
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# hello-nginx NodePort 10.108.89.52 <none> 80:31490/TCP 163m
# kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10h
hello-nginx
์๋น์ค์ PORT(S) ๋ถ๋ถ์ ๋ณด๋ฉด 80:31490/TCP๋ผ๊ณ ๋์ค๋๋ฐ, 80:๋ค์ ์๋ ํฌํธ๊ฐ ๋
ธ๋์ ์ด๋ฆฐ ํฌํธ ๋ฒํธ์
๋๋ค. ์ฃผ์ํ ์ ์ ์ด ํฌํธ ๋ฒํธ๊ฐ ์๋น์ค๋ฅผ ์์ฑํ ๋ ๋ง๋ค, ํด๋ฌ์คํฐ ๋ง๋ค ๊ฐ์ ๋ค๋ฅด๊ฒ ๋์จ๋ค๋ ์ ์
๋๋ค. ๋ฐ๋ผ์ ์ด ๋ฌธ์์ ์ผ์นํ์ง ์์ ์ ์์ต๋๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ ๋ค์ URL์ ๊ฐ๊ฐ ์ ์ํ๋ฉด **Welcome to nginx!**๊ฐ ํ์๋ ๊ฒ์ ๋๋ค.
- worker1: http://192.168.56.11:<๋ ธ๋ ํฌํธ>
- worker2: http://192.168.56.12:<๋ ธ๋ ํฌํธ>
- worker3: http://192.168.56.13:<๋ ธ๋ ํฌํธ>