Docker란?
게임 2개를 실행한다고 가정하자.
게임 A는 최적화가 잘 되어있어 필요한 만큼의 리소스만 사용한다.
게임 B는 최적화가 안되어있어 컴퓨터의 리소스의 100%를 사용한다.
두 게임 동시에 실행한다면 게임 B가 컴퓨터의 모든 리소스를 사용하고 있기 때문에 게임 A는 잘 작동되지 않을거다.
- 전통적인 방법 (Traditional)
만약 전통적인 방법으로 해결하기 위해선 정말 극단적으로 컴퓨터를 한대 더 사서 게임A와 게임B를 각각 다른 컴퓨터로 실행해야 될거다
- 가상화 (Virtualized)
말 그대로 가상화 컴퓨터다.
하나의 하드웨어, OS에 가상 컴퓨터를 여러대 설치하는 방법이다.
각각의 가상 컴퓨터는 처음 만들때 리소스를 정해서 만들기 때문에 서로 독립된 공간에서 작동하게 된다.
- 컨테이너 (Container)
상단에 첨부된 사진을 보면 Hypervisor가 Container Runtime으로 대체, Virtual Macine이 Container로, OS는 없어진걸 볼 수 있다.
Container Runtime이란 컨테이너를 다루는 도구를 뜻한다. -> Docker
가상머신은 각각의 머신당 OS가 설치되어야 하기 때문에 리소스가 많이 필요하게 되는데
컨테이너방식은 하나의 OS만 사용하면 된다.
여기서 하나 짚고 넘어갈 부분은 겉으로만 보기엔 하나의 OS위에 프로그램을 여러개 구동시키는 전통적인 방법과 비슷해 보이지만 실제론 컨테이너 사이에 장벽이 쳐져있는 개념이기 때문에 각 컨테이너는 독립성을 가지고 있다.
OS는 공유하지만 각 컨테이너간에 cpu, 메모리 등 리소스는 공유하지 않는다.
자 그럼 Docker의 개념은 설명이 되었다.
그럼 도대체 Kubernetes는 무엇인가?
Kubernetes란?
컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구
자. 문장으로봤을땐 한번에 와닿지 않는다.
컨테이너 런타임은 앞서 설명했다싶이 컨테이너를 다루는 도구이다.
그럼 오케스트레이션은 뭔가?
**오케스트레이션
- 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위
쿠버네티스가 하는 일은 다음과 같다.
- 여러 서버(노드)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체, 비밀번호나 환경 설정을 관리하고 주입해주는 일 등
도커 이외에도 다양한 컨테이너 런타임 소프트웨어를 사용하여 컨테이너를 다룰 수 있다.
쿠버네티스로 할 수 있는건 다음과 같다.
- 서비스 디스커버리와 로드 밸런싱
- DNS를 사용하거나 자체 IP주소를 사용하여 컨테이너 노출 가능
- 스토리지 오케스트레이션
- 자동화된 롤아웃과 롤백
- 배포된 컨테이너의 상태 서술 가능
ex) 배포용 새 컨테이너 만들기, 제거 등을 자동화
- 배포된 컨테이너의 상태 서술 가능
- 자동화된 빈 패킹
- 각 컨테이너가 필요로 하는 CPU와 RAM을 쿠버네티스에서 노드에 맞춰 설정해줌
- 자동화된 복구
- 실패한 컨테이너 다시 시작, 교체, 삭제 등 자동화
- 시크릿과 구성 관리
- 암호, OAuth토큰/SSH 관리
'ETC' 카테고리의 다른 글
RDBMS vs NoSQL (0) | 2024.02.19 |
---|