기록/Kubenetes

Kubernetes (1)

YongE 2025. 4. 8. 13:29

쿠버네티스


간단한 구조도

쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하고 조율하기 위한 오픈소스 플랫폼이다. 구글이 개발한 이 시스템은 일주일에 수십억 개의 컨테이너를 생성하고 관리하던 경험을 바탕으로 만들어졌으며, 현재는 클라우드 네이티브 컴퓨팅 재단(CNCF)에서 관리하고 있다. 흔히 'K8s'라고도 불리는데, 이는 'K'와 's' 사이에 8개의 문자가 있다는 의미에서 비롯되었다.

쿠버네티스 아키텍처 구성요소

출처 : 쿠버네티스 공식홈페이지

클러스터(Cluster)

클러스터는 쿠버네티스의 가장 기본적인 단위로, 노드라고 불리는 머신들의 집합이다. 이 클러스터는 컨테이너화된 애플리케이션을 실행하며, 컴퓨팅 리소스를 공유하여 애플리케이션의 배포와 관리를 담당한다.

마스터 노드(Master Node/Control Plane)

마스터 노드는 쿠버네티스 클러스터를 관리하는 컨트롤러이다. 클러스터의 상태가 요구하는 조건에 맞게 유지되도록 관리하며, 다음과 같은 주요 컴포넌트로 구성된다:

kube-apiserver

  • 마스터의 프론트엔드로 모든 요청을 받아 해석하고 다른 컴포넌트와 유기적으로 동작한다
  • 요청 문법 검사, 노드 상태 확인, 실행 명령 전달 등의 역할을 수행한다

etcd

  • 클러스터의 모든 데이터를 저장하는 고가용성 키-값 저장소
  • 워커노드의 kubelet에서 보내는 노드 상태 정보를 저장한다

kube-controller-manager

  • 노드, 파드, 서비스 등을 모니터링하여 요구된 명세와, 현재 상태가 일치하도록 유지한다

kube-scheduler

  • 노드의 상태(하드웨어/소프트웨어, 리소스, 요구사항 등)를 확인하여 파드를 어떤 노드에 배치할지 결정한다
  • 노드 스케줄이라고도 한다.

워커 노드(Worker Node)

워커 노드는 마스터의 명령을 받아 실제로 컨테이너가 실행되는 서버이다. 다음과 같은 주요 컴포넌트로 구성된다:

kubelet

  • 노드에 배포되는 에이전트로, 파드 내의 컨테이너가 올바르게 동작하도록 관리한다
  • cAdvisor를 통해 노드 리소스를 수집하고 마스터 노드에 정보를 전송한다

kube-proxy

  • 서비스를 구현하는 네트워크 프록시로, 노드로 들어오는 트래픽을 적절한 컨테이너로 라우팅한다

컨테이너 런타임(Container Runtime)

  • 파드에 배포된 컨테이너를 실행하는 소프트웨어
  • Docker, CRI-O, containerd 등이 있으며, Kubernetes 1.24부터는 컨테이너 런타임 인터페이스(CRI)를 준수해야 한다

쿠버네티스 기본 오브젝트

쿠버네티스에서 오브젝트란 시스템을 구성하는 기본 단위이다. 기본 오브젝트(Basic Object)와 이를 관리하고 추가 기능을 제공하는 컨트롤러(Controller)로 구성된다.

파드(Pod)

  • 쿠버네티스에서 배포할 수 있는 가장 작은 단위이다
  • 하나 이상의 컨테이너로 구성되며, 같은 파드 내의 컨테이너들은 네트워크와 스토리지를 공유한다
  • 일반적으로 파드당 하나의 컨테이너를 사용하는 것이 권장되지만, 사이드카 패턴을 통해 로그 수집이나 모니터링 용도로 여러 컨테이너를 함께 구성할 수도 있다

서비스(Service)

  • 파드 집합에 대한 접근 방법을 정의하는 API 오브젝트이다
  • 파드가 동적으로 생성되고 삭제될 수 있기 때문에, 안정적인 네트워크 엔드포인트를 제공한다
  • DNS 이름이나 자체 IP 주소를 통해 컨테이너를 노출시킨다

볼륨(Volume)

  • 파드 내의 컨테이너들이 데이터를 공유할 수 있게 해주는 디스크 공간이다
  • 기본 볼륨은 파드의 생명주기와 함께하며, 영구적인 데이터 저장을 위해서는 퍼시스턴트 볼륨을 사용한다

네임스페이스(Namespace)

  • 쿠버네티스 클러스터 내의 가상 클러스터로, 리소스를 논리적으로 분리하고 그룹화한다
  • 다양한 사용자와 프로젝트가 충돌 없이 독립적으로 리소스를 사용할 수 있게 한다

쿠버네티스 컨트롤러

컨트롤러는 기본 오브젝트를 관리하고 추가 기능을 제공하는 상위 수준의 오브젝트이다.

레플리케이션 컨트롤러(ReplicationController)

  • 지정된 수의 파드가 항상 실행되도록 관찰하고 유지한다
  • 파드의 복제본 수, 셀렉터, 파드 템플릿을 명시한다

레플리카셋(ReplicaSet)

  • 레플리케이션 컨트롤러의 발전된 형태로, 더 풍부한 셀렉터 기능을 제공한다
  • matchLabelsmatchExpressions를 통해 다양한 조건으로 파드를 선택할 수 있다

디플로이먼트(Deployment)

  • 레플리카셋의 선언적 업데이트를 제공한다
  • 애플리케이션의 배포와 업데이트를 더 쉽게 관리할 수 있게 해준다
  • 배포 이력을 관리하여 롤백을 가능하게 한다

스테이트풀셋(StatefulSet)

  • 상태를 유지해야 하는 애플리케이션을 배포하고 관리할 때 사용한다
  • 각 파드에 고유한 네트워크 식별자와 영구 스토리지를 제공한다

데몬셋(DaemonSet)

  • 클러스터의 모든 노드(또는 특정 노드)에 파드를 하나씩 배포한다
  • 주로 로그 수집기, 모니터링 에이전트와 같은 시스템 데몬을 배포하는 데 사용된다

잡(Job)과 크론잡(CronJob)

  • Job: 특정 작업을 완료하기 위한 파드를 생성하고 정상적인 종료를 보장한다
  • CronJob: 일정 시간에 반복적으로 Job을 실행하는 스케줄링 기능을 제공한다

스토리지 관련 용어

퍼시스턴트 볼륨(PersistentVolume, PV)

  • 파드가 사용할 스토리지의 크기 및 종류를 정의한다
  • 파드의 생명주기와 별개로 데이터를 유지한다

퍼시스턴트 볼륨 클레임(PersistentVolumeClaim, PVC)

  • 퍼시스턴트 볼륨을 동적으로 확보하기 위한 요청이다

스토리지 클래스(StorageClass)

  • 퍼시스턴트 볼륨이 확보하는 스토리지의 종류를 정의한다

보안 관련 용어

시크릿(Secret)

  • 패스워드, OAuth 토큰, SSH 키 등의 민감한 정보를 저장하는 오브젝트이다

컨피그맵(ConfigMap)

  • 설정 정보를 키-값 쌍으로 저장하고 파드에 전달한다

서비스 어카운트(ServiceAccount)

  • 파드가 쿠버네티스 API에 접근할 때 사용하는 계정이다

RBAC 관련 용어

  • Role: 네임스페이스 내에서 사용 가능한 권한을 정의한다
  • RoleBinding: 사용자와 Role을 연결한다
  • ClusterRole: 클러스터 전체에서 사용 가능한 권한을 정의한다
  • ClusterRoleBinding: 사용자와 ClusterRole을 연결한다
728x90
반응형

'기록 > Kubenetes' 카테고리의 다른 글

Kubernetes (5)  (0) 2025.04.15
Kubernetes (4)  (0) 2025.04.14
Kubernetes (3)  (0) 2025.04.11
Kubernetes (2)  (0) 2025.04.10