DevOps/Kubernetes

Kubernetes 개념 정리

${Harvey} 2024. 10. 30. 11:26

 

개인적으로 파이프라인을 구축하는 학습을 하며 쿠버네티스에 대한 전반적인 개념 정리가 필요할 듯하여 해당 글을 작성했습니다.


Kubernetes (K8s)는 컨테이너 관리 시스템으로, 여러 개의 컨테이너를 효율적으로 운영하고 관리하기 위한 플랫폼입니다. Kubernetes의 주요 목적은 클러스터에 정의된 “상태”를 지속적으로 유지하는 것입니다. 즉, 컨테이너가 중단되거나 상태가 변경될 경우, Kubernetes가 자동으로 이를 감지하고 원래의 정의된 상태로 복원합니다.

Kubernetes의 주요 개념

클러스터 (Cluster)

  • 정의: 여러 노드(Node)의 집합입니다.
  • 역할: 클러스터는 컨테이너화된 애플리케이션을 실행하기 위해 필요한 자원을 제공합니다.

Control Plane

  • 정의: Kubernetes의 작업을 처리하는 구성 요소들의 집합입니다. 주요 구성 요소에는 etcd, Scheduler, API Server 등이 포함됩니다.
  • 역할: 클러스터의 상태를 유지하고 관리합니다. Control Plane은 클러스터 내에서 반드시 실행됩니다.

노드 (Node)

  • 정의: 물리적 하드웨어 또는 그 위에서 실행되는 가상 머신을 의미합니다.
  • 역할: 컨테이너가 실행될 수 있도록 자원을 할당하는 역할을 합니다. 노드 중 하나는 Master Node로 간주되며, 이 노드는 Control Plane의 핵심 구성요소입니다. 일반적으로 Master Node는 클러스터의 API 서버, 스케줄러, 컨트롤러 매니저 등의 역할을 포함합니다.

Control Plane 구성 요소

  1. etcd
    • 역할: 클러스터의 상태를 유지하는 key-value 저장소로, 모든 클러스터 데이터의 지속성을 보장합니다.
  2. Scheduler
    • 역할: 클러스터에서 수행해야 하는 작업의 일정을 관리하여, 각 Pod이 적절한 노드에서 실행되도록 합니다.
  3. Controller Manager
    • 역할: 클러스터의 상태를 모니터링하여, 정의된 상태가 유지되는지 확인합니다.
  4. API Server
    • 역할: kubectl을 통해 들어온 명령을 실행하고 etcd를 업데이트하는 REST API를 제공합니다. kubectl과의 통신은 실제로 이 API Server와 이루어집니다.

Node 구성 요소

  1. kubelet
    • 역할: Control Plane과 Node 간의 통신을 담당하며, Node에서 실행되는 Pod과 컨테이너를 관리합니다.
  2. Container Runtime
    • 역할: 컨테이너를 실행하는 환경을 제공합니다. 예를 들어, Docker가 이에 해당합니다.
  3. kube-proxy
    • 역할: 컨테이너, Pod 및 노드 간의 통신을 가능하게 합니다.

Kubernetes 객체

1. Pod

  • 정의: 실행할 이미지의 래퍼(wrapper)로, 애플리케이션 컨테이너와 공유 자원(볼륨, 네트워크 등)의 그룹을 의미합니다.
  • 역할: Pod yaml 파일을 통해 실행할 컨테이너의 이름, 사용할 이미지, 초기 및 최대 메모리 등을 정의합니다. Pod을 kubectl을 통해 생성하면 실제 Node에서 Pod이 실행됩니다.

2. ReplicaSet

  • 역할: 동일한 여러 Pod이 동시에 실행되도록 관리합니다.

3. Deployment

  • 역할: ReplicaSet 이후에 소개되었으며, ReplicaSet과 동일한 기능을 제공하면서 추가 기능을 제공합니다. 내부적으로는 ReplicaSet이 동작합니다.
  • 내부적으론 ReplicaSet이 동작합니다

4. Service

  • 정의: Pod에 접근하기 위한 안정적인 주소(IP Address)를 제공합니다. Pod가 다시 생성될 때마다 주소가 변경되기 때문에 Service가 필요합니다.
  • 유형:
    • ClusterIP Service: 클러스터 내에서의 접근을 제공합니다.
    • NodePort Service: 클러스터 외부에서 접근할 수 있도록 합니다. NodePort의 범위는 30000에서 32767입니다.

5. Namespace

  • 역할: 클러스터가 많아질 때, 목적에 따라 그룹화할 수 있도록 도와줍니다. 예를 들어, 개발 환경을 분리하거나 팀별로 애플리케이션을 그룹화할 수 있습니다. Namespace를 지정하지 않으면 자동으로 “default” Namespace가 사용됩니다.

정리

Kubernetes는 클러스터에서 컨테이너의 상태를 유지하고 관리하는 도구이다.
Kubernetes는 비교적 대규모 분산 애플리케이션을 효율적으로 관리하는 데 유용하다.