본 글은 [쉽게 시작하는 쿠버네티스 - 서지영 지음(길벗 출판사)] 책을 요약 정리한 글 일부입니다.
1.1.1 IT 환경의 진화
1.클라이언트/서버(중앙 집중식: 1990년)
2.가상화 환경(2000년)
인프라을 확장할 때는 scale out 이고 메인프레임을 scale up한다.
즉, 메인 프레임의 기능을 향상시키고 그 안에서 여러 가상화 환경을 구축하는 것을 뜻함.
3. 퍼블릭 클라우드(2010년)
퍼블릭 클라우드는 3가지로 나눌 수 있다.
1. IaaS(Infrastructure as a Service) : 클라우드의 인프라만 빌려서 사용
2. PaaS(Platfrom as a Service): 인프라-개발환경만 빌려서 사용
3. SaaS(Soft as a Service): 인프라 - 개발환경 - 서비스 빌려서 사용
4. 컨테이너(현재)
배: 서버(리눅스)
컨테이너: 애플리케이션(경량의 리눅스)
컨테이너는 경량의 리눅스이며 어플리케이션이 실행할 수 있는 필요한 자원만 할당되고, 프로세스에서 실행되기 때문에 기존의 게스트 OS로 운영되는 가상화 기술보다 가볍다.
컨테이너는 리눅스 커널이 관리하고 리눅스의 커널의 namespace와 cgroup이 컨테이너를 관리한다.
namespace
namespace는 컨테이너의
1. 호스트 이름(호스트 네임스페이스)
2. 네트워크 인터페이스를 이용한 독립된 ip(네트워크 네임스페이스)
3. 파일 시스템 격리(마운트 네임스페이스)
4. 독립된 프로세스(프로세스 네임스페이스)
를 제공한다.
즉, 각각의 컨테이너는 리눅스 커널의 네임스페이스를 통해 독립적으로 운영될 수 있도록 고유한 스페이스를 가지게 됩니다. 이를 통해 IP 주소, 호스트 이름, 프로세스, 파일 시스템 등의 요소들이 컨테이너마다 독립적으로 관리되며, 컨테이너는 해당 고유한 이름 공간 안에서 움직일 수 있습니다.
각 컨테이너는 고유한 이름 공간을 가지기 때문에 다른 컨테이너와는 독립적으로 동작하며, 서로 다른 이름을 가지기 때문에 소통할 수 없습니다. 이로 인해 각 컨테이너는 자신의 이름 공간 안에서 독립적으로 동작할 수 있습니다. 이는 컨테이너들이 리눅스 운영체제 내에서 한 공간에 존재하지만 논리적으로는 독립된 공간으로 간주되는 이유입니다.
따라서, 컨테이너는 리눅스 운영체제의 공간 내에서 독립적으로 움직이며, 각각의 컨테이너는 고유한 이름 공간 안에서 작동합니다. 이를 통해 컨테이너는 자원의 격리와 독립성을 보장받으면서 동시에 리눅스 운영체제의 자원을 효율적으로 활용할 수 있습니다.
Cgroup
리눅스 커널의 Cgroup은 각각의 컨테이너 또는 프로세스 그룹에 대한 자원 할당 및 제한을 관리하는 기능을 수행한다.
즉, Cgroup은 자원을 할당하고 관리하는 기능을 한다.
1. 자원할당: cgroup은 각각의 컨테이너와 프로세스 그룹에게 CPU, 메모리, 디스크 I/O 등과 같은 시스템 자원을 할당한다. 그래서 각 컨테이너들은 할당 받은 자원안에서 정해진 범위 내에서 작동하고, 그 자원의 사용량 또한 제한할 수 있다.
2. 우선순위: 자원이 부족한 상황에서는 우선순위가 높은 컨테이너가 더 많은 자원을 할당받을 수 있다.
3. 자원 모니터링: 각 컨테이너의 할당된 자원을 모니터링하고 자원을 초과하는 경우 제한한다.
4. 계층구조: 컨테이너를 그룹으로 관리하고 그룹으로 자원을 할당하고 관리한다. 그 컨테이너 그룹 안에 또 다른 서브 그룹이 있을 수 있다.
컨테이너를 생성하고 실행할 수 있도록 도와주는 것이 바로 컨테이너 런타임이다.
컨테이너 런타임 도구
1. 컨테이너디(containerd)
2. 도커(docker)
3. 크라이오(CRI-O)
컨테이너 오케스트레이션 도구
1. 쿠버네티스
2. 도커 스웜
3. 아파치 매소스
1.1.3 컨테이너, 도커, 쿠버네티스의 관계
도커: 컨테이너를 실행하는 런타임
쿠버네티스: 다수의 컨테이너를 관리하는 툴
1.3 쿠버네티스 이해하기
쿠버네티스란
컨테이너 기반의 애플리케이션을 개발하고 배포할 수 있도록 설계된 오픈 소스 플랫폼입니다.
파드: 쿠버네티스에서 생성할 수 있는 가장 작은 배포 단위이면서 단일 혹은 다수의 컨테이너를 포함한다.
서비스: 배포한 파드를 외부에서 접근할 수 있게 한다.
네임스페이스: 쿠버네티스 클러스터의 논리적인 분리 단위이다.
볼륨: 컨테이너의 파일을 저장하고 컨테이너 간 파일을 공유할 수 있는 저장소
마스터 노드:전체 쿠버네티스 환경을 관리함
워커 노드: 컨테이너를 실행하고 관리함
클러스터: 마스터 노드 + 워커 노드
댓글