1. 쿠버네티스란?
Kubernetes, 쿠버네티스, 또는 간단히 "큐브(kube)"는 Linux 컨테이너 작업을 자동화하는 오픈소스 플랫폼이다.
쿠버네티스는 컨테이너화 된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 즉, Linux 컨테이너를 실행하는 호스트 그룹을 함께 클러스터링 할 수 있으며 쿠버네티스를 통해 이러한 클러스터를 쉽고 효율적으로 관리할 수 있습니다. 이 클러스터는 퍼블릭 클라우드, 프라이빗 클라우드 또는 하이브리드 클라우드 전체로 호스트를 확장할 수 있습니다.
일반적으로 컨테이너 방식의 배포는 다음과 같은 추가적인 장점을 제공해 인기가 있다고 알려져 있다.
- 빠른 생성과 배포: VM 이미지를 사용하는 것에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적이다.
- CI&CD: 안정적이고 주기적으로 컨테이너 이미지를 빌드해서 배포할 수 있고 빠르고 쉽게 롤백할 수 있다.
- 개발과 운영의 관심사 분리: 배포 시점이 아닌 빌드/릴리스 시점에 애플리케이션 컨테이너 이미지를 만들기 때문에, 애플리케이션이 인프라에서 분리된다.
- 가시성은 OS 수준의 정보와 메트릭에 머무르지 않고, 애플리케이션의 헬스체크 및 그 밖의 시그널을 볼 수 있다.
- 개발, 테스팅 및 운영 환경에 걸친 일관성: 랩탑에서도 클라우드에서와 동일하게 구동된다.
- 클라우드 및 OS 배포판 간 이식성: Ubuntu, RHEL, CoreOS, 온-프레미스, 주요 퍼블릭 클라우드와 어디에서든 구동 가능하다.
- 애플리케이션 중심 관리: 추상화 수준이 가상 하드웨어 상에서 OS를 실행하는 수준에서 논리적인 리소스를 사용하는 OS 상에서 애플리케이션을 실행하는 수준으로 높아진다.
- 느슨하게 결합, 분산, 유연하고 자유로운 마이크로 서비스: 애플리케이션은 단일 목적의 머신에서 모놀리식 스택으로 구동되지 않고 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고 관리된다.
- 리소스 격리: 애플리케이션 성능을 예측할 수 있다.
- 자원 사용량: 리소스 사용의 효율이 높다.
쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공합니다. 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공해줍니다.
실제 프로덕션 애플리케이션은 여러 컨테이너에 걸쳐 있으며 이러한 컨테이너는 여러 서버 호스트에 배포되어야 한다. 컨테이너를 위한 보안은 멀티레이어 구조이며 복잡할 수 있다.
쿠버네티스는 이러한 워크로드를 위해 규모에 맞는 컨테이너를 배포하는 데 필요한 오케스트레이션 및 관리 기능을 제공한다. 쿠버네티스 오케스트레이션을 사용하면 여러 컨테이너에 걸쳐 애플리케이션 서비스를 구축하고 클러스터 전체에서 컨테이너의 일정을 계획하고 이러한 컨테이너를 확장하여 컨테이너의 상태를 지속적으로 관리할 수 있다. 쿠버네티스를 활용하면 IT 보안을 한층 강화할 수 있다.
쿠버네티스는 컨테이너를 "포드(pod)"로 분류하여 컨테이너 급증과 관련된 여러 가지 문제를 해결한다. 포드는 그룹화된 컨테이너에 추상화 계층을 추가하므로 사용자가 워크로드를 예약하고 네트워킹 및 저장소와 같은 필수 서비스를 컨테이너에 제공할 수 있다. 쿠버네티스의 또 다른 부분을 사용해 이러한 포드 전체에서 부하를 분산하고 적합한 수의 컨테이너를 실행하여 워크로드를 지원할 수 있다.
2. 쿠버네티스로 할 수 있는 것
사용자의 환경에서 쿠버네티스를 사용할 경우 얻을 수 있는 주요 이점은 쿠버네티스를 통해 물리 또는 가상 머신의 클러스트에서 컨테이너를 예약하고 실행할 수 있는 플랫폼이 확보된다는 것이다. 더 넓게 보면, 프로덕션 환경에 컨테이너 기반 인프라를 완전히 구현해서 사용할 수 있다. 또한 쿠버네티스는 운영 작업 자동화와 관련이 있으므로 다른 애플리케이션 플랫폼 또는 관리 시스템에서 가능한 작업의 상당수를 컨테이너를 사용해 수행할 수 있다.
쿠버네티스를 사용하여 수행할 수 있는 작업은 다음과 같다.
- 여러 호스트에 걸쳐 컨테이너를 오케스트레이션 한다.
- 하드웨어를 최대한 활용하여 엔터프라이즈 애플리케이션을 실행하는 데 필요한 리소스를 극대화한다.
- 애플리케이션 배포 및 업데이트를 제어하고 자동화한다.
- 스토리지를 장착 및 추가해 스테이트풀(stateful) 애플리케이션을 실행한다.
- 컨테이너화 된 애플리케이션과 해당 리소스를 즉시 확장한다.
- 선언적으로(Declaratively) 서비스를 관리함으로써, 배포한 애플리케이션이 항상 배포 목적대로 실행되도록 한다.
- 자동 배치, 자동 재시작, 자동 복제, 자동 확장을 사용해 애플리케이션 상태 확인과 셀프 복구를 수행한다.
- DNS 이름을 사용하거나 자체 IP주소를 사용해 컨테이너를 노출시킬 수 있다.
- 컨테이너에 대한 트래픽이 많으면 네트워크 트래픽을 로드밸런싱 해 안정적인 배포가 이루어지게 한다.
- 자동화된 롤아웃과 롤백을 지원한다.
- 실패한 컨테이너를 다시 시작하고 교체하며 응답하지 않는 컨테이너를 죽이고 서비스를 새로 준비한다.
3. 쿠버네티스를 사용하는 이유
Kubernetes는 조타기라는 의미로 컨테이너를 다룬다는 의미인 듯 하다. 쿠버네티스가 할 수 있는 것, 사용하는 이유 몇가지를 나열해본다.
- 하나의 서버(마스터 노드)에서 어떻게 여러개의 다른 서버들(워커 노드)에 컨테이너를 만들고 실행시키고 또 다른 동작을 시킬 것인가?
- 컨테이너를 몇개의 노드(서버)에 배포하여 실행시킬 것인가?
- 다른 서버에 있는 컨테이너가 실행중 에러로 실패하면 어떻게 처리할 것이가?
- 컨테이너끼리의 연결, 스토리지 연결은 어떻게 할 것인가?
한대나 두대의 컴퓨터에서 위의 문제를 처리하려면 사실 도커의 기능들과 간단한 서버를 만들면 해결할 수 있다고 생각되기도 한다. 그런데 실제로 훨씬 더 많은 요구사항들이 있고 훨씬 더 많은 서버들이 있다고 생각하면 복잡해지는데 쿠버네티스가 이런 머리 아픈 상황을 위해 만들어진 것이다. 쿠버네티스는 간단하게 내 명령을 수행해주는 프로그램이다. 내 노트북에서 kubectl 명령어를 치면 마스터 서버의 API 서버를 통해 다른 서버들로 요청이 가는데 이 때 어떤 서버로, 어떻게 배치할지는 쿠버네티스가 알아서 한다. 명령을 받은 서버는 받은 명령을 수행하게 되는데 kubelet이라는 프로그램이 각 서버에서 명령이 잘 이행되고 있는지 감시하게 된다. 이 상황에서 내 컴퓨터를 유저, 유저의 명령을 실제 명령이 수행될 서버로 전달하는 서버를 마스터 노드라고 하고 명령을 받는 서버들을 워커 노드라 부르며, 마스터와 워커 노드를 합쳐 하나의 클러스터라고 부른다. 일반적으로는 안전을 위해 한 클러스터를 여러개의 마스터 노드와 수많은 워커 노드로 구성한다.
#Refences
https://www.sallys.space/blog/2019/08/15/k8s/
'Server > Kubernetes' 카테고리의 다른 글
kubeconfig파일을 사용하여 클러스터 접근 구성 (0) | 2022.12.17 |
---|---|
쿠버네티스(Kubernetes) Service란? (0) | 2022.12.17 |
쿠버네티스(Kubernetes) Deployment란? (0) | 2022.12.15 |
쿠버네티스(Kubernetes) ReplicaSet이란? (0) | 2022.12.13 |
쿠버네티스(Kubernetes) Pod란? (0) | 2022.12.11 |