Fairy ' s
[Cloud] 쿠버네티스 (k8s / kube) 본문
- 쿠버네티스란?
- 쿠버네티스 클러스터
- 쿠버네티스를 사용하여 수행할 수 있는 작업
- 쿠버네티스 용어
- 작동 방식 / 사용 방법
- 쿠버네티스가 필요한 이유
쿠버네티스
- **컨테이너화 된 애플리케이션을 배포, 관리, 확장할 때 수반되는 다수의 수동 프로세스를 자동화하는 오픈소스 컨테이너 **오케스트레이션 플랫폼
- 사용자의 환경에서 쿠버네티스 사용 시 장점은, 특히 클라우드를 위해 애플리케이션 개발을 최적화 하는 경우 쿠버네티스를 통해 물리 또는 가상 머신의 **클러스터에서 컨테이너를 예약하고 실행할 수 있는 플랫폼이 확보 된다.
- 프로덕션 환경에 컨테이너 기반 인프라를 완전히 구현해서 사용할 수 있고, 운영 작업 자동화와 관련이 있다.
- 쿠버네티스는 원래 Google 엔지니어들이 개발하고 설계한 플랫폼이다.
** 컨테이너 : 데스크탑, 기존의 IT 또는 클라우드 등 어디서나 실행될 수 있도록 애플리케이션 코드가 해당 라이브러리 및 종속 항목과 함께 패키징 되어 있는 소프트웨어 실행 유닛
** 오케스트레이션 : 컴퓨터 시스템과 애플리케이션, 서비스의 자동화된 설정, 관리, 조정을 의미한다.
** 쿠버네티스 클러스터 (Kubernetes cluster)
- 애플리케이션 컨테이너를 실행하기 위한 일련의 노드 머신 (작동 중인 쿠버네티스 배포)
- 컨트롤 플레인과 컴퓨팅 머신(또는 노드)으로 시각화 할 수 있다.
- 클라우드에 구애받지 않고 머신 그룹 전체에서 컨테이너를 예약하고 실행할 수 있다.
- 쿠버네티스 클러스터에는 원하는 상태가 있으며, 이 상태는 구성 세부 사항(워크로드, 이미지, 리소스 등)을 정의한다.
원하는 상태는 **매니페스트로 이루어진 구성 파일로 정의되고, 원하는 클러스터 상태는 **쿠버네티스 API로 정의된다.
** 매니페스트 : 실행할 애플리케이션의 유형과 정상적인 시스템을 실행하기 위해 필요한 복제본의 수를 선언하는 JSON / YAML 파일
** 쿠버네티스 API : 쿠버네티스 **컨트롤 플레인의 프론트엔드 / 사용자가 쿠버네티스 클러스터와 상호 작용하는 방식
** 컨트롤 플레인 : 프로그래머는 **데이터 플레인이 어떻게 동작할지 컨트롤 플레인을 통해 설정하고, 데이터 플레인을 관리하기 위한 API, CLI, GUI를 지원한다.
** 데이터 플레인 : 서비스 간 네트워크 트래픽을 관리하는 **서비스 메쉬 애플리케이션
** 서비스 메쉬 : 한 애플리케이션의 여러 서비스들이 서로 통신하며 데이터를 주고 받는 것을 서비스의 소스코드와 상관없이 제어하는 것
쿠버네티스를 사용하여 수행할 수 있는 작업
- 여러 호스트 전반에서 컨테이너를 오케스트레이션 한다.
- 하드웨어를 더욱 효과적으로 활용하여 **엔터프라이즈 애플리케이션을 실행하는 데 필요한 리소스를 극대화 한다.
- 애플리케이션 배포 및 업데이트를 제어하고 자동화한다.
- 스토리지를 마운트 및 추가하여 **스테이트풀 애플리케이션을 실행한다.
- 컨테이너화 된 애플리케이션과 해당 리소스를 즉시 확장한다.
- 서비스를 선언적으로 관리함으로써, 배포한 애플리케이션이 항상 의도한대로 실행되도록 보장한다.
- 자동 배치 / 재시작 / 복제 / 스케일링 기능으로 애플리케이션 상태를 점검하고 자가 치유를 할 수 있다.
** 엔터프라이즈 애플리케이션 : 비즈니스 또는 정부와 같은 회사 환경에서 작동하도록 설계된 대규모 소프트웨어 시스템 플랫폼
** 스테이트풀 애플리케이션 : 상호작용 상태가 얼마나 오래 기록되고, 해당 정보가 어떤 식으로 저장 되는지를 기준으로 구별할 수 있다.
쿠버네티스 용어
- 컨트롤 플레인 : 쿠버네티스 노드를 제어하는 프로세스의 컬렉션. 여기에서 모든 태스크 할당이 시작된다.
- 노드 : 컨트롤 플레인에서 할당된 요청 태스크를 수행하는 머신
- 포드 : **리눅스 컨테이너를 하나 이상 모아놓은 컨테이너 그룹, 쿠버네티스 애플리케이션의 최소 단위
- 복제 컨트롤러 : 클러스터에서 실행되어야 하는 동일한 포드 복사본의 개수를 제어
- 서비스 : 포드에서 작업 정의를 분리. 쿠버네티스 서비스 프록시는 클러스터에서 다른 위치로 이동된 경우나 교체된 경우에 상관없이 서비스 요청을 적절한 포드로 자동 수신한다.
- Kubelet : 이 서비스는 노드에서 실행되며 컨테이너 매니페스트를 읽고, 정의된 컨테이너가 시작되어 실행 중인지 확인한다.
- kubectl : 쿠버네티스의 커맨드 라인 구성 툴
** 리눅스 (Linux) : 오픈소스 운영 체제, 여기서 운영체제(OS)는 CPU, 메모리, 스토리지처럼 시스템의 하드웨어와 리소스를 직접 관리하는 소프트웨어
쿠버네티스 작동 방식 / 사용 방법
- 쿠버네티스는 운영체제(OS)를 기반으로 실행되며, 노드에서 실행되는 컨테이너의 포드와 상호 작용한다.
- 작동중인 쿠버네티스 배포를 쿠버네이스 클러스터라고 하고, 쿠버네티스 클러스터는 두 부분인 컨트롤 플레인과 컴퓨팅 머신(또는 노드)으로 시각화할 수 있는데, 각 노드는 자체 **리눅스 환경이며, 컨테이너로 이루어진 **포드를 실행한다.
- 쿠버네티스는 컨테이너 오케스트레이션을 처리하고, 베어 메탈 서버, 가상 머신, 퍼블릭 클라우드 제공업체, 프라이빗 클라우드, 하이브리드 클라우드 환경 등 원하는 곳에서 실행할 수 있다.
- 쿠버네티스의 주요 장점 중 하나는 다양한 종류의 인프라에서 작동한다는 것이다.
- 위 사진 왼쪽의 컨트롤 플레인은 어느 애플리케이션을 실행하고 애플리케이션이 어느 컨테이너 이미지를 사용할지와 같이 클러스터를 원하는 상태로 유지 관리 한다.
- 오른쪽의 컴퓨팅 머신은 애플리케이션과 워크로드를 실제로 실행한다.
- 컨트롤 플레인은 관리자로부터 명령을 전달받고 해당 지침을 컴퓨팅 머신에 전달한다. 이 전달은 여러 서비스와 연계하여 태스크에 가장 적합한 노드를 자동으로 결정하고, 요청된 작업을 수행하기 위해 해당 노드에 리소스와 포드를 할당한다.
- 인프라 측면에서 보면 컨테이너를 관리하는 방식에는 거의 변화가 없는데, 컨테이너를 더 높은 수준에서 제어하므로 각각의 개별 컨테이너 또는 노드를 세분화하여 관리하지 않고도 더 효과적으로 제어할 수 있다.
쿠버네티스가 필요한 이유
- 쿠버네티스는 컨테이너화 된 **레거시 및 **클라우드 네이티브 애플리케이션은 물론 **마이크로 서비스로 **리팩토링 되는 애플리케이션을 제공하고 관리하는 데에 도움이 될 수 있다.
- 클라우드 네이티브 개발은 컨테이너의 마이크로 서비스에서부터 시작하는데, 이 때문에 개발 속도가 더 빨라지고 기존 애플리케이션을 더 쉽게 변환하고 최적화할 수 있다.
** 레거시 : 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등
** 클라우드 네이티브 : 컴퓨팅 환경에서 현대적 애플리케이션을 구축, 배포 및 관리할 때의 소프트웨어 접근 방식
** 마이크로 서비스 : 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의
소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식
** 리팩토링 : 결과의 변경 없이 코드의 구조를 재 조정함
'Study > Cloud' 카테고리의 다른 글
[Cloud] Cloud Infra (0) | 2023.01.18 |
---|