[Kubernetes] 01. Kubernetes Architecture

duck-ach·2025년 5월 21일
1

☸️  Kubernetes

목록 보기
1/4
post-thumbnail

🚀 Kubernetes 란?

Kubernetes는 컨테이너 관리 자동화(Orchestration) 시스템이다.
쉽게말해 컨테이너들을 똑똑하게 띄워주고, 필요하면 옮기고, 고장나면 다시 띄우고, Load Balancing도 수행해준다. 이 모든것을 자동으로 해주는 시스템이다.

🚀 Kubernetes 유형

☸️ 관리형 쿠버네티스(Managed Kubernetes)

대표 예시

  • AWS EKS
  • Azure AKS
  • Google GKE

특징

  • 클러스터의 Control Plane 및 인프라 자원을 관리해주며, 사용자는 Application만 배포/운영
  • 유지보수, 업그레이드, 고가용성 등을 클라우드에서 자동으로 제공
  • 비용을 줄이고 빠르게 시작하고 싶을 때 사용

장점

  • 빠른 구축, 높은 안정성
  • 인프라 운영 부담 최소화

단점

  • 세세한 커스터마이징 제한
  • 클라우드 종속성
  • 사용된 만큼 비용 발생

☸️ 설치형 쿠버네티스(Packaged Kubernetes Platform)

대표 예시

  • Red Hat OpenShift
  • Rancher
  • VMware Tanzu

특징

  • 쿠버네티스에 다양한 운영/보안/관리 기능이 포함된 일체형 플랫폼
  • GUI, 멀티 클러스터 관리, CI/CD, 인증 연동 등 기능을 패키지 형태로 제공
  • 기업용 기능과 지원이 필요한 경우 사용

장점

  • 엔터프라이즈 환경에 적합한 기능 제공
  • 운영 자동화 및 보안 기능 강화

단점

  • 상대적으로 복잡한 구조
  • 초기비용이 크고 유지비도 높은 편

☸️ 구성형 쿠버네티스(DIY Kubernetes / Provisioning Tool-based)

대표 예시

  • kubeadm
  • kops
  • Kubespray

특징

  • 사용자가 직접 구성 요소를 선택하고 설정하여 쿠버네티스 클러스터를 구축한다.
  • 자유도와 유연성이 높음
  • 베어메탈 서버, 온프레미스 환경, 커스텀 클라우드 환경 등에 적합
    베어메탈 서버 : 물리 서버를 가상화 없이 통째로 하나의 사용자(또는 조직)가 단독으로 사용하는 서버
  • 오픈소스 기반이라 소프트웨어 자체는 무료지만, 설정/모니터링/업그레이드까지 모두 직접해야하므로 DevOps나 인프라 전문가가 필요하다.

장점

  • 학습 및 교육용으로 매우 유용
  • 세밀한 설정 가능 (예: 네트워크 플러그인, 저장소 구성 등)

단점

  • 설치 및 유지보수에 대한 운영 부담이 큼
  • 관리 자동화 기능 부족

🚀 Kubernetes 아키텍처


이미지 출처 : Linux Foundation - 쿠버네티스 아키텍처 소개

🚀 아키텍처 구성요소

🧠 Control Plane

Kubernetes의 두뇌역할을 담당하고있으며 클러스터의 신경 중추라고도 표현한다. 여기에는 클러스터를 제어하는 쿠버네티스 구성 요소와 상태 및 구성에 관한 데이터가 함께 있다.
Manage, Plan, Schedule, Monitor Nodes 등을 수행한다.

kube-api

클러스터 내에서 모든 작업은 여기를 통해 들어오고 나간다.
Control Plane 에서 Worker Node에게 지시를 할 때도 kube-api를 지난다.

kube-scheduler

지금 사용 가능한 컨테이너와 기타 조건들을 기준으로 스케줄을 조정해주는 모듈
CPU, Memory상황등을 보고 이 Pod는 Node2에 올리자 등 이런식으로 판단해준다.

더 자세히 말하자면, Kubernetes는 두 단계를 거쳐 Pod에 가장 적합한 Node를 찾아준다.

  • Fileter Nodes : CPU, Memory 요구사항이 맞지 않는 Node를 걸러낸다.
  • Rank Nodes : 우선순위 함수를 이용하여 Node마다 점수를 매겨, 가장 효율적이고 리소스 누수가 없는 적합한 Node를 찾는다.

kube-controller-manager

kubernetes에서 controller는 시스템 내 다양한 구성 요소의 상태를 지속적으로 모니터링하고 시스템 전체를 원하는 상태로 만드는 것을 의미한다.
controller는 scheduler를 참고하여 정확한 수의 Pod가 실행되도록 컨트롤 한다.
Pod가 3개 있어야 함 -> 하나 죽으면 새로 만들어줌

Kuber-Controller-Manager 안에는
Node Controller, Job Controller, Deployment Controller, Namespace Controller, Endpoint Controller, PV-Protection Controller, Replication Controller, Replicaset Controller, Stateful-Set Controller, CronJob Controller 등 다양한 Controller가 포함되어 있다.

ETCD Cluster

어떤 배에 어떤 컨테이너가 들어있고, 몇시에 적재되었는지 등 쿠버네티스의 모든 설정, 상태, 위치 정보 저장 정보를 담고있는 고가용 키-값 데이터베이스.
모든 정보를 담고 있기 때문에 클러스터의 "진짜 뇌" 라고도 부른다.

⛴️ Compute machines(Worker Node)

Compute Machine == Worker Node == 일꾼 노드
쿠버네티스에서 실제로 컨테이너(Pod)가 돌아가는 서버를 말한다.
일반적으로 하나의 클러스터에는 여러개의 Worker Node가 있고, 각각이 Container를 실행한다.

kubelet

클러스터의 각 노드에서 실행되는 에이전트.
컨테이너를 띄우고 Control Plane(kube-apiserver)랑 소통하여 컨테이너를 실행/모니터링 등
관리한다.
kube-api(선장)의 지시를 듣고 kubelet(선원)이 필요한 대로 노드에서 컨테이너를 배포하거나 파괴함
kube-api(선장)은 주기적으로 kubelet(선원)에게 상태보고서를 받음(컨테이너 상태 모니터)
kubeadm으로 설치 시 kubelet을 수동으로 따로 설치해주어야 한다.

kube-proxy

네트워크 관리자 역할을 수행한다.
외부 트래픽이 올 때 적절한 Pod로 라우팅 하는 역할을 수행한다.
클러스터 내 작업자 노드에 필요한 네트워크 규칙을 설정하고 시행되도록 한다.

Container runtime

컨테이너를 실제로 실행하는 컨테이너 Runtime을 의미한다.
docker, containerD, rkt 등 종류가 있다.

Pod

컨테이너를 담는 상자이다.
하나 이상의 컨테이너를 담는 최소 실행 단위를 뜻하는데, 보통 Pod라고 하면 하나의 컨테이너 + 부가적인 설정 정도로 생각하면 된다고 한다.

Containers

nginx, mysql, node.js 등 애플리케이션이 실제로 실행되는 단위이다.

💾 Persistant storage

데이터를 유지하는 저장소이다.
Pod가 죽거나 이동해도 데이터가 남아 있어야 할 때 사용한다.
종류에는 AWS EBS, NFS, GCP Persistent Disk 등이 있다.

🏠 Container registry

이미지를 저장하고 가져오는 창고이다.
DockerHub, Google Container Registry(GCR), private registry 등의 종류가 있다.
kubectl apply 명령어를 요청하면 여기서 이미지를 받아와서 컨테이너로 실행한다.

profile
자몽 허니 블랙티와 아메리카노 사이 그 어딘가

0개의 댓글