컨테이너, 도커, 쿠버네티스
컨테이너
- 컨테이너는 가상머신을 사용해 각 마이크로 서비스를 격리(islate)하는 기술
- 컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 빠른 실행 가능
- 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서(이미지), 어디서든 쉽게 실행할 수 있도록 해주는 기술
- 컨테이너 격리 기술에는 리눅스 네임 스페이스(namespace), 리눅스 컨트롤 그룹(cgroups) 와 유니온 파일 시스템(Union mount file system)이 있다.
- Traditional Deployment : 클라우드 컴퓨팅 기술이 나오기 전까지 인프라 구축의 일반적인 방식
- Virtualized Deployment : 가상환경을 사용하는 방식(VM에 운영체제가 있고 하드웨어를 가상화로 구현하는 특징을 갖고 있기 때문에 무겁다)
- Container Deployment : Hyperviser를 통해 가상환경을 구축할 필요 없으며, 운영체제 또한 구축할 필요가 없어 리소스가 적다.
리눅스 네임 스페이스
- 각 프로세스별로 별도의 커널 자원(네트워크, 유저, 호스트 네임 등)을 분할하는 리눅스 커널의 기능
- 커널 자원을 분할 지원하는 기능
리눅스 컨트롤 그룹
- 각 프로세스별 소비할 수 있는 리소스 양(CPU, 메모리, I/O, 네트워크 대역대,device 노드 등)을 수집, 제한, 격리시키는 기능
도커
- 컨테이너 : 이미지를 격리하여 독립된 공간에서 실행한 가상 환경
- 이미지 : 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
- 새로운 도커 컨테이너를 설치하기 위한 것 (사용자 입맛대로 설정)
- 운영체제가 필요한 경우 (우분투, 센토스 등)
- 어플리케이션이 필요한 경우 (톰캣, MySQL 등)
- 이미지 다운로드 및 설치 -> 컨테이너 생성
- 이러한 컨테이너 기술을 지원해주는 도커
Docker engine: 이미지, 네트워크, 디스크 등의 관리 역할
Containerd : runC를 이용한 container를 관리해주는 daemon
runC : 필요한 구성요소를 할당하고 container를 격리, 생성 시켜주는 역할
shim : container의 생명주기 관리를 해주는 역할
💡 각각 돌아가기 때문에 Docker Engine을 재실행 해도 각 이미지에 영향이 없다.
도커의 한계
- 서비스가 커지면 커질 수록 관리해야 하는 컨테이너의 양이 급격히 증가
- 때문에 도커를 관리할 수 있는 쿠버네티스가 탄생
쿠버네티스
- 다수의 컨테이너를 자동으로 운영하기 위한 오케스트레이션 도구
- 컨테이너 분산 배치, 컨테이너 교체, 컨테이너 환경 설정을 관리
- 클라우드 네이티브를 가장 효과적으로 구현하기 위한 도구로 DevOps, MSA와 관련이 있다.
쿠버네티스의 장점
- 컨테이너 오케스트레이션 비용 절감
- MSA를 위한 데브옵스 효율성 향상
- 멀티 클라우드 환경에서 워크로드 배포 용이
- 종속 가능성 없는 이식성 제고
- 배포 자동화 및 확장성 강화
- 클라우드 환경에서의 앱 안정성 및 가용성 강화
- 오픈소스 생태계의 일부로서 이용하기 편리