공대생 정리노트

컨테이너 본문

로드맵/클라우드

컨테이너

woojinger 2020. 8. 24. 11:00

참고 자료

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/

https://www.redhat.com/ko/topics/containers/what-is-kubernetes

 

What is Kubernetes?

Kubernetes is a portable, extensible, open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools

kubernetes.io

https://www.44bits.io/ko/post/why-should-i-use-docker-container

https://www.docker.com/resources/what-container

 

What is a Container? | Docker

A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. Learn more.

www.docker.com

 

왜 굳이 도커(컨테이너)를 써야 하나요? - 컨테이너를 사용해야 하는 이유

컨테이너는 서버 애플리케이션을 배포하고 서버를 운영하는 표준적인 기술이 되어가고 있습니다. 하지만 처음 사용해본다면 그 장점이 잘 와닿지 않을 수도 있습니다. 왜 굳이 도커 컨테이너를

www.44bits.io

 


배포의 변화

출처 : kubernetes.io

초기

애플리케이션을 물리 서버에서 실행했다. 이때 한 물리 서버에서 여러 애플리케이션에 대해 resource boundary를 만들 수 없었고 이로 인해서 resource allocation issue가 발생했다.

Ex) 물리 서버 하나에서 여러 애플리케이션을 실행하면 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고 이 경우 다른 애플리케이션 성능이 저하가 된다.

해결책은 서로 다른 물리 서버에서 각 애플리케이션을 실행하는 것이다.

그러나 이 해결책은 리소스가 충분히 활용되지 않고, 확장도 불가하다.

 

가상화 배포 시대

resource allocation issue를 해결하기 위한 방법으로 가상화를 도입하게 되었다.

단일 물리 서버의 CPU에서 여러 VM을 실행시켜 VM간에 애플리케이션을 격리 시킨다.

VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신이다.

 

컨테이너 개발 시대

VM과 유사하지만 격리 속성을 완화하여 애플리케이션간 OS를 공유한다.

VM 보다 가볍다.

VM과 마찬가지로 자체 파일 시스템, CPU, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊어, 클라우드나 OS 배포본에 모두 이식할 수 있다.

 


Docker

Docker Contaner image : 애플리케이션을 실행할 때 필요한 모든 것을 담고 있는 

 

Container image는 runtime 때 container가 된다.

Docker container의 경우 image가 Docker Engine 위에서 돌아갈 때 만들어진 Container다.

 

Docker containers

  • Standard : Docker가 container의 industry standard를 정립하였다.
  • Lightweight : Container는 OS system kernel을 공유하므로 비용을 줄이고 효율성을 높일 수 있다.
  • Secure : isolation 제공

 


Why should we use container

여러 대의 서버 배포시 운영체제부터 설치된 패키지까지 버전이 완벽히 같기가 쉽지 않다.

구성하는 시점이 달라지기 때문이다.

이러한 버전 차이로 인하여 한 서버에는 장애를 일으키지 않는 것이 다른 서버에는 장애를 일으키는 요인이 되기도 한다.

 

도커에서 사용하는 도커 파일은 서버 운영 기록을 코드화한 것이고, 도커 이미지는 도커 파일에 운영 기록을 실행할 시점을 더한 것이다.

 

도커 파일로 이미지를 만들면 언제 이미지로 컨테이너를 배포하던 컨테이너에 애플리케이션이 설치되는 시점이 같다.

 

즉, 서버를 항상 똑같은 상태로 만들 수 있다는 것이다.

 

이 이미지를 통해 컨테이너를 만들 때 환경 변수를 수정하므로써 컨테이너 이름 등 바뀌어야 하는 부분을 관리한다.

이로써 바뀌지 않아야 할 부분은 바뀌지 않게 이미지로 관리하고 바뀌어야할 부분은 바뀌게 하여 관리를 쉽게 할 수 있다.

 


쿠버네티스

실제 Production 환경에서는 여러 개의 컨테이너들을 관리해야 한다.

프로덕션 애플리케이션은 여러 컨테이너에 걸쳐 있고 그 컨테이너들은 여러 서버 호스트에 배포된다.

 

쿠버네티스는 framework를 통해 컨테이너를 관리하기 보다 편하게 해준다.

쿠버네티스는 컨테이너를 "pod"로 분류한다. pod는 컨테이너에 추상화 계층을 추가하여 사용자가 워크로드를 예약하고 네트워킹 및 저장소와 같은 서비스를 컨테이너에 제공할 수 있다.

 

특히 클라우드에서 개발을 할 때 쿠버네티스를 이용하면 물리 또는 가상 머신의 클러스트에서 컨테이너를 예약하고 실행할 수 있는 플랫폼이 확보된다.

 

쿠버네티스를 통한 수행 작업

 

  • 여러 호스트에 걸쳐 컨테이너를 오케스트레이션
  • 하드웨어를 최대한 활용하여 필요한 리소스 극대화
  • 애플리케이션 배포 및 업데이트 제어, 자동화
  • 스토리지 장착 및 추가 -> stateful 애플리케이션 실행
  • 확장(스케일링)
  • 자동 배치, 자동 재시작, 자동 복제, 자동 확장 등을 사용해 애플리케이션 상태 확인과 셀프 복구 수행

 

'로드맵 > 클라우드' 카테고리의 다른 글

APM - 클라우드  (0) 2020.08.24
Comments