쿠버네티스란?
여러 서버로 구성된 클러스터 환경에서 컨테이너화된 프로세스를 관리하기 위한 컨테이너 오케스트레이션(Orchestration) 플랫폼
- 호스트 운영체제를 공유
- 가상 머신에 비해 훨씬 더 가볍습니다.
- 가상 머신과 마찬가지로 실행 환경을 독립적으로 가져갈 수 있습니다.
- 컨테이너를 쉽게 복제하거나 배포할 수 있습니다.
- 컨테이너의 배포, 확장, 스케줄링을 자동화할 수 있습니다.
- CNCF(Cloud Native Computing Foundation, Cloud Native 오픈소스를 관리하는 재단)의 첫 번째 프로젝트
컨테이너 오케스트레이션이란?
다수의 서버 위에서 컨테이너의 전반적인 라이프사이클을 관리해주는 플랫폼
쿠버네티스는 컨테이너의,
- 실행 및 배포를 책임집니다.
- 이중화와 가용성을 보장합니다.
- 수평확장 및 축소를 관리합니다.
- 스케줄링을 담당합니다.
- 네트워크 설정을 관리합니다.
- health 상태를 모니터링 합니다.
- 설정값을 관리합니다.
데이터 센터 운영체제
데이터 센터(또는 클러스터) : 여러 서버를 연결하여 하나의 시스템처럼 동작하게 하는 컴퓨터의 집합
쿠버네티스를 데이터 센터 운영체제 또는 클러스터 운영체제라고 소개합니다.
이유는 쿠버네티스가 여러 컴퓨터의 집합으로 이루어진 하나의 거대한 시스템을 추상적으로 제어할 수 있는 사용자 인터페이스를 제공하고 프로그램(컨테이너)이 정상적으로 실행될 수 있게 여러 가지 기능을 제공하는 플랫폼이기 때문입니다.
쿠버네티스의 기본 개념
- 하드웨어 추상화 기능 제공
- 컨테이너의 스케줄링, 자원할당 관리 등의 기능 제공
- kubectl이라는 유저 인터페이스를 이용하여 쿠버네티스를 제어
쿠버네티스가 서버를 바라보는 관점
- 서버마다 특정 역할이 정해져 있지 않습니다.
- 1~2개의 서버가 망가져도 문제없습니다.
- 마스터 / 워커
- 마스터에서는 쿠버네티스를 운용하기 위한 필수적인 핵심 컴포넌트가 존재
- 워커 노드들은 단순히 컨테이너를 실행하는 환경으로 사용
바라는 상태 (Desired State)
사용자가 생각하는 최종 애플리케이션 배포 상태
쿠버네티스가 자동으로 현재 상태를 바라는 상태로 변경합니다.
Controller
현재 상태를 바라는 상태로 변경하는 주체
컨트롤러는 control-loop라는 루프를 돌면서 특정 리소스를 지속적으로 모니터링하다가 정의된 작업을 수행합니다.
쿠버네티스 Resource
가장 기본적인 리소스 : Pod
Pod : 하나 이상의 컨테이너를 가지는 쿠버네티스의 최소 실행 단위
Declarative Command (선언형 커맨드)
사용자가 직접 시스템의 상태를 바꾸지 않고 사용자가 바라는 상태를 선언적으로 기술하여 명령을 내리는 방법
명령형 커맨드 예: SQL 쿼리
선언형 커맨드 예: HTML 문서 (무엇을 해야 하는지 선언되어 있음)
쿠버네티스에서는 YAML 형식을 이용하여 선언형 명령을 내립니다.
Namespace
클러스터를 논리적으로 분리
쿠버네티스의 모든 리소스를 크게 두 가지로 분리하자면 Namespace 레벨 리소스와 Cluster 레벨 리소스로 구분이 됩니다.
Label & Selector
특정 리소스에 명령을 전달하거나 정보를 확인하고 싶을 때 라벨링 시스템을 이용합니다.
Service Discovery (서비스 탐색)
쿠버네티스 클러스터내에서 통신하기 위해 노드 위치와는 상관없이 어디서는 접근할 수 있는 서비스 끝점(Service Endpoint)이 필요합니다. Service Endpoint를 통해 다른 컨테이너 (Pod)와 통신할 수 있습니다. 이를 위해 Enpoint의 접속 정보(예: IP)를 알아야 합니다. 이를 서비스 탐색이라고 합니다.
쿠버네티스는 서비스 탐색을 지원하기 때문에 도메인 주소를 기반으로 서비스에 접근할 수 있습니다.
쿠버네티스에서는 서비스 탐색 기능을 Service라는 리소스를 이용하여 제공합니다.
설정 관리
설정값 및 민감 정보(credentials)를 플랫폼 레벨에서 관리할 수 있게 메커니즘을 제공합니다. ConfigMap 또는 Secret이라는 리소스를 이용하여 컨테이너의 설정들을 관리합니다.
아키텍처 - 마스터 / 워커 노드
Master
쿠버네티스 클러스터를 구성하는 핵심 컴포넌트
- kube-apiserver (API 서버) : REST API 서버
- 모든 요청의 진입점
- 직접 다른 컴포넌트에게 요청을 보내는 역할도 수행
- etcd (저장소) : 모든 메타 정보를 저장하는 저장소
- DB 역할을 수행
- 분산형 key-value 저장소
- kube-scheduler (컨테이너 스케줄러) : 적절하게 컨테이너를 워커 노드에 배치하는 스케줄러
- 지속적으로 아직 실행되지 못한 컨테이너가 없는지 확인
- 적절한 서버를 선택하여 컨테이너를 배치
- kube-controller-manager (컨트롤러 집합) : 바라는 상태를 지속적으로 확인하며 특정 동작을 수행하는 컨트롤러
- control loops를 돌며 현재 상태(current state)와 바라는 상태(desired state)를 비교
- desired state가 되도록 클러스터의 상태를 바꾸는 역할
- 전반적인 리소스의 라이프사이클 관리
- cloud-controller-manager (클라우드 컨트롤러) : 클라우드(AWS, GCP, Azure 등)에 특화된 리소스를 제어하는 클라우드 컨트롤러
- 클라우드 플랫폼의 로드밸런스를 연결하거나 스토리지를 추가
단일한 서버로 구성할 수 있으며, 여러 서버를 묶어 클러스터 마스터로도 구축할 수 있습니다.
Node
워커 노드에는 마스터로부터 명령을 전달 받아 컨테이너를 실행시키는 노드 관리자와 컨테이너가 정상적으로 실행될 수 있도록 도와주는 네트워크 프록시와 실행 환경이 있습니다.
- kubelet (노드 관리자)
- 각 노드에서 실행되는 메인 컴포넌트
- 상세 명세(spec)를 받아 실행시키고, 해당 컨테이너가 정상 동작하는지 지속적으로 모니터링
- 주기적으로 API 서버와 통신하여 마스터-노드 간에 필요한 정보를 서로 주고 받습니다.
- kube-proxy (네트워크 프록시)
- 각 노드에 위치
- 쿠버네티스 서비스 네트워킹을 담당
- 서비스마다 개별 IP를 가질 수 있게 만들어주고 패킷을 라우팅합니다.
- container runtime (컨테이너 실행 환경)
- 실제 컨테이너를 실행시키는 역할을 담당
- 예: Docker
쿠버네티스 장점
- 실행 환경 고립화
- 실행 환경 자체가 가상 환경으로 감싸져 있어서, 프로세스를 어디서나 실행시킬 수 있습니다.
- 리소스 관리
- 클러스터 시스템의 전반적인 리소스를 관리할 수 있습니다.
- 스케줄링
- 쿠버네티스 내장 스케줄러가 최적의 노드를 찾아 컨테이너를 배치해줍니다.
- 필요에 따라서는 사용자가 원하는 노드로 컨테이너가 할당될 수 있게 상세 스케줄링 정책을 설정할 수 있는 메커니즘도 제공합니다.
- 프로세스 관리
- 클러스터 내에서 실행되고 있는 모든 컨테이너를 명령 하나로 확인할 수 있습니다.
kubectl get pods
- 클러스터 내에서 실행되고 있는 모든 컨테이너를 명령 하나로 확인할 수 있습니다.
- 통합 설정 관리
- 특정 서버와의 종속성 없이 중앙에서 통합하여 설정값들을 관리할 수 있습니다.
- 손쉬운 장애 대응
- 프로세스마다 리소스 사용량을 제한시킬 수 있어서, 문제가 되는 프로세스에만 장애가 발생하고 나머지는 영향을 받지 않게 설정할 수 있습니다.
- 모든 실행 정보는 마스터에서 관리되고 각 노드들은 특별한 역할을 가지지 않으므로, 새로운 노드로 이주하는 작업은 매우 간단합니다.
- 자동 확장
- 평소에는 최소한의 자원만 준비하고, 필요 시 자동으로 리소스를 추가하는 자동 확장 기능을 활용할 수 있습니다.
- 하이브리드 클라우드 운영
- 클라우드 플랫폼 뿐만 아니라 온프레미스 환경에서도 구축할 수 있습니다.
- 자가 치유
- 내부적으로 바라는 상태와 현재 상태를 저장해서, 현재 상태와 바라는 상태가 달라지면 컨테이너를 다시 실행합니다.
- 데이터 스토리지 관리
- 로컬 스토리지가 될 수 있으며, 네트워크 스토리지(클라우드 플랫폼에서 제공하는 저장소 또는 NFS)를 손쉽게 연결하고 해제할 수 있는 기능을 내장하고 있습니다.
- 배포 자동화
- 바라는 상태를 지정하면 자동으로 적절한 노드를 선택하여 컨테이너를 배치합니다.
- 새로운 버전의 애플리케이션을 배포하거나 이전 버전으로 롤백할 때 쿠버네티스가 자동으로 대신 수행해줍니다.
'Study😜 > 핵심만 콕! 쿠버네티스' 카테고리의 다른 글
쿠버네티스 컨트롤러 (0) | 2025.02.10 |
---|---|
쿠버네티스 네트워킹 (0) | 2025.02.09 |
Pod 살펴보기 (0) | 2025.02.05 |
쿠버네티스 첫 만남 (0) | 2025.02.03 |
쿠버네티스 설치 (0) | 2025.02.01 |