https://xodwkx2.tistory.com/21
여기에서 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개 더 추가된 것을 확인할 수 있네요.
끝.