https://xodwkx2.tistory.com/21

 

일단 쿠버네티스 deployment 생성하기

일단 쿠버네티스 pod 만들기 (tistory.com) 일단 쿠버네티스 pod 만들기 https://xodwkx2.tistory.com/7 Node.js 기반 Docker Image 만들기 - 1 https://nodejs.org/ko/docs/guides/nodejs-docker-webapp/ Node.js..

xodwkx2.tistory.com

 

여기에서 deployment 생성하고 deployment가 만든 pod의 8080 포트로 접속해서 호스트네임을 응답하는 것 까지 확인했어요.

 

replicas=3으로 수정하고 하나씩 확인해볼게요.

get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP          NODE        NOMINATED NODE   READINESS GATES
mydep-b7d586bf8-4b5kg   1/1     Running   0          13h   10.36.0.1   k8s-node2   <none>           <none>
mydep-b7d586bf8-4z5xr   1/1     Running   0          13h   10.47.0.1   k8s-node3   <none>           <none>
mydep-b7d586bf8-trgds   1/1     Running   0          12h   10.36.0.2   k8s-node2   <none>           <none>

curl 10.36.0.1:8080
mydep-b7d586bf8-4b5kg

curl 10.47.0.1:8080
mydep-b7d586bf8-4z5xr

curl 10.36.0.2:8080
mydep-b7d586bf8-trgds

 

각각 pod IP로 접속해서 확인해야 돼요.

각각 pod IP로 따로 접속하는 방법 말고 ClusterIP라는 걸로 단일 진입점을 만들고 그 단일 진입점으로 접속했을 때

각각 pod로 접속이 된다면 좋을 것 같아요.

kubectl expose deployment mydep --port=8000 --target-port=8080

# 결과
service/mydep exposed

# 확인
kubectl get all -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP          NODE        NOMINATED NODE   READINESS GATES
pod/mydep-b7d586bf8-4b5kg   1/1     Running   0          13h   10.36.0.1   k8s-node2   <none>           <none>
pod/mydep-b7d586bf8-4z5xr   1/1     Running   0          13h   10.47.0.1   k8s-node3   <none>           <none>
pod/mydep-b7d586bf8-trgds   1/1     Running   0          12h   10.36.0.2   k8s-node2   <none>           <none>

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   SELECTOR
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP    19h   <none>
service/mydep        ClusterIP   10.101.44.194   <none>        8000/TCP   5s    app=mydep

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS     IMAGES                       SELECTOR
deployment.apps/mydep   3/3     3            3           13h   show-me-host   xodwkx2/show-me-host:1.0.0   app=mydep

NAME                              DESIRED   CURRENT   READY   AGE   CONTAINERS     IMAGES                       SELECTOR
replicaset.apps/mydep-b7d586bf8   3         3         3       13h   show-me-host   xodwkx2/show-me-host:1.0.0   app=mydep,pod-template-hash=b7d586bf8

 

kubectl get all 하면 뭐가 얼마나 있는지 한눈에 확인할 수 있어서 좋아요.

-o wide를 추가하면 좀 더 자세하게 볼 수 있는데요.

service/mydep이 expose를 하면서 만들어진 거고 TYPE은 ClusterIP라는 것을 알 수 있네요.

그리고 10.101.44.194라는 IP가 보이고 PORT(s)는 8000/TCP라는 거 같은데  저 주소로 curl을 해보아요.

curl 10.101.44.194:8000

# 6회 실행 결과
mydep-b7d586bf8-trgds
mydep-b7d586bf8-4b5kg
mydep-b7d586bf8-4b5kg
mydep-b7d586bf8-4z5xr
mydep-b7d586bf8-trgds
mydep-b7d586bf8-4b5kg

clusterIPfksms 10.101.44.194로 접속했을 때 각각 pod들이 돌아가면서 응답을 주는 걸 확인할 수 있네요.

라운드로빈 방식은 아닌 거 같고 누가 응답을 줄지는 어떻게 정해지는지 잘 모르겠어요.

 

이제 services의 mydep이 뭔지 자세하게 알아보려면 뭘 어떻게 해야 할까요?

kubectl describe service mydep 

# 결과			
Name:              mydep
Namespace:         default
Labels:            app=mydep
Annotations:       <none>
Selector:          app=mydep
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.101.44.194
IPs:               10.101.44.194
Port:              <unset>  8000/TCP
TargetPort:        8080/TCP
Endpoints:         10.36.0.1:8080,10.36.0.2:8080,10.47.0.1:8080
Session Affinity:  None
Events:            <none>

 

kubectl expose는 ClusterIP라는 type의 service를 만들고 CLUSTER-IP라는 것도 만들어 주고 열어달라고 한 8000/TCP PORT로 접근하면 Endpoints에 등록되어있는 mydep POD들의 각 IP:8080으로 연결해주네요.

 

이제 이 상태에서 deployments/mydep의 replicas=5로 늘려봐요.

kubectl scale deployments/mydep --replicas=5

deployment.apps/mydep scaled

# pods 확인
kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP          NODE        NOMINATED NODE   READINESS GATES
mydep-b7d586bf8-4b5kg   1/1     Running   0          13h   10.36.0.1   k8s-node2   <none>           <none>
mydep-b7d586bf8-4z5xr   1/1     Running   0          13h   10.47.0.1   k8s-node3   <none>           <none>
mydep-b7d586bf8-7mmjm   1/1     Running   0          16s   10.44.0.2   k8s-node1   <none>           <none>
mydep-b7d586bf8-trgds   1/1     Running   0          12h   10.36.0.2   k8s-node2   <none>           <none>
mydep-b7d586bf8-xwlql   1/1     Running   0          16s   10.44.0.1   k8s-node1   <none>           <none>

# services 확인
kubectl describe service mydep 
Name:              mydep
Namespace:         default
Labels:            app=mydep
Annotations:       <none>
Selector:          app=mydep
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.101.44.194
IPs:               10.101.44.194
Port:              <unset>  8000/TCP
TargetPort:        8080/TCP
Endpoints:         10.36.0.1:8080,10.36.0.2:8080,10.44.0.1:8080 + 2 more...
Session Affinity:  None
Events:            <none>

 

mydep service의 Endpoints에 2개 더 추가된 것을 확인할 수 있네요.

 

 

끝.