배포를 통한 쿠버네티스 체험

sua·2022년 9월 17일
0
post-thumbnail

배포를 통해 확인하는 파드(Pod)

애플리케이션(NGINX) 배포

마스터 노드(m-k8s)에서 워크노드(w1,2,3)들이 NGINX 애플리케이션을 배포하도록 명령한다.

파드(Pod)란?

파드 : 컨테이너의 집합
하지만, 대부분은 하나의 컨테이너가 하나의 파드로 이루어진 경우가 많다.

파드 배포 실습

  1. supperPutty 접속

  2. nginx 배포

kubectl run nginx --image=nginx

  1. pod 확인
kubectl get pod

  1. pod id 확인하기
kubectl get pod -o wide

  1. nginx 실행
curl (pod id)



파드를 외부에서도 접속하게 하는 서비스

배포한 파드가 외부에서 접근 안되는 것을 확인

  1. cmd에 curl 명령어로 확인

    -> 안되는 것을 알 수 있음

현재 쿠버네티스 상태

쿠버네티스 클러스터 안에 마스터노드, 워커 노드들이 있는데 이를 밖에서도 사용할 수 있게 하려면 어떤 문을 통과해야 됨.
1. 해결 방법 1번 - 문을 날려버리기 -> 쿠버네티스에 보안이 취약해짐
2. 해결 방법 2번 - 문 밖에 안전한 구역을 만들어줌. 서비스라고 불리는 서비스영역에 배포한 노드를 연결해주면 노드들이 서비스를 통해서 파드를 찾아감 -> 안전하게 사용 가능


서비스를 통해서 외부와 연결되는 파드 실습

  1. 파드를 노출 시키기
kubectl expose pod nginx --type=NodePort --port=80

  1. 노출된 파드 확인하기
kubectl get service


=> NodePort라는 타입으로 nginx가 expose 됐음을 알 수 있음 밖으로 노출된 포트는 32096임을 알 수 있음

  1. 노드에 대한 정보 확인하기
kubectl get nodes -o wide


=> 각 노드별로 IP 주소 확인 가능함

  1. 웹 브라우저를 통해 확인하기
    http://192.168.1.101:32096/ 로 접속하기

    -> 성공



파드와 디플로이먼트(Deployment) 차이

현재 문제점 : 파드가 1개 밖에 없어서 파드가 죽으면 그 파드를 받아줄 곳이 없어짐
-> 파드를 여러 개 사용해야 함

우리가 원하는 파드 배포 모습

파드가 1개가 아닌 여러개에 배포가 되어서 문제가 생겨도 다른 파드들이 받아줄 수 있게 돼야 함. 이것을 Deployment가 도와줌

파드와 디플로이먼트 비교

파드는 1개라면, 디플로이먼트는 파드를 여러 개 가지고 있는 단위임

디플로이먼트 배포 방법

쿠버네티스 1.8 버전으로는 kubectl run으로 pod는 배포할 수 있지만, deploy는 배포하지 못함
그러므로 deployment를 배포하려면 kubectl create나 kubectl apply를 사용해야 한다.


디플로이먼트를 통해 파드 배포하기

  1. deployment 배포하기
kubectl create deployment deploy-nginx --image=nginx

  1. 확인해보기
kubectl get pods


-> 배포 완료 됨을 알 수 있음

  1. pod 정보 확인하기
kubectl get pods -o wide


-> IP가 172.16.103.129 임을 알 수 있음

  1. 배포된 것 확인해보기
curl 172.16.103.129


-> 성공


디플로이먼트로 다수의 파드를 배포한다는 것은?

ReplicaSet이란 것의 도움을 받아야 함.
ReplicaSet의 디폴트값이 1이고 이것을 원하는 개수만큼 바꿔주면 파드가 늘어난다.


파드의 배포 수 늘리기

  1. 파드의 배포 수 늘리기
kubectl scale deployment deploy-nginx --replicas=3

  1. 파드 확인하기
kubectl get pods


-> 3개로 파드가 늘어났음을 알 수 있음



외부로 노출하는 더 좋은 방법인 로드밸런서(LoadBalancer)

디플로이먼트를 노드포트로 노출

  1. 노출시키기
kubectl expose deployment deploy-nginx --type=NodePort --port=80

  1. 서비스 확인하기
kubectl get services


-> 노출한 deployment의 포트번호가 30723임을 알 수 있음

  1. 웹브라우저로 접속해보기
    http://192.168.1.101:30723/ 다음 주소로 접속

    -> 성공

=> 사용자에게 IP주소를 알려주면 보완상 좋지 않음. 즉, 노드포트외에 다른 방법을 사용해야 함


디플로이먼트를 노출하는 가장 좋은 방법

MetalLB를 이용해서 로드밸런서로 타입을 선언할 수 있도록 한다.
그리고, nginx는 구별이 힘들기 때문에 강의해서 제공하는 chk-hn을 사용할 것임.

노드포트보다 로드밸런서가 좋은 점

  1. IP주소를 알려주지 않아도 됨
  2. 가야할 경로를 최적화해서 구현할 수 있음

디플로이먼트를 로드밸런서로 배포

  1. 로드밸런서를 설치할 수 있도록 도와주는 애플리케이션 다운
kubectl apply -f ./metallb.yaml

  1. 디플로이먼트 생성
kubectl create deployment chk-hn --image=sysnet4admin/chk-hn

  1. scale 개수 늘리기
kubectl scale deployment chk-hn --replicas=3

  1. pod 확인해보기
kubectl get pods

  1. deployment 노출시키기
kubectl expose deployment chk-hn --type=LoadBalancer --port=80

  1. 서비스 확인해보기
kubectl get services


=> 서비스가 잘 생성되었고, external-ip가 입력이 되어있음. 따라서, 노드포트 알려줄 필요없이 해당 ip를 알려주면 접속 가능함



배포한 것들 삭제하기

  1. 배포한 서비스 삭제
kubectl delete service chk-hn
kubectl delete service deploy-nginx
kubectl delete service nginx

  1. 삭제 되었는지 확인
kubectl get service

  1. 배포한 디플로이먼트 및 파드 삭제
kubectl delete deployment chk-hn
kubectl delete deployment deploy-nginx
kubectl delete pod nginx

  1. 삭제 되었는지 확인
kubectl get pods

  1. metallb 삭제
kubectl delete -f ./metallb.yaml

profile
가보자고

0개의 댓글