쿠버네티스를 위해 꼭 알아야 하는 도커 지식
애플리케이션을 개발할 때는 다양한 라이브러리를 사용하게 되는데, 이를 사용하게 되면 개발자가 직접 작성해야되는 코드가 줄고 단기간에 고품질의 애플리케이션을 개발할 수 있다.
그러나 오픈 소스 프로젝트는 빈번하게 버전 업 되며, 버그 수정, 보안 패치 등이 일어난다.
그 결과 애플리케이션을 빌드할 때마다 다른 라이브러리를 사용하게 될 가능성이 있고 라이브러리의 버전이 바뀌게 되면 호환성의 문제가 발생해 새로운 버그가 잠재될 수 있다.
즉, 개발 생산성이 좋아지는 대신에 안정성을 유지하기 어려워진다.
도커는 이러한 문제를 컨테이너를 통해 해결하여, 오픈 소스를 사용한 개발 생산성 향상과 애플리케이션 안전성 두 가지를 모두 가지고있다.
컨테이너화된 애플리케이션을 운영하는 플렛폼 쿠버네티스도 일부 모듈이 컨테이너로 되어있다.
컨테이너를 사용하는 이유
- 인프라의 사용률 향상
- 하나의 물리 서버나 가상 서버 위에서 여러개의 컨테이너를 돌릴 수 있다.
- CPU와 메모리 사용률을 높여 하드웨어를 효율적으로 이용할 수 있다. - 빠른 기동 시간
- 컨터이너의 가동 시간은 가상 서버나 물리 서버의 가동 시간보다 훨씬 빠르다.
- 운영체제, 애플리케이션, 미들웨어 등 다양한 이미지를 쉽게 얻을 수 있다.
- 설치 작업이나 설정 작업이 줄어든다.
- 네트워크, 볼륭(외부 저장)을 소프트웨어 정의 오브젝트로 작성할 수 있다. - 불변 실행 환경(Immutable Infrastructure)
- 애플리케이션 실행에 필요한 소프트웨어를 모두 포함하여 컨테이너를 작성할 수 있다.
- 컨테이너를 조합하여 시스템을 구성함으로써 특정 서버 환경에 대한 종속성을 배재할 수 있다.
- 개발 환경과 운영 환경의 차이를 줄일 수 있다.
가상 서버와 컨테이너의 차이점
가상 서버는 가상화 소프트웨어를 사용하여 하드웨어를 공유하는 형태로, 마치 한 대의 전용 서버가 있는 것처럼 이용할 수 있게 해준다.
한 대의 머신에서도 여러대의 가상 서버를 가동할 수 있어 하드웨어 구입이나 설치 관리 비용을 줄일 수 있다.
이러한 가상환 스프트웨어를 하이퍼바이저(Hypervisor)라 부르며 여러 상용 제품부터 오픈소스까지 다양한 제품들이 있다.
컨테이너는 하나의 리눅스 프로세스가 마치 전용 서버를 동작하고 있는 것 같은 분리 상태를 만들어 낸다.
이는 리눅스 커널의 네임스페이스와 컨트롤 그룹(cgroup)이라는 기술을 기반으로 한다.
개발자들이 주로 사용하는 Window나 Mac에서 컨테이너를 돌리려면 리눅스 커널을 위해 가상 서버가 필요하다.
Docker CE(Community Edition 18.06 이후)를 Mac이나 Window에 설치하면 각각의 하이퍼바이저 위에서 LinuxKit이 기동하며, 그 위에서 컨테이너의 런타임인 containerd가 가동한다.
컨테이너는 하이퍼바이저상의 가상 서버에도 사용할 수 있어 퍼블릭 클라우드의 가성 서버나 온프레미스의 OpenStack 위에서 많이 활용된다. 가까운 미래에는 LinuxKit으로 표준화 된 리눅스 커널을 통해 애플리케이션이 컨테이너 위에서 실행되는 것이 당연해지는 시대가 될 가능성이 높다.
'Docker & Kubernetes' 카테고리의 다른 글
쿠버네티스 API 오브젝트 (0) | 2021.11.23 |
---|---|
쿠버네티스의 아키텍처 및 계층 구조 (0) | 2021.11.23 |
컨테이너의 이해(3/3) - 도커와 쿠버네티스의 관계 (0) | 2021.11.21 |
컨테이너의 이해(2/3) - 도커의 아키텍처 (1) | 2021.11.21 |
쿠버네티스란? (0) | 2021.11.21 |