Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

사고쳤어요

쿠버네티스 사용해보기 본문

웹 풀스택

쿠버네티스 사용해보기

kevinmj12 2025. 5. 14. 22:48

쿠버네티스란 컨테이너 오케스트레이션 솔루션이다.

이는 여러 개의 컨테이너들을 관리하면서 배포를 자동화하고 배포된 컨테이너의 동작 보증, 부하에 따른 동적 확장 등의 기능을 담당한다.

이런 특성 덕분에 쿠버네티스는 도커와 잘 어울리며 도커 컨테이너들을 클러스터 내에서 실행하고 관리하는 데 적합하다.

 

쿠버네티스가 제공하는 기능

  • 컨테이너 밸런싱
    • 포드의 부하 균등화를 수행하여 몇 개의 응용을 복제할 것인지를 알려주면 이를 알아서 처리해준다.
  • 트래픽 로드 밸런싱
    • 응용의 복제본이 둘 이상 있다면 쿠버네티스가 트래픽 부하 균등화를 수행하여 클러스터 내부에 적절히 분배해준다.
  • 동적 수평 스케일링
    • 인스턴스 수를 동적으로 확장하거나 감축하여 시스템 자원을 효율적으로 활용한다.
  • 오류 복구
    • 포드와 노드를 지속적으로 모니터링하고 장애가 발생하면 새 포드를 실행하여 지정된 복제본의 수를 유지한다.
  • 롤링 업데이트
    • 지연 시간을 적용하고 순차적으로 업데이트를 배포함으로써 문제가 발생하더라도 서비스를 정상 유지할 수 있다.
  • 스토리지 오케스트레이션(Storage Orchestration)
    • 원하는 응용에 다양한 스토리지 시스템을 마운트할 수 있다.
  • 서비스 디스커버리
    • 수명이 짧은 포드의 동적 성질을 관리하기 위해 자체 DNS 기반으로 서비스를 동적 바인딩할 수 있는 기능을 제공한다.

 

쿠버네티스의 기본 오브젝트

  • 포드(Pod)
    • 한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위이다.
    • 독립적인 공간과 사용 가능한 IP를 가지고 있으며 언제든지 사라질 수 있다.
  • 네임스페이스(Namespace)
    • 쿠버네티스 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹이다.
  • 볼륨(Volume)
    • 포드가 생성될 때 포드에서 사용할 수 있는 디렉토리를 제공한다.
  • 서비스(Service)
    • 유동적인 포드들에 대한 접속을 안정적으로 유지하도록 클러스터 내외부에 연결하는 역할을 수행한다.

 

  • Deployment
    • 응용의 배포를 위해 많이 이용되는 쿠버네티스의 오브젝트 형태이다.
    • 동일한 모습의 포드들의 복제본 모음인 레플리카셋을 일반적으로 이용한다.
    • 단순한 레플리카셋에 비하여 동적 업데이트 및 롤백, 배포 버전의 관리 등이 유연하다.
    • 보통 상태가 없는 응용의 배포에 이용된다.

 

로컬 환경에서 쿠버네티스 인프라 구축

먼저 Docker Desktop을 설치하고 실행한 뒤, 설정에 들어간다.

왼쪽 메뉴들에서 Kubernetes를 선택하고 Enable Kubernetes를 활성화해준 뒤 Apply & restart를 클릭한다.

성공적으로 적용되었다면, kubectl get nodes와 kubectl get pods 명령을 실행하였을 때 위와 같이 나오게 될 것이다.

 

kubectl run nginx-pod --image=nginx

위의 명령어를 통해 nginx 이미지를 받아와 포드를 생성한다.

 

kubectl create deployment dpy-nginx --image=nginx

이어서 위의 명령어를 통해 nginx 이미지를 받아와 deployment를 생성한다.

 

kubectl scale pod nginx-pod --replicas=3
kubectl scale deployment dpy-nginx --replicas=3

이어서 scale 명령어를 통해 pod과 deployment의 복제본을 3개 만들어보자

pod의 경우에는 에러가 발생하고 deployment는 성공적으로 복제된 것을 볼 수 있다.

이는 pod가 컨테이너가 실행되는 가장 기본 단위로 스스로 복제되지 않기 때문이다.

반면 deployment는 여러 pod를 제어하고 복제하며 관리하는 상위 리소스로 scale 명령이 가능하다.

따라서, pod를 복제하고 싶다면, 해당 pod의 스펙을 기반으로 Deployment, ReplicaSet, StatefulSet을 만들어야 한다.

 

kubectl expose pod nginx-pod --type=NodePort --name=pod-svc --port=80

위의 명령어를 통해 pod를 외부에 노출할 수 있는 서비스를 생성할 수 있다.

서비스를 NodePort 타입으로 만들어 외부 트래픽을 Node IP + 포트로 전달 가능하게 하였다.

 

실제로 kubectl get svc 명령을 통해 조회한 31610에 접속하면 위와 같이 페이지가 로드되는 것을 확인할 수 있다.

 

마찬가지로 deployment 또한 서비스로 생성할 수 있다.

 

 

 

kubectl delete pod nginx-pod

위 명령어를 통해 pod을 삭제할 수 있다.

 

그런데, 3개로 복제해두었던 deployment인 dpy-nginx를 삭제하려 하면 pod가 줄어들지 않는다.

정확히는 삭제하려 했던 pod가 제거되고 새로운 pod가 생겨난다.

이는 deployment에 3개의 pod를 유지하기 위해 새로운 pod를 생성하였기 때문이다.

 

따라서 deployment 기반의 pod을 삭제하기 위해서는 deployment를 제거해야 한다.

그럴 경우 위와 같이 pod가 성공적으로 삭제된 것을 확인할 수 있다.