쿠버네티스
쿠버네티스는 대규모 분산 시스템에서 컨테이너를 효율적, 자동화적 가동시키기 위한 오케스트레이션 도구 이다.
쿠버네티스는 애플리케이션이나 서비스의 관리 체계 및 요청 처리할 수 있는 요소를 제공하며, 고가용성, 애플리케이션 스택, 서비스의 이식성을 보장하는 자동화 도구이다.
또한 애플리케이션 컨테이너 배포, 오토 스케일링, 오퍼레이팅등의 시스템 오케스트레이션 시스템 환경이라 말할수 있다.
쿠버네티스는 컨테이너의 배포, 확장, 운영을 위해 고안된 오픈소스 이다.
여기서 컨테이너를 가동시킬때에는 시스템 트래픽이나 가용성 환경을 고려한 후 여러 호스트머신에서 구성되는 분산 환경을 구축하게 된다.
이런 기능을 제공 및 설정이 가능하면서 컨테이너를 통합 관리할 수 있는 오케스트레이션 도구 라고 한다.
쿠버네티스의 주요기능
1. 멀티서버(물리) 컨테이너관리
2. 컨테이너 부하분산관리 및 모니터링 관리
3. 컨테이너간 네트워크관리
4. 컨테이너 배포관리
5. 컨테이너 자동복구 및 자동업데이트
쿠버네티스의 장점
1. 무중단 서비스 제공
쿠버네티스는 서비스가 고장 없이 오랫동안 지속되게 하기 위해서 파드를 복제하고 그 개수를 유지한다.
서비스를 여러개 복제해 놓으면, 하나의 서비스에 장애가 발생하더라도 쿠버네티스는 다른 서비스를 통해 무중단 지속할 수 있다.
쿠버네티스는 자가회복 기능(auto-placement, auto-restart, auto-replication, auto-scaling)으로 장애가 발생한 서비스를 회복시킨다.
2. 뛰어난 이식성
쿠버네티스가 운영하는 컨테이너들은 독립적인 구조를 가지고 있기 때문에, 특정한 클라우드 환경에 구애받지 않는다.
예를들어 하나의 클라우드 환경(Public, Private, Hybrid)에서 다른 클라우드 환경으로 서비스를 이전할 때,
사용자는 별도의 복잡한 이전 과정을 거칠 필요 없이 컨테이너들만 이전시키면 된다.
또한, 쿠버네티스 패키지 매니저인 Helm을 사용하면 쿠버네티스의 애플리케이션들을 쉽고 빠르게 다른 클라우드 환경으로 이식할 수 있다.
3. 효율적인 자원 사용
쿠버네티스는 서비스가 사용할 자원들(CPU, Memory 등)의 사용량을 사전에 지정함으로써,
필요한 만큼의 자원만 서비스에 할당되기 때문에 자원 사용의 효율성이 증가한다.
추가로, 가상머신은 게스트 OS의 일부 자원만을 사용하기 때문에 메모리 오버헤드가 발생하지만,
쿠버네티스의 컨테이너는 호스트 운영체제를 공유하면서 각 컨테이너가 필요한 만큼의 자원들을 사용하기 때문에 자원을 더 효율적으로 사용할 수 있다.
4. 유연한 확장성
자원 사용률에 따라 쿠버네티스는 자동으로 서비스의를 관리한다.
예를들어, CPU 사용률이 300%로 증가하게 되면 쿠버네티스의 Horizontal Pod Autoscaler가 서비스를 1개에서 7개까지 증가시킨다.
CPU 사용률이 다시 감소하게 되면 서비스의 개수도 점차 줄어들게 된다.
쿠버네티스의 운용
1. 개발환경
개발자는 에디터 및 IDE 를 이용하여 언어별 개발 소스를 빌드 또는 런타임 하거나 그 외 라이브러리를 도입설정 한다.
2. 컨테이너 생성
개발된 바이너리, OS, 네트워크, 인프라설정이 모두 포함된 컨테이너 이미지를 빌드 한다.
이때 도커의 경우 Dockerfile 에 구성을 하고 Dockerfile 통해 실행환경에서 빌드한다.
3. 클러스터작성
테스트/스테이징 및 실제환경 에서 애플리케이션을 작성시키는 셋업이 필요하다.
쿠버네티스는 분산 환경에서 여러대의 서버나 스토리지등 리로스가 연결된 환경에서 애플리케이션을 실행 한다.
선언적설정
Kubernetes 는 시스템 변경이력에 대해서 관리하는 개념이 아닌 시스템의 상태를 관리하는 방식으로 운영된다.
선언적 설정은 시스템이 본래 되어 있어야 하는 구조를 정의하며,
애플리케이션은 클러스터 에서 몇개를 가동시킬지,
애클리케이션이 최소한으로 구성되어야 하는 spec 이 얼마인지, 즉 CPU / MEM 등의 리소스를 작성하여 운용한다.
따라서 Kubernetes 는 선언적으로 작성된 파일을 기준으로 자율적 오케스트레이션이 작동된다.
스케줄링
Kubernetes 에서는 디플로이 하는 장치를 스케줄링 이라 한다. (Scheduling)
여러개의 인스턴스로 구성되는 클러스터에서는 가능한 한 컴퓨팅 리소스를 낭비하지 않고 효율적으로 사용가능하도록 한다.
리소스에 대한 분배조건 및 정책등 요구사항을 매니페스트로 정의하고 선언적설정을 통하여
클러스터 안에서 적절한 위치에 애플리케이션을 자동으로 배치한다.
서비스 디스커버리
애플이케이션의 경우 호출을 받은 프론트 에서 사용자의 트랜젝션을 처리하기 위해 백엔드 서비스를 호출하고 처리한다.
이때 애플리케이션이 어디에 위치해 있는지를 찾아내는 장치를 서비스 디스커버리라 한다.
클러스터 안에는 레지스트리를 갖추고 있어 서비스 디스커버리를 동적으로 수행하게 된다.