본문 바로가기

DevOps

Kubernetes 란?

728x90

정의

컨테이너화된 애플리케이션 (도커 이미지가 빌드/실행된 것 )의 자동 배포, 확장 및 관리를 위한 오픈소스 플랫폼입니다. 구글이 개발하였으며, 컨테이너 오케스트레이션의 표준으로 자리 잡았습니다. 개발자와 운영팀이 컨테이너 기반의 애플리케이션을 더 쉽게 관리하고 배포할 수 있도록 돕습니다.

 

쿠버네티스의 아키텍처

쿠버네티스는 다음과 같은 주요 구성 요소로 이루어져 있습니다:

  1. 마스터 노드(Master Node):
    • 클러스터의 제어 플레인으로, 클러스터의 상태를 관리합니다. (클러스터는 여러 개의 노드(서버)로 구성된 집합)
    • 주요 컴포넌트: 
      • kube-apiserver: API 요청을 처리하고, 클러스터 상태를 관리합니다.
      • etcd: 클러스터의 모든 데이터를 저장하는 분산 키-값 저장소입니다.
      • kube-scheduler: 새로운 파드가 생성될 때 적절한 노드에 스케줄링합니다.
      • kube-controller-manager: 클러스터의 상태를 모니터링하고, 원하는 상태로 유지하기 위해 조정합니다. 
  2. 워커 노드(Worker Node):
    • 애플리케이션이 실제로 실행되는 노드입니다.
    • 주요 컴포넌트:
      • kubelet: 각 노드에서 실행되며, 파드와 컨테이너의 상태를 관리합니다.
      • kube-proxy: 클러스터 내 서비스 간의 네트워크 통신을 관리합니다.
      • 컨테이너 런타임: 실제로 컨테이너를 실행하는 소프트웨어 (예: Docker, containerd 등).

쿠버네티스 아키텍처


쿠버네티스의 오브젝트

 

쿠버네티스는 다양한 오브젝트를 통해 리소스를 관리합니다. 주요 오브젝트는 다음과 같습니다:

  1. Pod: 가장 작은 배포 단위로, 하나 이상의 컨테이너를 포함할 수 있습니다.
  2. Service: 파드 간의 네트워크 연결을 관리하며, 로드 밸런싱과 서비스 발견을 제공합니다.
  3. Deployment: 파드를 선언적으로 관리하며, 원하는 상태(예: 파드 수)를 유지합니다.
  4. ReplicaSet: 지정한 수의 파드를 항상 유지하도록 보장합니다.
  5. Namespace: 클러스터 내에서 리소스를 격리하고 관리할 수 있는 방법을 제공합니다.
  6. ConfigMap: 애플리케이션 설정을 관리하는 오브젝트로, 환경 변수를 통해 파드에 주입할 수 있습니다.
  7. Secret: 민감한 정보를 안전하게 저장하는 오브젝트입니다.
  8. PersistentVolume(PV) & PersistentVolumeClaim(PVC): 스토리지 리소스를 관리하는 방법입니다.

일반적인 구성


쿠버네티스의 장점

  1. 오케스트레이션: Kubernetes는 컨테이너의 배포, 스케일링, 관리 등을 자동으로 처리해 주므로, 운영 측면에서 효율적입니다.
  2. 모니터링 및 로깅: Kubernetes는 내장된 모니터링 및 로깅 도구와 쉽게 통합할 수 있어, 애플리케이션의 상태를 쉽게 파악할 수 있습니다.
  3. 서비스 발견: Kubernetes는 서비스 디스커버리 기능을 제공하여, 서로 다른 파드 간의 통신을 간편하게 해 줍니다.
  4. 배포 전략: 롤링 업데이트, 블루-그린 배포 등의 다양한 배포 전략을 쉽게 사용할 수 있어, 안정성과 가용성을 높일 수 있습니다.
  5. 확장성: 필요에 따라 컨테이너를 쉽게 확장하거나 축소할 수 있어, 트래픽 변화에 유연하게 대응할 수 있습니다.

쿠버네티스의 단점

  1. 복잡성: Kubernetes의 설정과 운영이 복잡할 수 있어, 초기 학습 곡선이 있습니다.
  2. 오버헤드: 작은 규모의 애플리케이션에서는 Kubernetes를 사용하는 것이 오버헤드가 될 수 있습니다.

결론적으로, 단일 컨테이너의 경우에도 Kubernetes의 장점이 크지만, 프로젝트의 규모와 요구사항에 따라 적합성을 고려해야 합니다.


참고

서비스 디스커버리의 주요 개념

서비스 디스커버리(Service Discovery)는 분산 시스템에서 서비스 간의 위치와 상태를 자동으로 찾고 연결하는 과정을 말합니다. 쿠버네티스에서는 애플리케이션의 파드와 서비스가 서로 소통할 수 있도록 도와주는 기능입니다.

  1. 서비스: 쿠버네티스에서 서비스는 여러 파드에 대한 접근을 추상화하여, 클라이언트가 파드의 IP 주소를 알 필요 없이 서비스를 통해 통신할 수 있게 합니다. 각 서비스는 고유한 DNS 이름과 클러스터 내에서의 IP 주소를 가집니다.
  2. DNS: 쿠버네티스는 클러스터 내의 서비스에 대해 자동으로 DNS 레코드를 생성합니다. 이를 통해 서비스 이름으로 직접 접근할 수 있으며, IP 주소를 동적으로 관리할 필요가 없습니다.
  3. 로드 밸런싱: 서비스 디스커버리는 클라이언트 요청을 여러 파드로 분산시키는 로드 밸런싱 기능도 포함합니다. 이를 통해 서비스의 가용성과 성능을 향상할 수 있습니다.

작동 방식

  • 클라이언트 애플리케이션이 서비스 이름을 사용하여 요청을 보내면, 쿠버네티스 DNS가 해당 서비스를 호스팅 하는 파드의 IP 주소를 반환합니다.
  • 클러스터 내에서 서비스의 IP 주소가 변경되더라도, 클라이언트는 서비스 이름을 통해 계속 접근할 수 있습니다.

이러한 서비스 디스커버리 기능은 마이크로서비스 아키텍처에서 특히 유용하며, 다양한 서비스가 서로 연결되고 통신하는 데 필요한 복잡성을 줄여줍니다.


그림출처: https://youtu.be/SNA1sSNlmy0?si=5NPFrG3FCT3sMx39

728x90
반응형