[Section4] 쿠버네티스(Kubernetes)
2023. 7. 21. 10:05
🧑🏻💻 TIL(Today I Learned)
✔️ 쿠버네티스
💡 쿠버네티스(Kubernates)
➡️ 구글에서 개발한 컨테이너 오케스트레이션(orchestration) 도구, 대규모 분산 애플리케이션의 배포, 관리, 확장을 자동화하는 오픈 소스 플랫폼
- 컨테이너화된 애플리케이션을 효율적으로 실행하기 위한 다양한 기능과 도구 제공
(도커가 나타나면서 다양한 컨테이너 오케스트레이션 도구가 등장함) - 도커(Docker)와 같은 컨테이너 런타임을 기반으로 동작함
- 애플리케이션을 컨테이너로 패키징하여 이식성과 확장성을 가진 기술인 도커 컨테이너를 관리하고 조율하여 클러스터 내에서 효율적으로 운영할 수 있도록 함
- 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링하는 등의 관리 기능 제공
- 각기 다른 환경에 대응 가능
🔎 주요 기능
- 컨테이너 스케줄링
- 클러스터 내에서 컨테이너를 적절히 분배하고 스케줄링하여 자원을 효율적으로 활용함
- 노드 간의 부하 분산, 자동 복구 및 확장 기능 제공
▶ 즉 컨테이너 가상화 기술을 사용하여 어떤 컨테이너가 어떤 호스트 또는 노드에서 실행될지를 결정하는 프로세스 - 자동화된 롤링 업데이트
- 애플리케이션의 업데이트나 패치를 자동으로 배포하고 관리할 수 있음
- 서비스의 가용성을 유지하면서 사용자에게 중단 없는 업데이트를 제공할 수 있음
▶ 롤링 업데이트란 소프트웨어나 애플리케이션의 새로운 버전을 서비스 중인 시스템에 점진적으로 배포하는 방법 - 스케일 인/아웃
- 애플리케이션의 수평 스케일링을 지원하여 필요에 따라 자동으로 애플리케이션 인스턴스의 개수를 조정할 수 있음
- 부하에 따라 자원을 동적으로 조절하여 성능을 향상할 수 있음
▶ 스케일 인(Scale-In)
: 애플리케이션의 현재 인스턴스 수를 줄이는 것을 의미
: 애플리케이션에 대한 수요가 감소하거나 자원 사용률이 낮아질 때 더 이상 필요하지 않은 리소스를 해제하는 작업
▶ 스케일 아웃(Scale-Out)
: 애플리케이션의 현재 인스턴스 수를 늘리는 것을 의미
: 애플리케이션에 대한 수요가 증가하거나 자원 사용률이 높아질 때 추가 리소스를 할당하여 성능과 가용성 유지하는 작업
▷ 가용성(Avaulability)
: 시스템이 사용자 또는 클라이언트의 요청을 수행하거나 서비스를 제공할 수 있는 정도를 나타내는 지표
: 예상치 못한 장애 또는 문제가 발생하더라도 사용자들이 서비스를 계속 이용할 수 있는 상태 - 서비스 디스커버리와 로드 밸런싱
- 애플리케이션 인스턴스를 위한 네트워크 서비스 디스커버리와 로드 밸런싱 제공
- 내부와 외부의 트래픽을 적절히 분배하여 안정적인 서비스를 제공할 수 있음
▶ 서비스 디스커버리(Service Discovery)
: 분산 시스템에서 서비스들의 위치와 상태를 자동으로 찾아주는 기능
▶ 로드 밸런싱
: 여러 대의 서버나 컴퓨팅 리소스에 트래픽을 균등하게 분산시켜주는 기술 - 자가 치유와 자동 복구
- 애플리케이션 및 노드의 상태를 지속적으로 모니터링하고 장애가 발생하면 자동으로 장애를 탐지하고 복구함
- 서비스의 가용성과 안정성을 높일 수 있음
🔎 쿠버네티스의 주요 개념
➡️ 쿠버네티스로 실행하는 애플리케이션은 애플리케이션을 구성하는 다양한 리소스가 함께 연동해 동작하며 리소스로는 노드, 네임스페이스, 파드 등이 있음
- 노드(Node)
: 쿠버네티스 클러스터를 구성하는 개별 서버 또는 가상 머신을 나타내는 리소스
: 애플리케이션 컨테이너를 실행하고 관리하는데 사용됨
: 각 노드는 CPU, 메모리, 스토리지 등의 자원을 가지고 있으며 Pod가 노드 상에서 실행
클러스터(Cluster)
→ 여러 대의 컴퓨터 또는 서버가 네트워크로 연결되어 하나의 시스템처럼 동작하는 컴퓨팅 리소스 그룹
- 파드(Pod)
: 쿠버네티스에서 가장 작은 배포 단위, 하나 이상의 컨테이너 포함
: 관련 컨테이너를 함께 실행하고 네트워크와 스토리지 리소스를 공유할 수 있음 - 네임스페이스(Namespace)
: 쿠버네티스 클러스터 내에서 리소스를 그룹화하고 격리하는 논리적인 공간
: 리소스의 이름 충돌을 방지하고 다른 팀 또는 애플리케이션 간의 리소스를 분리하여 관리할 수 있음
: 클러스터 관리를 단훈화하고 보안 및 리소스 관리를 용이하게 함
이 외에도 리소스에는 레플리카세트(ReplicaSet), 디플로이먼트(Deployment), 서비스(Service), 인그레스(Ingress), 컨피그맵(ConfigMap), 잡(Job) 이 있음
💡 컨테이너 오케스트레이션
➡️ 수십에서 수백 개의 컨테이터를 관리하고자 할 때 보다 더 잘 관리하기 위한 툴
- 아키텍처의 트렌드가 모놀리식에서 마이크로서비스로 바뀌고 이로 인해 컨테이너 개수가 증가하고, 확장성을 고려해 스케일링까지 더할 경우 수백 개의 컨테이너가 생겨나며 컨테이너 오케스트레이션을 사용할 수 있음
- 쿠버네티스를 이용해 온프레미스 상에서 (사설) 클라우드 인프라를 구성하고, 저렴한 클라우드 서비스의 일부분을 도입하여 하이브리드 형태로 구성하기도 하며 필요에 따라 쿠버네티스로 구성한 이프라를 통째로 AWS 등에 마이그레이션함
🔎 주요 기능
- 클러스터 관리
- 여러 호스트(서버 또는 가상 머신)로 구성된 클러스터를 관리함
- 클러스터는 애플리케이션 컨테이너를 실행하고 관리하는 노드의 집합 - 스케줄링
- 컨테이너를 실행할 노드를 지능적으로 선택하는 스케줄링 기능 제공
- 리소스 사용량, 가용성, 네트워크 규칙 등을 고려하여 컨테이너를 최적의 노드에 배치 - 네트워킹
- 컨테이너 간의 네트워크 통신 관리
- 컨테이너를 가상 네트워크에 연결하고 로드 밸런싱, 서비스 디스커버리, 네트워크 정책 등을 제공하여 컨테이너 간의 안전하고 신뢰성 있는 통신 지원
- 스케일링
- 애플리케이션 컨테이너의 수평 스케일링 지원
- 컨테이너를 필요에 따라 자동으로 복제하거나 제거하여 부하 분산과 리소스 활용을 최적화함 - 서비스 디스커버리
- 컨테이너 오케스트레이션 플랫폼은 애플리케이션 서비스에 대한 디스커버리 매커니즘 제공
- 외부에서 접근 할 수 있는 단일 진입점을 생성하고, 애플리케이션 컨테이너를 자동으로 로드 밸런싱하여 서비스의 가용성과 확장성을 유지 - 롤링 업데이트
- 컨테이너 오케스트레이션 플랫폼은 애플리케이션의 롤링 업데이트를 지원함
- 새로운 버전의 컨테이너를 점진적으로 배포하고 이전 버전의 컨테이너를 제거하여 서비스 중단없이 애플리케이션 업데이트를 수행함
💡 쿠버네티스 작동 원리
- 워커 노드는 kublet이라는 프로세스가 돌아가고 있고, 이 kublet은 다른 노드와 서로 통신하거나 컨테이너를 실행하는 등의 태스크를 실행할 수 있게 함
- 워커 안에는 한 개 이상의 컨테이너가 자리잡고 있으며, 즉 워커 노드는 실제로 애플리케이션이 실행되고 있는 곳
- 쿠버네티스에서 위와 같은 컨테이너를 컨테이너가 사용하는 볼륨, 컨테이너의 작동 정보를 파드(Pod)라는 이름으로 부름
✔️ 제어판(Control Plane) 컴포넌트
➡️ 클러스터는 최소 하나 이상의 제어판 컴포넌트와 연결된 몇 개의 워커 노드로 구성되어 있음
- 관리를 위해 필요한 프로세스들은 전부 제어판 컴포넌트에 있음
- 제어판 컴포넌트는 클러스터가 잘 작동할 수 있도록 도움
✍🏻 제어판 컴포넌트에 있는 여러가지 프로세스
📍 API 서버
: 모든 클러스터 관리의 입구로서 명령을 내릴 수 있는 관문
: 실제로 쿠버네티스에서 제공되는 UI나 CLI 등에서 클러스터 관리를 위해 명령을 내리면 API가 호출됨
📍 Controller Manager(위 사진에서 c-m)
: 클러스터에서 무슨 일이 발생하는지 추적하는 역할
📍스케줄러(sched)
: 서버(노드) 리소스를 바탕으로 컨테이너(정확히는 pod)가 노드에 배치되게 만드는 역할
: 새로 생성된 컨테이너를 찾아 노드에 할당함
📍 ETCD 데이터베이스(etcd)
: Key-value 저장소
: 클러스터 관리에 필요한 모든 데이터를 저장하는 공간
: 인프라를 원하는 상태로 만들기 위해 정상 상태에 대한 snapshot 및 관리에 필요한 메타 데이터가 저장되는 곳
💡 쿠버네티스 설치
쿠버네티스를 로컬 환경에서 실행하기 위해서는 minikube로 시작하는 것이 편리함
minikube란? 쿠버네티스 로컬 클러스터 환경
도커와 같은 컨테이너 런타임이 준비되어 있다면 간단한 명령을 통해 쿠버네티스 설치하고 사용할 수 있음
- 공식 문서를 참고하여 homebrew로 설치하였음
- minikube start 명령어 통해 쿠버네티스를 실행할 수 있음
- 잘 작동되는지 확인하기 위해 kubectl get pods -A 명령을 실행
- 모든 네임스페이스(-A) 존재하는 모든 파드를 조회하는 명령어
- 제어판(Control Plane)의 구성요소가 파드로 존재함을 확인할 수 있음
'SEB_BE_45 > 공부 정리' 카테고리의 다른 글
[Section4] 운영환경(cloud) - AWS (0) | 2023.07.24 |
---|---|
[Section4] 쿠버네티스(kubernetes) - 워크로드 (0) | 2023.07.21 |
[Section4] Docker (0) | 2023.07.20 |
[Section4] Oauth2 인증(Authentication) (0) | 2023.07.17 |
[Section 4] 인증/보안 기초 (0) | 2023.07.11 |