쿠버네티스는 컨테이너화된 애플리케이션을 효율적으로 배포하고 운영하기 위해 설계된 오픈소스 플랫폼이다.
개요
크게 다음과 같은 기능을 제공한다.
- 배포 계획에 맞춰 애플리케이션을 신속하게 배포할 수 있다.
- 컨테이너 개수, CPU 사용률, 메모리 사용량을 설정 가능
- 저장 공간, 네트워크 접근 제어, 로드밸런싱 기능 설정 가능
- 가동 중인 애플리케이션을 스케일 업/다운 할 수 있다.
- 새로운 버전의 애플리케이션을 무정지로 업그레이드 할 수 있다.
- 하드웨어 가동률을 높여 자원 낭비를 줄인다.
쿠버네티스는 서비스 운영에서 발생하는 다양한 부담을 줄이는 것을 목표로 하여 다음과 같은 특징을 가진다.
- 다양한 환경에서 쿠버네티스 사용 가능
- 계속되는 변화를 전제로 설계된 높은 유연성과 확장성
- 마이크로 서비스화된 애플리케이션에 최적화된 실행 환경
- 느슨한 결합에 의한 유연성, 교체 용이성
- 다양한 스펙의 서버가 혼재하는 클러스터 구성에 사용 가능
- 서버의 정지, 추가, 제거가 용이
- 저장소나 로드밸런서의 동적 프로비저닝
- 퍼블릭 클라우드 api와 연동한 쿠버네티스 조작
- 고가용성과 성능 관리
- 서버 정지 시 애플리케이션 재배포 자동화
- 애플리케이션의 이상 종료 시 자동 재기동
- 필요한 인스턴스의 개수를 유지
- 높은 부하에서 자동 스케일
쿠버네티스가 해결하는 과제
1. 애플리케이션의 빈번한 출시
경쟁사보다 뛰어난 앱을 제공하기 위해서는 되도록 많은 아이디어를 시험해 보고, 실패를 경험하고, 성공에 도달하는 것이 중요하다. 쿠버네티스의 롤아웃과 롤백 기능은 새로운 기능을 빈번하게 출시하고 버그 수정을 긴급 투입하는 것과 같은 민감한 작업을 안전하게 자동화해 준다.
이를 사용해 정식 서비스의 앱 컨테이너를 무정지로 교체할 수 있고, 교체 중에 발생하는 성능 저하와 프로그램 충돌로 인한 서비스 정지를 막기 위한 교체 정책도 설정할 수 있다.
2. 무정지 서비스
쿠버네티스의 자기 회복 기능은 무정지 서비스 운영을 도와준다. 응답이 없어진 컨테이너를 재기동하며, 쿠버네티스 클러스터 내에 지정한 수만큼 컨테이너가 돌도록 관리해준다.
3. 초기 비용을 낮추고 비즈니스 상황에 맞게 규모를 조정
비즈니스 초기 단계에서는 스펙이 낮고 저렴한 가상 서버를 사용하다가, 비즈니스가 확대되면 고성능의 가상 서버나 물리서버를 투입시키는 전략을 취해 초기 비용을 낮출 수 있다.
k8s 클러스터 내에서 컨테이너를 다른 노드로 옮기기 위해서는 먼저 해당 노드에 스케줄이 되지 않도록 설정하고, 해당 노드의 모든 컨테이너를 추방시키면 된다.
4. 쿠버네티스와 외부 서비스 연동
앱 서버와 달리 데이터베이스에 대한 컨테이너화는 신중하게 접근할 필요가 있다. 컨테이너는 태생적으로 언제든지 재시작될 수 있는 일시적인 존재로 상태를 포함하지 않는 것을 전제로 하기 때문이다. 디비는 클라우드의 DBaas나 온프레미스 관리형 데이터베이스를 쓰자.
5. 개발 환경과 운영 환경의 분리
쿠버네티스에서는 클러스터를 여러 개의 가상 환경으로 분할하는 것이 가능하다. 그리고 각각의 가상 환경에 설정 파일, 보안이 필요한 인증서나 비밀번호를 저장할 수 있다. 이를 활용하면 테스트 환경에서 운영환경으로 옮길 때, 이미지를 다시 만들 필요가 없다. 즉, 테스트가 완료된 컨테이너의 이미지를 그대로 정식 운영 환경에 배포할 수 있는 것이다.
6. 온프레미스와 클라우드 위에 구축
7. 애플리케이션 중심의 오케스트레이션
쿠버네티스는 애플리케이션 중심의 운영이라는 흐름을 더욱 가속화하고 있다. 애플리케이션 개발자가 YAML 파일을 기술하여 쿠버네티스에 제출하면 로드밸런서, 저장소, 네트워크, 런타임 등의 환경이 구성된다.
8. 특정 기업에 종속되지 않는 표준 기술
특정 it기업이 독점하는 기술에 의지하는 건 리스크 관리 측면에서 피해야 할 일이다. 쿠버네티스는 현재 특정 회사에 종속되지 않은 표준 기술로 자리잡았다.
9. 서버들의 가동률 높이기
쿠버네티스에서 사용되는 컨테이너 기술은 애플리케이션이 정해진 서버에서 돌지 않아도 된다는 자유를 제공한다. 또한, CPU 사용시간이나 메모리 요구량도 간단히 제어할 수 있다.
이 기술 덕분에 가동률이 적은 서버의 애플리케이션을 한곳에 모을 수 있다. 그래서 서버의 CPU 가동률을 높게 유지하면서도 안정적으로 서비스를 제공한다는 상반되는 요구사항을 충족시킬 수 있는 것이다.
쿠버네티스의 아키텍처
클러스터 관리를 담당하는 마스터와 컨테이너화된 애플리케이션을 실제로 실행하는 노드라는 단 두종류의 서버로 구성된다.
마스터는 kubectl과 같은 api 클라이언트로부터 요청을 받아서 애플리케이션의 배포, 스케일 업/다운, 컨테이너의 버전 업 등의 요구를 처리한다.
유저의 요청이 늘어나 처리 능력을 늘려야 할 때는 기본적으로 컨테이너의 수를 늘리면 되는데 이때 노드 수를 늘려야 할 때도 있다. 노드를 추가하고 제거하는 작업은 앱이 돌아가는 중에도 실시할 수 있다.
Loading Comments...