컨테이너(Container)
컨테이너는 어떤 환경에서나 실행하기 위해 필요한 모든 요소를 포함하는 소프트웨어 패키지이다. 이러한 방식으로 운영체제를 가상화여 프라이빗 퍼블릭 클라우드 또는 개발자의 개인 노트북에 이르기까지 어디서나 실행가능하다.
이를 수행하기 위해 컨테이너는 운영체제(OS)의 기능을 활용하여 프로세스를 격리하고 해당 프로세스가 접근 할 수 있는 cpu, 메모리 및 디스크 양을 제어는 OS 가상화 형식을 활용한다. OS의 리소스를 논리적으로 분리하여 여러 개의 컨테이너가 공유하여 사용한다.
우리가 흔히 들어본 도커(docker)는 이러한 컨테이너를 다루는 유명한 도구 중 하나이다.
과거 배포 관리 변천사
1) 전통적인 배포 시대
초기에는 애플리케이션을 물리 서버에서 실행했다. 물리 서버 하나에서 여러 애플리케이션을 실행하면 다른 애플리케이션 실행에 영향을 주어 성능 저하될 수 있었다. 이 문제의 해결책은 서로 다른 물리 서버에서 각 애플리케이션을 실행하는 것인데 가상 시스템(VM)을 도입하여 문제를 해결한다.
2) 가상 서버를 이용한 배포
단일 물리 서버의 CPU에 여러 가상 시스템 (VM) 을 실행한다. 가상화를 이용하면 VM간 애플리케이션을 격리하고 다른 애플리케이션에서 자유롭게 접근 할 수 없으므로 보안성도 제공할 수 있었다. 서버에서 리소스를 보다 효율적으로 활용가능하고 하드웨어 비용 절감을 하여 더 나은 확장성을 제공할 수 있다.
3) 컨테이너를 이용한 배포
컨테이너는 VM과 유사하지만 격리 속성을 달리하여 애플리 케이션 간에 운영체제(OS)를 공유한다. 따라서 컨테이너는 가볍다고 여겨지는데 VM과 마찬가지로 컨테이너에는 자체 파일 시스템, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊어서 여러 환경에 배포가 용이하다. (프로그램 실행을 위해 매번 os 설치를 안해도 된다!!)
Container Runtime은 컨테이너를 다루는 도구로, 가장 유명한 것으로 도커(docker)가 있다.
컨테이너 이미지
컨테이너 이미지는 애플리케이션을 실행하는데 필요한 모든 것이 포함된 실행준비된 (ready to run) 소프트웨어 패키지이다.
실행하는데 필요한 코드, 애플리케이션 및 시스템 라이브러리, 필수 설정값이 포함되어 있으며 이미 실행중인 컨테이너의 코드는 변경할 수 없다.
변경하려는 경우 변경 사항이 포함된 새 이미지를 빌드하고, 새로운 이미지에서 시작하도록 컨테이너를 재생성해야된다.
컨테이너 런타임
컨테이너 실행을 담당하는 소프트웨어이다. 가장 유명한 것으로 도커(docker)가 있다. 도커는 이미지 기반으로 컨테이너를 실행시켜 독립적인 환경을 구성한다.
컨테이너 오케스트레이션 (Container Orchestration)
컨테이너 오케스트레이션 시스템은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 역할을한다. 즉 한 마디로 컨테이너 배포 관리 역할을 수행한다. 컨테이너 오케스트레이션의 목적은 여러 컨테이너의 배포 프로세스를 최적화 하고, 이 외에도 다양한 기능을 수행한다.
- 컨테이너 자동 배치 및 복제
- 컨테이너 그룹에 대한 로드밸런싱
- 컨테이너 장애 복구
- 클러스터 외부에 서비스 노출
- 컨테이너 확장(추가) 및 축소(삭제)
컨테이너 오케스트레이션 도구 중 가장 많이 알려진 도구는 아래와 같다.
Kubernetes | Docker Swarm | Apache Mesos |
- 구글에서 개발하였고 가장 널리 사용되는 오케스트레이션 프레임워크 - 다양한 환경에서 작동하도록 설계 - 컨테이너의 롤링 업그레이드 지원 |
- 여러 개의 docker 호스트를 함께 클러스터링하여 단일 가상 도커 호스트를 생성 - docker 명령어와 compose를 그대로 사용가능 |
- 수만 대의 물리적 시스템으로 확장 가능하도록 설계 - 하둡, 스파크 등 응용프로그램을 동적 클러스터 환경에서 리소스 공유와 분리를 통해 자원 최적화 가능 - docker 컨테이너 적극 지원 |
쿠버네티스(Kubernetes)
컨테이너는 애플리케이션을 패킹하고 실행하는 좋은 방법이다. 그런데 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야한다. 이 과정을 시스템으로 처리하면 더 쉬울텐데..하고 나타난 것인 쿠버네티스이다.
Kubernetes 또는 k8s라고 불리는 쿠버네티스 컨테이너 작업을 자동화하는 오픈소스 플랫폼을 의미한다. 한 마디로 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구라고 할 수 있다. 쿠버네티스는 다음과 같은 기능을 제공한다.
- 서비스 디스커버리와 로드 밸런싱
컨테이너에 대한 트래픽이 많으면 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 안정적으로 이루어지도록한다. - 스토리지 오케스트레이션
로컬 저장소, 공용 클라우드 등 원하는 저장소 시스템을 자동으로 탑재 가능하다. - 자동화된 롤백
컨테이너의 현재 상태를 원하는 상태로 설정할 수 있다. 예를 들어 배포용 새 컨테이너를 만들고 기존 컨테이너 제고 후 모든 리소스를 새 컨테이너에 적용 가능하다. - 자동화된 빈 패킹(bin packing)
쿠버네티스는 컨테이너를 노드에 맞추어 cpu와 메모리를 적절하게 사용할 수 있도록 해준다. - 자동화된 복구
실패한 컨테이너를 다시 시작한다.
컨테이너 동작 원리
컨테이너 동작원리는 아래 그림과 같다.
컨테이너를 사용할 수 있는 도커와 쿠버네티스 위에 하나의 컨테이너 공간을 만든다. 그리고 컨테이너 안에는 서비스를 구동한다.
여러 컨테이너를 묶어서 pod이라고한다.
컨테이너를 왜 쓸까?
그렇다면 이러한 컨테이너를 왜 사용할까? 소개 단계에서 말했듯이 애플리케이션 구동을 위한 환경 세팅을 하는 것은 매우 복잡하다.
컨테이러를 사용하여 배포한다면 이러한 과정을 최소화하고 os가 달라도 어디든 구동할 수 있다는 장점이 있다.
- OS가 달라도 애플리케이션 실행 가능
- 자원을 효율적으로 사용
- 실행 속도가 빠름
- 배포 및 관리 단순화
- 컨테이너 이미지를 쉽게 공유 및 사용 가능
💡요약
컨테이너: 애플리케이션 구동 환경까지 감싸서 실행할 수 있도록하는 격리 기술
오케스트레이션: 여러 서버에 걸친 컨테이너 및 사용환경 설정을 관리
쿠버네티스: 컨테이너를 오케스트레이션 하는 도구
도커: 컨테이너를 다루는 도구
👉함께보면 좋은 게시글
📚출처
컨테이너:
https://www.redhat.com/ko/topics/containers/what-is-container-orchestration
https://www.mantech.co.kr/container_orchestration/
쿠버네티스:
https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/
'스터디 > Cloud & k8s' 카테고리의 다른 글
[k8s] 컨테이너 오케스트레이션 (Container orchestration) (0) | 2022.10.10 |
---|---|
[k8s] 워크로드(workload)와 파드(pod), 도커(docker) (0) | 2022.10.02 |
[GCP] Spanner (0) | 2021.03.30 |
[GCP] Composer (0) | 2021.03.30 |
[GCP] GCS (Google Cloud Storage) (0) | 2021.03.30 |
댓글