배포를 통한 쿠버네티스 체험
배포를 통해 확인하는 파드(Pod)
애플리케이션(NGINX) 배포
- 마스터 노드에서 kubectl을 통하여 워커 노드에 애플리케이션을 배포하는 명령을 보냄
파드(Pod)란?
- 하나의 일을 하기 위해 묶여진 컨테이너의 집합
- 볼륨 : 지속적으로 저장되어야 하는 데이터를 저장
파드 배포 실습
kubectl run nginx --image=nginx
: nginx 이미지를 사용하여 파드 생성kubectl get pod
: 파드 정보 조회kubectl get pod -o wide
: 파드의 자세한 정보를 조회curl 172.16.132.1
: 파드의 주소로 요청
파드를 외부에서도 접속하게 하는 서비스(Service)
서비스가 없는 쿠버네티스 상태
- 쿠버네티스 클러스터 밖으로 나가기 위해서는 문을 통과해야 하지만 문은 현재 닫혀있음
- 쿠버네티스 클러스터의 내부와 외부를 연결하기 위한 영역인 서비스(Service)를 연결해야 함
서비스를 연결한 쿠버네티스 상태
- 파드와 서비스는 직접 연결된 것이 아님
- 서비스는 NodePort와 연결되어 있고 각 NodePort가 통신을 하며 파드의 위치를 찾는 구조
서비스 연결 실습
kubectl expose pod nginx --type=NodePort --port=80
: 파드의 80번 포트를 노출kubectl get service
: 생성된 서비스를 조회kubectl get node -o wide
: 노드의 IP를 포함한 자세한 정보를 조회INTERNAL-IP
: 외부에 노출되는 IP
- 외부 환경에서
curl 192.168.1.101:32630
: 노드의 주소로 요청
파드와 디플로이먼트(Deployment) 차이
파드를 여러 개 사용하려면?
- 파드를 하나만 사용할 경우 파드가 중지된다면 서비스를 제공할 수 없음
- 따라서 여러 개의 파드를 사용해야 함
현재 파드 배포
- 실제로는 워커 노드 중 무작위 하나의 노드에 파드가 배포 됨
원하는 파드 배포
- Deployment를 사용하여 한 노드가 중지되더라도 다른 노드가 서비스를 처리해야 함
파드와 디플로이먼트 비교
- 디플로이먼트는 여러 개의 파드를 묶어놓은 구조
kubectl run
: 파드 배포 가능, 디플로이먼트 배포 불가kubectl create
: 파드, 디플로이먼트 모두 배포 가능kubectl apply
: 파드, 디플로이먼트를 yaml 파일에 기록된 설정대로 배포
디플로이먼트 배포 실습
kubectl create deployment deploy-nginx --image=nginx
: 디플로이먼트 배포kubectl create
명령어는 배포하려는 요소 이름을 써야 함- 여러 개의 동일한 파드가 생성될 수 있기 때문에 Hashcode를 이용하여 파드의 이름을 구분
kubectl get pods
: 파드 정보 조회
디플로이먼트로 다수의 파드를 배포한다는 것은?
replicas
값을 변경하는 것으로 파드의 개수를 변경 가능kubectl scale deployment deploy-nginx --replicas==3
: 디플로이먼트의 replicas 값을 변경하여 파드 개수 변경
외부로 노출하는 더 좋은 방법인 로드밸런서(LoadBalancer)
노드포트로 노출한 상태
kubectl expose deployment deploy-nginx --type=NodePort --port=80
- 서비스를 위하여 각 파드의 주소를 공개해야 함
노드포트보다 로드밸런서가 좋은 점
- 파드의 주소를 공개할 필요가 없음
- 요청 경로 최적화
로드밸런서 배포 실습
kubectl apply -f metallb.yaml
: MetalLB 설치kubectl create deployment chk-hn --image=sysnet4admin/chk-hn
디플로이먼트 배포- 개인 사용자의 이미지를 사용할 경우
--image=userName/imageName
형태로 입력
kubectl scale deployment chk-hn --replicas=3
: 노드 개수 변경kubectl expose deployment chk-hn --type=LoadBalancer --port=80
: 로드밸런서 노출kubectl get services
: 로드밸런서 IP 확인curl 192.168.1.11
: 로드밸런서 IP로 요청
배포한 것들 삭제하기
정리
- 파드(Pod) : 한 가지 목적을 위하여 컨테이너(애플리케이션)을 모아놓은 것
- 디플로이먼트(Deployment) : 파드를 모아놓은 것
- 서비스(Service) : 쿠버네티스의 외부와 내부를 연결