[kubernetes] 쿠버네티스란?
회사 프로젝트 중 쿠버네티스를 이용하여 서비스를 구축 할 기회가 생겨 구축을 위한 준비를 하는 겸, 공부하는 것들을 적어보려 한다.
화자는 물리 서버에서 서비스를 구축하는 방법과 AWS 내에서 서비스를 구축하는 방법을 학문적으로
이론적으로 많은 것을 알고 있진 않으나 업무적으로 경험 해보았다.
업무적으로 둘 다 장단점이 있으며 무엇이 좋다 보다 해당 프로젝트에 큰 이점을 가지고 갈 수 있는 구축 법으로 구축하는게 제일 좋다고
생각 된다.
AWS 의 경우 serverless 프레임 워크를 사용하여 진행했으며 사용하는 lambda, elastic beanstalk, ec2, ecs 등의 서비스를 이용하여
서비스를 구축하였다. 그러던 중 이번에 쿠버네티스로 서비스를 구축할 기회가 생긴 것이다.
서론이 길었다. 쿠버네티스가 무엇인지, 또 쿠버네티스로 무엇을 할 수 있는지 알아보자.
| 쿠버네티스란?
대규모 배포를 위해 설계된 소프트웨어 아키텍처로서 초기 google 엔지니어들이 개발하고 설계한 플랫폼이며
리눅스 컨테이너 작업을 자동화 하는 오픈소스 플랫폼이며 컨테이너화 된 애플리케이션을 배포하고 확장하는 작업을
자동으로 수행할 수 있다.
| 쿠버네티스는 무엇을 할 수 있을가?
컨테이너는 애플리케이션을 포장하고 서비스하는 좋은 방법으로 알려져있다. 이를 관리하기 위한 오케스트레이션 툴들이 존재한다.
그 중 쿠버네티스, Docker Swarm, Apache Mesos가 널리 사용된다. 그럼 오케스트레이션 툴인 쿠버네티스는
무엇을 할 수 있을가?
- 서비스 디스커버리와 로드 밸런싱
DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출 가능
네트워크 트래픽 로드밸런싱 가능
- 스토리지 오케스트레이션
로컬 저장소, 공용 클라우드 공급자 등 원하는 저장소 시스템을 자동으로 결합 가능
- 자동화된 롤아웃과 롤백
자동화를 통하여 배포용 새 컨테이너를 생성하고 기존 컨테이너를 제거, 모든 리소스를 새 컨테이너에 적용 가능(롤 아웃, 롤백 가능)
- 자동화된 빈 패킹(bin packing)
쿠버네티스는 클러스터 노드를 제공하여 각 컨테이너가 필요로 하는 cpu와 메모리를 가장 효율적으로 사용 가능하게 도와줌
- 자동화된 복구(self-healing)
쿠버네티스는 실패한 컨테이너를 재시작 하고, 컨테이너를 교체하며, 응답하지 않는 컨테이너를 종료 시키는 작업을 자동으로 진행 할 수 있으며 서비스 준비가 끝날때까지 해당 과정을 클라이언트에 미 노출 가능함
- 시크릿과 구성 관리
쿠버네티스를 사용하여 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 가능
컨테이너 이미지를 재구성하지 않고 시크릿 및 애플리케이션 구성을 배포, 업데이트 가능