Cloud Native Spring in Action

쿠버네티스로 컨테이너 관리

기록해연 2025. 1. 7. 19:10

2.4 쿠버네티스로 컨테이너 관리 (68p)

 

컨테이너 구성에는 컨테이너 런타임이 있는 컴퓨터 필요.

쿠버네티스를 사용하면 오케스트레이션 구성이기 때문에 클러스터 필요.

 

※클러스터 Cluster

컨테이너화된 애플리케이션을 실행하는 작업자 머신(노드 node)의 집합.

 

모든 클러스터에서는 적어도 하나의 작업자 노드가 존재.

미니큐브 사용시 로컬 머신에서 쉽게 단일 노드 클러스터 생성 가능.

 

→ 프로덕션, 즉 실제 서비스 환경에서는 클라우드 공급자가 관리하는 클러스터 사용.

 

※작업자 노드 worker node

쿠버네티스 클러스터에는 작업자노드라는 머신이 여러 대 존재할 수 있는데, 이 작업자 노드에 컨테이너화된 애플리케이션이 배포됨. 컨테이너가 실행하고 네트워크에 연결할 수 있도록 작업자 노드는 CPU, 메모리, 네트워크, 스토리지 등을 제공.

 

※컨트롤 플레인 control plane

컨트롤 플레인은 작업자 노드를 관리하는 컨테이너 오케스트레이션 계층. API 및 인터페이스를 통해 컨테이너의 라이프사이클을 정의, 배포, 관리한다.

 

※파드 pod

가장 작은 배포 단위. 하나 이상의 컨테이너 포함.

일반적으로 하나의 파드에는 애플리케이션이 하나만 있으나 핵심 애플리케이션을 지원하기 위한 컨테이너가 추가로 포함될 수 있음. 쿠버네티스는 컨테이너를 직접 관리하지 않고 파드를 관리.

 

※배포 deployment

배포 객체를 통해 애플리케이션에 대해 원하는 배포 상태를 쿠버네티스에 알림. 각 인스턴스에 대해 파드를 만들고 잘 작동하도록 관리. 여러개의 파드를 하나의 집합체로 관리.

 

※서비스 service

서비스 정의를 통해 배포(파드 집합)는 클러스터 내의 다른 노드나 외부로 노출됨. 서비스는 파드 인스턴스들이 균일한 부하를 갖도록 관리.

 

※리소스 매니페스트 resource manifest

애플리케이션에 대해 원하는 상태를 기술하는 파일. 일반적으로 yaml을 사용하여 작성.

 


minikube 실행해주고 (minikube start 명령어 입력 혹은 도커 데스크탑앱에서 실행버튼 클릭) 다음 명령어 실행.

minikube image load catalog-service:0.0.1-SNAPSHOT

 

파드는 배포의 단위지만, 우리가 직접 파드 관리X. 쿠버네티스가 처리.

파드는 애플리케이션 인스턴스라 영구적이지 않고 언제든 제거 가능.

 

kubectl create deployment catalog-service --image=catalog-service:0.0.1-SNAPSHOT

명령어 의미
kubectl create 쿠버네티스 리소스 생성
deployment 생성할 리소스 유형
catalog-service 배포 이름
--image=catalog-service:0.0.1-SNAPSHOT 실행할 이미지의 이름과 버전

 

명령어 실패 해서 status 확인해보니 stopped 라 다시 start시켜줌(서버키고 한참뒤에 블로그 정리하다 실행했더니 그 사이 끊긴듯)

생성 성공

 

생성된 파드 객체 확인

kubectl get pod

파드 객체 확인

 

kubectl logs deployment/catalog-service 명령어로 애플리케이션 로그 확인 가능.

 

서비스 리소스를 통해 카탈로그 서비스를 클러스터에 노출.

kubectl expose deployment catalog-service --name=catalog-service --port=8080

명령어 의미
kubectl expose  쿠버네티스 리소스 노출
deployment 노출할 리소스 유형
catalog-service 노출할 배포 이름
--name=catalog-service 서비스 이름
--port=8080 서비스를 노출할 포트 번호

 

kubectl get service catalog-service 명령어로 서비스가 잘 생성되었는지 확인

서비스 확인

 

이제 컴퓨터의 로컬 포트(ex. 9000)로부터 클러스터 내에서 서비스에 노출된 포트(8080)로 트래픽 전달 가능.

 

kubectl port-forward service/catalog-service 9000:8080 명령어를 통해 포트 포워딩이 올바르게 설정되었는지 확인.

 

명령어 의미
kubectl port-forward 포트 포워딩 명령
service/catalog-service 노출할 리소스
9000 로컬 호스트의 포트
:8080 서비스 포트

 

브라우저창을 열어 로컬페이지로 이동해 9000번 포트로 로컬 사이트 열리는지 확인.

(8080으로는 지금은 열리지 않음)

포워딩 성공

ctrl c 를 눌러 포트 포워딩 종료.

kubectl delete service catalog-service 실행하여 서비스 삭제.

kubectl delete deployment catalog-service 실행하여 배포 객체도 삭제.

minikube stop 실행하여 쿠버네티스 클러스터 중지.

 

서비스와 배포객체 제거, 클러스터 중지