Link Search Menu Expand Document

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

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

애플리케이션(NGINX) 배포

배포를 통한 쿠버네티스 체험 - 01 배포를 통해 확인하는 파드(Pod)

  • 마스터 노드에서 kubectl을 통하여 워커 노드에 애플리케이션을 배포하는 명령을 보냄

파드(Pod)란?

배포를 통한 쿠버네티스 체험 - 02 배포를 통해 확인하는 파드(Pod)

  • 하나의 일을 하기 위해 묶여진 컨테이너의 집합
  • 볼륨 : 지속적으로 저장되어야 하는 데이터를 저장

파드 배포 실습

  1. kubectl run nginx --image=nginx : nginx 이미지를 사용하여 파드 생성
  2. kubectl get pod : 파드 정보 조회
  3. kubectl get pod -o wide : 파드의 자세한 정보를 조회
  4. curl 172.16.132.1 : 파드의 주소로 요청

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

서비스가 없는 쿠버네티스 상태

배포를 통한 쿠버네티스 체험 - 03 파드를 외부에서도 접속하게 하는 서비스(Service)

  • 쿠버네티스 클러스터 밖으로 나가기 위해서는 문을 통과해야 하지만 문은 현재 닫혀있음
  • 쿠버네티스 클러스터의 내부와 외부를 연결하기 위한 영역인 서비스(Service)를 연결해야 함

서비스를 연결한 쿠버네티스 상태

배포를 통한 쿠버네티스 체험 - 04 파드를 외부에서도 접속하게 하는 서비스(Service)

  • 파드와 서비스는 직접 연결된 것이 아님
  • 서비스는 NodePort와 연결되어 있고 각 NodePort가 통신을 하며 파드의 위치를 찾는 구조

서비스 연결 실습

  1. kubectl expose pod nginx --type=NodePort --port=80 : 파드의 80번 포트를 노출
  2. kubectl get service : 생성된 서비스를 조회
  3. kubectl get node -o wide : 노드의 IP를 포함한 자세한 정보를 조회
    • INTERNAL-IP : 외부에 노출되는 IP
  4. 외부 환경에서 curl 192.168.1.101:32630 : 노드의 주소로 요청

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

파드를 여러 개 사용하려면?

  • 파드를 하나만 사용할 경우 파드가 중지된다면 서비스를 제공할 수 없음
  • 따라서 여러 개의 파드를 사용해야 함

    현재 파드 배포

  • 실제로는 워커 노드 중 무작위 하나의 노드에 파드가 배포 됨

배포를 통한 쿠버네티스 체험 - 05 파드와 디플로이먼트(Deployment) 차이

원하는 파드 배포

  • Deployment를 사용하여 한 노드가 중지되더라도 다른 노드가 서비스를 처리해야 함

배포를 통한 쿠버네티스 체험 - 06 파드와 디플로이먼트(Deployment) 차이

파드와 디플로이먼트 비교

  • 디플로이먼트는 여러 개의 파드를 묶어놓은 구조
  • kubectl run: 파드 배포 가능, 디플로이먼트 배포 불가
  • kubectl create: 파드, 디플로이먼트 모두 배포 가능
  • kubectl apply: 파드, 디플로이먼트를 yaml 파일에 기록된 설정대로 배포

배포를 통한 쿠버네티스 체험 - 07 파드와 디플로이먼트(Deployment) 차이

디플로이먼트 배포 실습

  1. kubectl create deployment deploy-nginx --image=nginx : 디플로이먼트 배포
    • kubectl create 명령어는 배포하려는 요소 이름을 써야 함
    • 여러 개의 동일한 파드가 생성될 수 있기 때문에 Hashcode를 이용하여 파드의 이름을 구분
  2. kubectl get pods : 파드 정보 조회

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

  • replicas 값을 변경하는 것으로 파드의 개수를 변경 가능
  • kubectl scale deployment deploy-nginx --replicas==3 : 디플로이먼트의 replicas 값을 변경하여 파드 개수 변경

배포를 통한 쿠버네티스 체험 - 08 파드와 디플로이먼트(Deployment) 차이

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

노드포트로 노출한 상태

  • kubectl expose deployment deploy-nginx --type=NodePort --port=80
  • 서비스를 위하여 각 파드의 주소를 공개해야 함

배포를 통한 쿠버네티스 체험 - 09 외부로 노출하는 더 좋은 방법인 로드밸런서(LoadBalancer)

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

  • 파드의 주소를 공개할 필요가 없음
  • 요청 경로 최적화

배포를 통한 쿠버네티스 체험 - 10 외부로 노출하는 더 좋은 방법인 로드밸런서(LoadBalancer)

로드밸런서 배포 실습

  1. kubectl apply -f metallb.yaml : MetalLB 설치
  2. kubectl create deployment chk-hn --image=sysnet4admin/chk-hn 디플로이먼트 배포
    • 개인 사용자의 이미지를 사용할 경우 --image=userName/imageName 형태로 입력
  3. kubectl scale deployment chk-hn --replicas=3 : 노드 개수 변경
  4. kubectl expose deployment chk-hn --type=LoadBalancer --port=80 : 로드밸런서 노출
  5. kubectl get services : 로드밸런서 IP 확인
  6. curl 192.168.1.11 : 로드밸런서 IP로 요청

배포한 것들 삭제하기

  • kubectl delete TYPE NAME

정리

  • 파드(Pod) : 한 가지 목적을 위하여 컨테이너(애플리케이션)을 모아놓은 것
  • 디플로이먼트(Deployment) : 파드를 모아놓은 것
  • 서비스(Service) : 쿠버네티스의 외부와 내부를 연결
    • NodePort, LoadBalancer