* 프로그래머스, 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 5기 강의 수강 내용을 정리하는 포스팅.

* 원활한 내용 이해를 위해 수업에서 제시된 자료 이외에, 개인적으로 조사한 자료 등을 덧붙이고 있음.


1. 배경 설명

Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈 소스 플랫폼입니다.
구글에서 시작되어 현재는 CNCF(Cloud Native Computing Foundation)에서 관리되고 있으며, 복잡해진 컨테이너 기반 인프라를 효율적으로 운영할 수 있도록 돕습니다.


2. Kubernetes의 개념 및 사용 이유

2.1 Kubernetes의 개념

  • 클러스터(Cluster):
    여러 대의 서버(노드)로 구성되어 하나의 통합된 리소스 풀을 형성합니다.
  • 노드(Node):
    클러스터 내에서 애플리케이션 컨테이너를 실행하는 개별 서버로, 마스터 노드워커 노드로 구분됩니다.
  • Pod:
    하나 이상의 컨테이너를 포함하는 가장 작은 배포 단위로, 동일한 네트워크 네임스페이스를 공유합니다.
  • Deployment & ReplicaSet:
    애플리케이션 배포, 업데이트, 스케일링을 관리하며, 원하는 상태를 유지하도록 합니다.
  • Service:
    외부 트래픽을 Pod로 전달해 로드 밸런싱 역할을 하며, 지속적인 네트워킹을 제공합니다.

2.2 사용 이유

  • 자동화된 컨테이너 오케스트레이션:
    수많은 컨테이너를 효율적으로 관리할 수 있어, 서비스 확장과 장애 복구가 용이합니다.
  • 자가 치유(Self-Healing):
    실패한 컨테이너를 자동으로 재시작하거나 교체하여 안정적인 서비스를 유지합니다.
  • 효율적인 자원 활용:
    노드의 리소스를 최적화하여 애플리케이션이 필요한 만큼 자동으로 스케일링됩니다.
  • 서비스 디스커버리 및 로드 밸런싱:
    내부 및 외부 네트워킹을 통해 애플리케이션 접근성을 높입니다.

3. 웹 개발 파이프라인 내 Kubernetes의 역할

웹 개발 파이프라인에서 Kubernetes는 다음과 같은 역할을 수행합니다.

  1. CI/CD 배포 자동화:
    소스 코드 변경 후, 빌드 및 테스트를 거쳐 Kubernetes 클러스터에 자동으로 애플리케이션을 배포할 수 있습니다.
  2. 마이크로서비스 아키텍처 지원:
    여러 개의 독립된 서비스(예: 웹 서버, 데이터베이스, 캐시 등)를 각각의 Pod로 관리하며, 서비스 간 네트워킹을 용이하게 합니다.
  3. 롤링 업데이트 및 롤백:
    애플리케이션 업데이트 시 무중단 배포를 지원하며, 문제 발생 시 이전 버전으로 신속하게 복구할 수 있습니다.
  4. 모니터링 및 로깅:
    클러스터 상태 및 애플리케이션 로그를 실시간으로 모니터링해 운영의 안정성을 보장합니다.

4. Kubernetes의 주요 개념 및 구성 요소

  • 클러스터(Cluster):
    여러 노드로 구성된 인프라의 집합.
  • 노드(Node):
    컨테이너를 실행하는 서버; 마스터와 워커 노드로 구분.
  • Pod:
    하나 이상의 컨테이너를 묶어 실행하는 최소 단위.
  • Deployment:
    Pod의 배포와 관리를 자동화하여 원하는 상태를 유지.
  • Service:
    Pod에 대한 지속적인 네트워크 접근성을 제공하며, 로드 밸런싱을 지원.
  • ConfigMap/Secret:
    애플리케이션 설정 및 민감 정보를 외부에서 안전하게 관리.

이와 같은 구성 요소들이 서로 협력하여 컨테이너화된 애플리케이션의 효율적인 운영과 관리를 가능하게 합니다.


5. Windows 환경에서 Kubernetes 설치 및 사용 방법

Windows 환경에서는 로컬에서 Kubernetes 클러스터를 구성하는 방법으로 Docker Desktop의 Kubernetes 기능 활성화 또는 Minikube를 사용하는 두 가지 주요 방식을 활용할 수 있습니다.

5.1 Docker Desktop을 이용한 Kubernetes 활성화

  1. Docker Desktop 다운로드 및 설치
  2. Kubernetes 활성화
    • Docker Desktop 실행 후, Settings > Kubernetes 메뉴에서 "Enable Kubernetes" 옵션을 선택합니다.
  3. 설치 확인
    • 명령 프롬프트나 PowerShell에서 다음 명령어로 클러스터 상태를 확인합니다.
      kubectl get nodes
    • 정상적으로 노드 정보가 출력되면 Kubernetes 클러스터가 로컬에서 실행 중입니다.

5.2 Minikube를 이용한 로컬 클러스터 구성

  1. Minikube 설치
  2. 클러스터 시작
    • 명령 프롬프트에서 다음 명령어로 클러스터를 시작합니다.
      minikube start
  3. kubectl 설치 및 확인
    • kubectl을 사용하여 클러스터의 상태를 확인합니다.
      kubectl get nodes
    • 정상적인 출력이 확인되면 클러스터가 성공적으로 구성된 것입니다.

6. 기대 효과 및 검증 절차

기대 효과

  • 높은 가용성과 확장성:
    Kubernetes의 자동화된 스케일링과 자가 치유 기능으로 안정적인 서비스 운영이 가능합니다.
  • 배포 자동화:
    롤링 업데이트와 롤백 기능을 통해 무중단 배포가 가능하며, CI/CD 파이프라인과 원활하게 연동됩니다.
  • 효율적 자원 관리:
    클러스터 내 리소스를 최적화하여 비용 효율적인 운영이 가능합니다.

검증 절차

  • 클러스터 상태 확인:
    kubectl get nodes 명령어로 노드의 상태와 준비 여부를 확인합니다.
  • 애플리케이션 배포 테스트:
    간단한 애플리케이션을 배포하여, 서비스 노출 및 롤링 업데이트 기능을 테스트합니다.
  • 모니터링 도구 연동:
    Prometheus, Grafana 등 모니터링 도구와 연동하여, 클러스터의 상태와 로그를 실시간으로 점검합니다.

7. 추가로 고민해보기..

  1. Kubernetes 클러스터의 보안 베스트 프랙티스는 무엇이며, 어떤 설정이 필요한가요?

    • 클러스터 내부 및 외부의 보안 설정, RBAC, 네트워크 정책 등을 다룰 수 있습니다.
  2. Helm을 활용한 Kubernetes 애플리케이션 배포 방법은 무엇인가요?

    • Helm 차트 작성, 관리 및 배포 전략에 대해 구체적으로 설명할 수 있습니다.
  3. Kubernetes와 Docker Compose의 차이점 및 각각의 사용 시나리오는 무엇인가요?

    • 두 도구의 목적과 사용 환경, 장단점 등을 비교 분석할 수 있습니다.
profile
프론트엔드 개발자를 준비하고 있습니다.

0개의 댓글