쿠버네티스 (Kubernetes) 주요 용어 정리중인 자료입니다.


1. 클러스터(Cluster)

  • 정의
    여러 대의 서버(노드)를 묶어 하나의 논리적 시스템처럼 동작하도록 만든 집합입니다.
  • 특징
    • Kubernetes 클러스터는 두 가지 주요 유형의 노드로 구성됩니다: 마스터 노드와 워커 노드입니다. 이 두 노드는 클러스터의 기능과 성능에 중요한 역할을 합니다.
    • 애플리케이션 컨테이너를 어디에 배포할지, 어떻게 연결·관리할지를 종합적으로 결정합니다.

2. 노드(Node)

  • 정의
    쿠버네티스 클러스터를 구성하는 물리 서버 혹은 가상 서버입니다.

    1) 마스터 노드( Control Plane)

마스터 노드는 Kubernetes 클러스터의 제어 평면을 호스팅하며, 클러스터의 상태를 관리하고 조정하는 역할을 합니다. 마스터 노드는 다음과 같은 주요 구성 요소를 포함합니다:

  • API 서버: 클러스터의 모든 요청을 처리하고, 클러스터의 상태를 관리하는 중앙 인터페이스입니다.
  • 스케줄러: 워커 노드에 작업을 할당하여 컨테이너가 실행될 위치를 결정합니다.
  • 컨트롤러 매니저: 클러스터의 상태를 지속적으로 모니터링하고, 필요한 경우 상태를 조정합니다.
  • etcd: 클러스터의 모든 구성 데이터를 저장하는 분산 키-값 저장소입니다.

마스터 노드는 클러스터의 전반적인 관리와 조정을 담당하므로, 일반적으로 고가용성을 위해 여러 대의 마스터 노드를 구성하는 것이 좋습니다

2) 워커 노드

워커 노드는 실제로 컨테이너화된 애플리케이션을 실행하는 노드입니다. 각 워커 노드는 다음과 같은 구성 요소를 포함합니다:

  • kubelet: 각 노드에서 실행되며, 컨테이너의 상태를 관리하고, 마스터 노드와 통신하여 작업을 수행합니다.
  • 컨테이너 런타임: Docker와 같은 컨테이너를 실행하는 소프트웨어입니다.
  • kube-proxy: 네트워크 트래픽을 관리하고, 서비스 간의 통신을 가능하게 합니다.

워커 노드는 클러스터의 작업 부하를 처리하며, 필요에 따라 추가할 수 있습니다. 클러스터의 성능을 높이기 위해 워커 노드를 수평으로 확장하는 것이 일반적입니다

마스터 노드와 워커 노드의 차이점

마스터 노드는 클러스터의 제어 및 관리 기능을 담당하는 반면, 워커 노드는 실제 애플리케이션을 실행하는 역할을 합니다. 마스터 노드는 클러스터의 상태를 유지하고 조정하는 데 필요한 모든 작업을 수행하며, 워커 노드는 이러한 작업을 수행하기 위해 필요한 리소스를 제공합니다

노드가 “쿠버네티스 리소스 중에서 가장 큰 개념” 이라고도 하지만, 일반적으로는 클러스터 > 노드 구조로 이해합니다.


3. 네임스페이스(Namespace)

  • 정의
    Kubernetes(쿠버네티스)에서 네임스페이스는 클러스터 내의 리소스를 논리적으로 분리하는 단위입니다. 이는 여러 팀이나 프로젝트가 동일한 클러스터를 공유하면서도 서로의 리소스에 영향을 주지 않도록 도와줍니다. 네임스페이스는 클러스터 내에서 파드, 서비스, 디플로이먼트와 같은 오브젝트를 그룹화하고 관리하는 데 사용됩니다.

네임스페이스의 주요 기능

  1. 리소스 격리: 네임스페이스를 사용하면 서로 다른 팀이나 프로젝트가 동일한 클러스터에서 작업할 수 있지만, 각 팀의 리소스는 서로 격리되어 관리됩니다. 예를 들어, 팀 A의 파드와 팀 B의 파드는 서로 다른 네임스페이스에 위치하여 충돌 없이 운영될 수 있습니다.
  2. 권한 관리: 네임스페이스는 RBAC(Role-Based Access Control)와 함께 사용되어 특정 사용자나 그룹이 특정 네임스페이스 내의 리소스에 대한 접근 권한을 제어할 수 있습니다. 이를 통해 보안성을 높일 수 있습니다.
  3. 리소스 할당: 네임스페이스는 CPU 및 메모리와 같은 리소스를 할당하는 데도 사용됩니다. 각 네임스페이스에 대해 리소스 쿼터를 설정하여, 특정 네임스페이스가 클러스터의 리소스를 과도하게 사용하는 것을 방지할 수 있습니다.
  4. 환경 분리: 개발, 테스트, 프로덕션 환경을 각각의 네임스페이스로 분리하여 관리할 수 있습니다. 이를 통해 각 환경에서의 설정이나 리소스 사용을 독립적으로 조정할 수 있습니다.

네임스페이스의 기본 사용법

Kubernetes에서는 기본적으로 default라는 네임스페이스가 제공됩니다. 추가적인 네임스페이스를 생성하려면 다음과 같은 명령어를 사용할 수 있습니다:

kubectl create namespace <네임스페이스이름>

생성된 네임스페이스를 확인하려면 다음 명령어를 사용합니다:

kubectl get namespaces

네임스페이스를 지정하여 리소스를 생성할 때는 -n 옵션을 사용합니다:

kubectl create pod <파드이름> -n <네임스페이스이름>

이처럼 네임스페이스는 Kubernetes 클러스터 내에서 리소스를 효과적으로 관리하고, 여러 팀이 협업할 수 있는 환경을 제공합니다


4. 파드(Pod)

  • 정의
    파드는 Kubernetes에서 가장 작은 배포 단위로, 하나 이상의 컨테이너를 포함할 수 있습니다. 파드는 동일한 네트워크 네임스페이스를 공유하며, 이로 인해 컨테이너 간의 통신이 용이해집니다. 일반적으로 파드는 애플리케이션의 단일 인스턴스를 나타내며, 여러 개의 파드를 통해 애플리케이션의 복제본을 생성할 수 있습니다.
  • 특징
    • 동일한 IP 주소, 호스트네임, 스토리지 볼륨 등을 공유합니다.
    • 파드가 죽으면 쿠버네티스가 새로운 파드를 생성해 대체합니다. (ReplicaSet, Deployment 등으로 관리)

5. 디플로이먼트(Deployment)와 레플리카셋(ReplicaSet)

5.1 디플로이먼트(Deployment)

  • 정의
    디플로이먼트는 레플리카셋을 관리하는 상위 개념으로, 애플리케이션의 배포 및 업데이트를 선언적으로 관리합니다. 디플로이먼트를 사용하면 새로운 버전의 애플리케이션을 배포할 때 롤링 업데이트를 통해 기존 파드를 점진적으로 교체할 수 있습니다. 이를 통해 다운타임 없이 애플리케이션을 업데이트할 수 있습니다. 디플로이먼트는 레플리카셋을 생성하고, 이를 통해 파드를 관리하며, 롤백 기능도 제공하여 이전 버전으로 쉽게 되돌릴 수 있습니다.
  • 특징
    • 내부적으로 ‘레플리카셋(ReplicaSet)’을 생성·관리합니다.
    • 애플리케이션 버전 관리, 롤링 업데이트, 롤백 등을 간단하게 수행할 수 있습니다.
    • “관리 프로그램”처럼 파드 상태를 주기적으로 확인하고, 죽었으면 다시 올리는 역할을 합니다.

5.2 레플리카셋(ReplicaSet)

  • 정의
    레플리카셋은 지정된 수의 파드를 유지 관리하는 Kubernetes의 컨트롤러입니다. 레플리카셋은 파드의 복제본을 생성하고, 파드가 실패할 경우 자동으로 새로운 파드를 생성하여 항상 지정된 수의 파드가 실행되도록 보장합니다. 레플리카셋은 파드의 상태를 모니터링하고, 필요에 따라 파드를 추가하거나 제거하여 안정성을 유지합니다. 레플리카셋은 주로 파드의 수를 조정하는 데 사용됩니다
  • 특징
    • 파드가 죽으면 자동으로 새 파드를 생성하여 레플리카 수를 맞춥니다.
    • 디플로이먼트가 레플리카셋을 생성·관리하며, 레플리카셋은 실제 파드의 실행 여부를 책임집니다.

구조
Deployment → ReplicaSet → Pod


6. 잡(Job) & 크론잡(CronJob)

6.1 잡(Job)

  • 정의
    “한 번만 실행되고 완료된 뒤에는 재시작하지 않는” 파드를 관리하는 리소스입니다.
  • 특징
    • 데이터 처리, 배치 작업 등 유한 작업을 수행합니다.
    • 완료되면 성공 상태를 기록하고 파드를 더 이상 유지하지 않습니다.

6.2 크론잡(CronJob)

  • 정의
    일정 주기(크론 스케줄)에 따라 Job을 생성하고 실행하는 리소스입니다.
  • 특징
    • “매일 3시에 백업”처럼 주기 작업을 자동화할 수 있습니다.

7. 스테이트풀셋(StatefulSet)

  • 정의
    상태ful 애플리케이션(예: DB)처럼 각 파드의 고유한 ID와 순서 있는 배포가 필요한 경우 사용하는 리소스입니다.
  • 특징
    • 파드 이름에 순번을 붙여(my-app-0, my-app-1) 관리합니다.
    • 안정적인 네트워크 식별자, 스토리지 연동 등이 요구되는 경우에 적합합니다.

8. 서비스(Service)

  • 정의
    서비스(Service)는 쿠버네티스에서 파드(Pod)들에 대한 네트워크 접근을 추상화하고 안정적으로 제공하기 위한 리소스입니다.

    • 쿠버네티스 환경에서 파드는 생성과 소멸이 빈번하기 때문에, 파드마다 할당되는 IP 주소도 동적으로 변경될 수 있습니다.
    • 서비스는 이러한 파드의 변화에 구애받지 않고, 고정된 접근 방법(가령 DNS 이름, Cluster IP 등)을 제공하여 클라이언트가 언제나 같은 방식으로 통신할 수 있도록 돕습니다.

9. 인그레스(Ingress)

  • 정의
    HTTP/HTTPS 요청을 특정 서비스로 라우팅할 수 있도록, 도메인(호스트명)·경로 기반의 규칙을 정의하는 객체입니다.
  • 필요성
    • 여러 서비스가 있을 경우, 각 서비스마다 NodePort나 LoadBalancer를 생성해 외부에 노출하는 방식은 관리가 복잡해질 수 있음
    • 인그레스를 사용하면 단일 진입점을 통해 트래픽 분산, SSL 종료, 경로 기반/호스트 기반 라우팅 등을 간단하게 구성 가능

10. 컨피그맵(ConfigMap) & 시크릿(Secret)

10.1 컨피그맵(ConfigMap)

  • 정의
    애플리케이션 설정 정보를 저장·관리하는 리소스입니다. (민감하지 않은 일반 설정)
  • 특징
    • 파드에서 환경 변수나 파일 형태로 쉽게 주입할 수 있습니다.
    • 설정을 코드와 분리하여 애플리케이션 재빌드 없이 설정 변경이 가능하게 해줍니다.

10.2 시크릿(Secret)

  • 정의
    패스워드, 인증 토큰 등 민감 정보를 안전하게 저장하고 파드에 전달하기 위한 리소스입니다.
  • 특징
    • 컨피그맵과 유사하지만, 민감 정보를 base64로 인코딩하여 보관합니다.

11. 스토리지 관련 리소스

11.1 퍼시스턴트 볼륨(Persistent Volume, PV)

  • 정의
    실제 스토리지(물리 디스크, NFS 등)를 추상화한 쿠버네티스 리소스입니다.
  • 특징
    • 파드가 종료돼도 데이터가 사라지지 않는 영구 스토리지를 제공하기 위한 개념입니다.

11.2 퍼시스턴트 볼륨 클레임(Persistent Volume Claim, PVC)

  • 정의
    파드가 필요한 스토리지 용량·접근 모드 등을 선언하면 PVC가 적절한 PV를 바인딩해줍니다.
  • 특징
    • 스토리지 자원을 동적으로 할당받을 수 있습니다.

11.3 스토리지클래스(StorageClass)

  • 정의
    PV를 동적으로 생성할 때 사용할 스토리지 종류, 프로비저닝 방법 등을 정의한 리소스입니다.
  • 특징
    • 여러 스토리지 백엔드를 손쉽게 추상화하여 사용할 수 있습니다.

12. RBAC(권한 부여) 관련 리소스

12.1 롤(Role) & 롤바인딩(RoleBinding)

  • 정의
    • 롤(Role): 네임스페이스 안에서 조작 가능한 리소스의 규칙(권한)을 정의
    • 롤바인딩(RoleBinding): 롤을 특정 사용자(서비스 계정 등)에게 부여하여 연결
  • 특징
    • 네임스페이스 범위에서 세분화된 접근 제어가 가능합니다.

12.2 클러스터롤(ClusterRole) & 클러스터롤바인딩(ClusterRoleBinding)

  • 정의
    • 클러스터롤(ClusterRole): 클러스터 전역에서 조작 가능한 리소스 권한을 정의
    • 클러스터롤바인딩(ClusterRoleBinding): 클러스터롤을 특정 사용자(서비스 계정 등)에게 부여
  • 특징
    • 네임스페이스 구분 없이 클러스터 전체에서 권한 부여가 이뤄집니다.

12.3 서비스 계정(ServiceAccount)

  • 정의
    파드(애플리케이션)가 쿠버네티스 API를 조작할 때 사용하는 계정입니다.
  • 특징
    • 디폴트 서비스 계정이 존재하며, 필요한 경우 별도의 계정을 생성하여 역할과 바인딩할 수 있습니다.

13. 컨텍스트(Context)

  • 정의
    kubectl 명령 사용 시, 어떤 클러스터-사용자-네임스페이스 조합을 쓸지 지정하는 개념입니다.
  • 특징
    • 마치 브라우저의 “북마크”처럼, 여러 클러스터나 네임스페이스를 쉽게 넘나들 수 있도록 해줍니다.

14. 컨트롤러(Controller) & 스케줄러(Scheduler)

  • 컨트롤러(Controller)
    • 디플로이먼트, 레플리카셋, 잡, 스테이트풀셋 등 다양한 리소스를 “원하는 상태”로 유지하기 위해 지속적으로 모니터링·조정하는 역할을 수행합니다.
  • 스케줄러(Scheduler)
    • 새로 생성된 파드를 어떤 노드에 배치할지 결정합니다.
    • 노드 자원 사용량, 파드 요구 사항 등을 고려하여 파드를 배치합니다.

15. 헬름(Helm)

  • 정의
    쿠버네티스 리소스(매니페스트)를 템플릿 형태로 관리하고, 손쉽게 배포·업데이트·롤백할 수 있도록 해주는 패키지 매니저입니다.
  • 특징
    • 여러 YAML 파일을 묶어서 하나의 차트(Chart)로 관리
    • Values.yaml에 변수를 정의해 환경마다 다른 설정을 쉽게 적용

16. 활성 프로브(Liveness Probe) 등 헬스 체크

  • 정의
    쿠버네티스가 컨테이너가 정상 동작 중인지 주기적으로 확인하는 기능입니다.
  • 종류
    • httpGet Probe
    • tcpSocket Probe
    • exec Probe
  • 특징
    • 파드 내 컨테이너가 오류 상태가 되면 자동으로 재시작(디플로이먼트/레플리카셋 관리 하)
    • 롤링 업데이트 시 Readiness Probe(준비 상태 체크)와 함께 사용하여 무중단 배포를 실현

태그:

카테고리:

업데이트:

댓글남기기