Programming/클라우드

쿠버네티스 (Kubernetes)

Boxya 2025. 6. 24. 23:39

[KT] AIVLE SCHOOL 55일차

 

Container Orchestration

  • 여러 개의 컨테이너를 자동으로 배포, 실행, 관리, 확장, 복구하는 기술
  • 수많은 컨테이너를 효율적으로 운영하는 자동화 기술
  • "수백 개의 컨테이너를 한 명의 관리자가 일일이 수동으로 운영하는 대신, 자동으로 조율해주는 시스템"
  • 기능 설명 
    자동 배포 및 스케줄링 컨테이너를 클러스터 내에서 최적의 위치에 자동 배치
    자동 확장/축소 트래픽 변화에 따라 컨테이너 수 조절
    자가 복구(Self-healing) 죽은 컨테이너 자동 재시작
    서비스 디스커버리 및 로드 밸런싱 컨테이너 간 통신, 외부 노출을 쉽게
    롤링 업데이트와 롤백 앱 무중단 배포 및 되돌리기 지원
  • 특징
    • 컨테이너 자동 배치 및 복제
    • 컨테이너 그룹에 대한 로드 밸런싱
    • 컨테이너 장애 복구
    • 클러스터 외부에 서비스 노출
    • 컨테이너 확장 및 축소
    • 컨테이너 서비스간 인터페이스를 통한 연결
  • Container Orchestrators
    • Kubernetes
      • 구글에서 개발, 가장 기능이 풍부하며 널리 사용되는 오케스트레이션 프레임워크
      • 베어 메탈, VM 환경, 퍼블릭 클라우드 등의 다양한 환경에서 작동하도록 설계
      • 컨테이너의 롤링 업그레이드 지원
    • Docker Swarm
      • 여러 개의 Docker 호스트를 함께 클러스터링하여 단일 가상 Docker 호스트를 생성
      • 호스트 OS에 Agent만 설치하면 간단하게 작동하고 설정이 용이
      • Docker 명령어와 Compose를 그대로 사용 가능
    • Apache Mesos
      • 수만 대의 물리적 시스템으로 확장할 수 있도록 설계
      • Hadoop, MPI, Hypertable, Spark같은 응용 프로그램을 동적 클러스터 환경에서 리소스 공유와 분리를 통해 자원 최적화 가능
      • Docker 컨테이너를 적극적으로 지원

쿠버네티스 (Kubernetes)

  • 컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장해주는 오픈소스 플랫폼
  • 도커(Docker)와 같은 컨테이너 기술 덕분에 앱을 빠르게 배포할 수 있게 되었지만 운영 단계에서는 다음과 같은 문제가 있음
    • 컨테이너가 여러 개일 때 자동 배포 및 관리가 어려움
    • 트래픽이 많아질 때 자동 확장 필요
    • 컨테이너가 죽었을 때 자동 복구 필요
    • 어디서 어떤 컨테이너가 도는지 모니터링 및 로드 밸런싱 필요
    • 이 모든 걸 자동으로 처리해주는 도구가 바로 Kubernete
  • 주요 개념
    • Pod : 하나 이상의 컨테이너가 묶인 최소 실행 단위, 쿠버네티스 최소 배포 단위
    • Node : 실제 컨테이너가 실행되는 서버(가상/물리)
    • Cluster : 여러 노드로 구성된 쿠버네티스 전체 시스템
    • Deployment : 앱을 어떤 방식으로 배포할지 정의 (버전 관리 포함)
    • Service : 외부 접근, 내부 통신을 위한 네트워크 추상화 (로드밸런서 역할)
    • Master 노드 : 클러스터의 상태 관리
    • Worker 노드 : 애플리케이션 실행
      • Docker Runtime: Worker 내부에서 컨테이너를 실행하는 엔진
  • 대표 기능
    • 자동 배포 및 롤백
    • 자동 스케일링 (수평/수직 확장)
    • 상태 모니터링 및 자동 복구
    • 서비스 디스커버리 및 로드 밸런싱
    • 구성 및 보안 설정 관리(ConfigMap, Secret 등)
  • 쿠버네티스를 도입하면?
    • DevOps, MSA(마이크로서비스) 환경에 안정성과 확장성 확보
    • 인프라를 코드처럼 관리하는 IaC(Infra as Code) 실현
    • 클라우드 벤더에 종속되지 않는 멀티 클라우드 운영 가능
  • Kubernetes Origin
    • Borg System 영향을 받아,2014년 구글의 의해 처음 발표
    • 2015년 7월 21일, v1.0출시
    • 리눅스재단과 Cloud Native Computing Foundation(CNCF) 설립
    • Kubernetes를 seed 테크놀로지(seed technology)로 제공
  • Kubernetes 핵심 개념 : "목표 상태 달성"
    • Kubernetes는 Current State을 모니터링하면서, Desired State를 유지하려는 습성
    • 직접적인 동작을 명령하지 않고, 원하는 상태를 선언(Not Imperative, But Declarative)
      • Imperative - "nginx 컨테이너를 3개 실행해줘, 그리고 80 포트로 오픈해줘."
      • Declarative - "80포트를 오픈한 채로, nginx 컨테이너를 3개 유지해줘."
  • Labels
    • Labels은 객체 식별 정보로서 Kubernetes 객체라면 모두 붙일 수 있음
    • Labels들은 요구사항에 맞춰 개체의 하위 집합을 구성하고 선택하는데 사용됨
    • Label들은 객체에 고유성을 제공하지 않아 여러 객체들은 같은 label을 가질 수 있음
  • Label Selectors
    • Label Selectors들은 객체들의 집합을 선택하며 Kubernetes는 2가지 종류를 지원함
      • Equality-Based Selectors
        • Uses the =, ==, != 연산자를 이용하여 Label key와 value 값을 기반으로 객체들을 필터링 할 수 있음
      • Set-Based Selectors
        • in, notin, exist 연산자를 사용하며 value 값들을 기반으로 객체들을 선택할 수 있음
  • Replication Controllers (복제 컨트롤러)
    • Master node의 Controller Manager 중 하나
    • Pod의 복제품이 주어진 개수(Desired State) 만큼 작동하고 있는지 확인하고 개수를 조절함
    • Replication Controller는 Pod를 생성하고 관리함
      • 일반적으로 Pod는 자기 복구가 불가능 하기에 단독으로 배포 하지 않음
  • ReplicaSets
    • ReplicaSet(rs)은 Replication Controller의 업그레이드 버전
    • ReplicaSet은 equal 및 set 기반 Selector를 모두 지원하는 반면, Replication Controller는 equal 기반 Selector만 지원
    • 지정된 수의 Pod (Desired State)가 항상 실행되도록 보장
    • ReplicaSets은 단독으로도 사용 가능하지만, 주로 Pod Orchestration에 사용 (Pod creation, deletion, updates)
    • Deployment가 ReplicaSets을 자동 생성하기 때문에 사용자는 관리에 신경 쓰지 않아도 됨
  • Deployments
    • Deployment 객체는 Pods와 ReplicaSets에 대한 선언적 업데이트를 제공함
    • Deployment Controller는 Master node 컨트롤 관리자의 일부로 Desired state가 함상 만족이 되는지 확인함
    • Deployment가 ReplicaSet을 만들고 ReplicaSet는 그 뒤에 주어진 조건만큼의 Pod들을 생성함
    • Deployment의 Pod template이 바뀌게 되면, 새로운 ReplicaSet이 생성되는데, 이를 Deployment rollout이라고 함
    • Rollout은 Pod template에 변동이 생겼을 경우에만 동작하며 Scaling 등의 작업은 ReplicaSet을 새로 생성하지 않음
    • 새로운 ReplicaSet이 준비되면 Deployment는 새로운 ReplicaSet을 바라봄
    • Deployment들은 Deployment recording등의 rollback 기능을 제공하며 문제가 발생했을 경우 이전 단계로 돌릴 수 있음
  • Namespaces
    • Kubernetes는 동일 물리 클러스터를 기반으로 하는 복수의 가상 클러스터를 지원하는데 이들 가상 클러스터를 Namespace라고 함
    • Namespace를 활용하면 팀이나 프로젝트 단위로 클러스터 파티션을 나눌 수 있음
    • Namespace 내에 생성된 자원/객체는 고유하나 Namespace 사이에는 중복이 발생할 수 있음
    • Kubernetes는 생성 시에 4개의 네임스페이스를 제공함
      • default : 별도로 네임스페이스를 지정하지 않은 모든 사용자 및 애플리케이션 리소스가 기본적으로 배치되는 네임스페이스
      • kube-node-lease : 노드 상태를 추적하고 관리하기 위해 각 노드의 리스(Lease) 오브젝트*를 저장하는 네임스페이스
      • kube-public : 모든 사용자에게 읽기 전용으로 접근할 수 있는 클러스터 공용 정보 저장을 위한 네임스페이스
      • kube-system : Kubernetes 시스템의 핵심 컴포넌트 및 서비스를 호스팅하는 중요한 네임스페이스

클라우드 플랫폼

  • Microsoft Azure
    • 직관적이고 편한UI
    • 높은 윈도우 서비스 호환
    • 국내 2개 리전 보유
    • VM 생성 및 실행 속도
    • 가장 많은 글로벌 지역 보유, 56개 리전 140개 국가
  • AWS
    • 우세한 시장 점유율
    • 높은 서비스 성숙도
    • 광범위한 서비스 교육
    • UI 및 사용성, 이용 요금
  • Google Cloud Platform
    • Cloud-friendly Biz 디자인
    • 전문적인 DevOps 보유
    • 높은 컴퓨터 오퍼링
    • 높은 Windows VM 비용