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
쿠버네티스 (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 값들을 기반으로 객체들을 선택할 수 있음
- Equality-Based Selectors
- Label Selectors들은 객체들의 집합을 선택하며 Kubernetes는 2가지 종류를 지원함
- 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 비용