Home 컨테이너(Container), 도커(Docker)와 쿠버네티스(k8s)는 무엇일까?
Post
Cancel

컨테이너(Container), 도커(Docker)와 쿠버네티스(k8s)는 무엇일까?

컨테이너, 도커, 쿠버네티스


container-doker-k8s


컨테이너


  • 컨테이너는 가상머신을 사용해 각 마이크로 서비스를 격리(islate)하는 기술
  • 컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 빠른 실행 가능
  • 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서(이미지), 어디서든 쉽게 실행할 수 있도록 해주는 기술
  • 컨테이너 격리 기술에는 리눅스 네임 스페이스(namespace), 리눅스 컨트롤 그룹(cgroups) 와 유니온 파일 시스템(Union mount file system)이 있다.

container-deployment

  • Traditional Deployment : 클라우드 컴퓨팅 기술이 나오기 전까지 인프라 구축의 일반적인 방식
  • Virtualized Deployment : 가상환경을 사용하는 방식(VM에 운영체제가 있고 하드웨어를 가상화로 구현하는 특징을 갖고 있기 때문에 무겁다)
  • Container Deployment : Hyperviser를 통해 가상환경을 구축할 필요 없으며, 운영체제 또한 구축할 필요가 없어 리소스가 적다.


리눅스 네임 스페이스


  • 각 프로세스별로 별도의 커널 자원(네트워크, 유저, 호스트 네임 등)을 분할하는 리눅스 커널의 기능
  • 커널 자원을 분할 지원하는 기능

리눅스 컨트롤 그룹


  • 각 프로세스별 소비할 수 있는 리소스 양(CPU, 메모리, I/O, 네트워크 대역대,device 노드 등)을 수집, 제한, 격리시키는 기능


도커


  • 컨테이너 : 이미지를 격리하여 독립된 공간에서 실행한 가상 환경
  • 이미지 : 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
    • 새로운 도커 컨테이너를 설치하기 위한 것 (사용자 입맛대로 설정)
    • 운영체제가 필요한 경우 (우분투, 센토스 등)
    • 어플리케이션이 필요한 경우 (톰캣, MySQL 등)
    • 이미지 다운로드 및 설치 -> 컨테이너 생성
  • 이러한 컨테이너 기술을 지원해주는 도커


docker-engine


Docker engine: 이미지, 네트워크, 디스크 등의 관리 역할
Containerd : runC를 이용한 container를 관리해주는 daemon
runC : 필요한 구성요소를 할당하고 container를 격리, 생성 시켜주는 역할
shim : container의 생명주기 관리를 해주는 역할
💡 각각 돌아가기 때문에 Docker Engine을 재실행 해도 각 이미지에 영향이 없다.


도커의 한계


  • 서비스가 커지면 커질 수록 관리해야 하는 컨테이너의 양이 급격히 증가
  • 때문에 도커를 관리할 수 있는 쿠버네티스가 탄생


쿠버네티스


  • 다수의 컨테이너를 자동으로 운영하기 위한 오케스트레이션 도구
  • 컨테이너 분산 배치, 컨테이너 교체, 컨테이너 환경 설정을 관리
  • 클라우드 네이티브를 가장 효과적으로 구현하기 위한 도구로 DevOps, MSA와 관련이 있다.


쿠버네티스의 장점


  • 컨테이너 오케스트레이션 비용 절감
  • MSA를 위한 데브옵스 효율성 향상
  • 멀티 클라우드 환경에서 워크로드 배포 용이
  • 종속 가능성 없는 이식성 제고
  • 배포 자동화 및 확장성 강화
  • 클라우드 환경에서의 앱 안정성 및 가용성 강화
  • 오픈소스 생태계의 일부로서 이용하기 편리
This post is licensed under CC BY 4.0 by the author.

도커(Docker)와 쿠버네티스(Kubernetes)는 왜 사용해야 할까?

-