쿠버네티스 어나더 클래스 지상편: Sprint1 Day2 컨테이너 한방 정리

컨테이너: 실행중인 컴퓨터의 호스트 운영체제에 격리된 공간을 설정하고, 이 격리공간 내에 호스트 운영체제로부터 독립된 프로세스를 실행시키는 기술과 이를 위한 소프트웨어 구성 일체를 이야기한다. 동일한 하드웨어 아키텍처(특히 CPU)와 동일한 OS 커널을 보유한 수많은 컴퓨터에서 컨테이너로 이미지화한 소프트웨어의 동일한 동작을 보장한다.

 

항상 고민하게 되는 부분: 어느 OS에 K8s를 설치하는가?

UNIX(최초 OS, 1960) → Linux(무료 OS, 1991) → Debian(커뮤니티용 무료 OS, 1993) / Redhat(유료, 1995)

Redhat Linux 복제판 CentOS(무료) 지원 종료 → Redhat Linux로 전환하기, CentOS를 그대로 기술지원하는 업체에 유료 지원 받기, 타 OS로 마이그레이션 스크립트 실행, Rocky Linux / Alma Linux 복제판 OS로 전환하기

 

컨테이너 기술의 발전 흐름

chroot(유저 격리, 파일 격리, 네트워크 격리, 1979) → chroup(자원 격리, 2006) → namespace (프로세스 격리(각 앱을 독립적인 환경에서 실행), 2008) → LXC → LXC기반 Docker(2013) → Containerd(2016) → cri-o(2017)

 

컨테이너 오케스트레이션 필수 지식

  1. 앱을 컨테이너에 담아서 배포한다

  2. 시스템 운영 노하우를 많이 가지고 있다.

 

K8s 필수 지식

  1. K8s는 현재 표준을 넘어 여러 분야에서 활용되고 있다

  2. K8s는 컨테이너를 더 쉽게 사용할 수 있게 해준다.

  3. 컨테이너는 K8s와의 인터페이스가 중요하다.

 

K8s 발전 흐름

kube-apiserver → Kubelet → 컨테이너 런타임: 컨테이너 생성

  • Kubelet: Case문으로 docker, rkt 구분해 API 호출 → CRI(Container Runtime Interface) 인터페이스 추가(K8s 1.5버전): 구현부(dockershim)에서 API 호출

  • CRI 내부간 통신 grpc → CRI-Pulgin

 

정리

Docker에서 컨테이너 생성을 분리한 것: Containderd → K8s에서 Docker를 사용할 수 있음

OCI 표준 컨테이너 규약, Docker에서 생성한 이미지는 runC → Docker 이미지는 저레벨 컨테이너 런타임 rkt에서 사용할 수 있음

 

채널톡 아이콘