아래 강의에서 필요하거나 핵심적인 내용만 정리하였습니다.
https://inf.run/wAfB2
- 범위: 색션 0: 하이퍼바이저와 가상 머신의 이해 ~ 도커와 쿠버네티스 이해
가상화란?
- 가상화는 전통적으로 하드웨어에 종속된 리소스를 사용하여 유용한 IT 서비스를 만드는 기술
- 가상화를 사용하면 물리적 머신의 기능을 여러 사용자 또느 ㄴ환경에 배포하여 물리적 머신을 최대한 활용 가능
- 가상화를 통해 기업은 서버를 파티셔닝하고 여러 유형 및 버전의 운영 체제에서 애플리케이션을 실행
하이퍼바이저의 정의 / 가상화 원리
- 하이퍼바이저란
- 소프트웨어가 물리 리소스를 필요로 하는 가상 환경으로부터 물리 리소르를 분리
- 호스트 컴퓨터에서 운영체제 다수를 동시에 실행하는 논리적 플랫폼
- Native 타입과 Hosted 타입이 존재
- Native - type1
- 해당 하드웨어/베어메탈에 하이퍼바이저를 직접 설치, 하이퍼바이저가 호스트 운영체제의 역할까지 하게 됨
- 게스트 운영체제는 두 번째 수순으로 실행됨
- Xen, KVM, Xen Server 등 존재
- 상대적으로 성능이 좋음
- Hosted - type2
- 일반 프로그램처럼 호스트 운영체제 위에서 하이퍼바이저 실행
- 게스트 운영체제는 세번째 수준으로 실행
- Virtualbox, Vmware, Parrallels 등 존재
- 상대적으로 성능이 조금 낮다
- 전가상화(Full Virtualization)
- 하드웨어를 모두 가상화
- 게스트 운영체제를 변경하지 않음
- 물리적인 가상화를 지원하느 CPU 가상화 기술(VT필요)
- 네이티브 방식의 가상화에서 사용
- 반가상화(Para Virtualization)
- 하드웨어를 완전히 가상화하지 않음
- 게스트 운영체제 커널 일부 수정이 필요(오픈소스 아니면 사용 불가능)
- 하이퍼바이저가 모든 제어를 담당하여 높은 성능을 유지
- Qemu가 대표적인 도구
컨테이너
- 컨테이너는 가상환경을 사용하여 각 마이크로 서비스를 격리하는 기술
- 컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행 가능
- vm과 달리 하이퍼바이저와 Guest Os 영역의 오버헤드를 없앨 수 있어 매우 가벼움
- 가상화가 아닌 격리, HostOS와 컨테이너가 직접 통신
리눅스 네임스페이스
- 컨테이너를 격리하는 기술
- 각 프로세스가 파일 시스템 마운트, 네트웤, 유저(uid), 호스트 네임(uts) 등 에 대해 시스템에 독립뷰를 제공
- 네임스페이스 안에 동작하는 애플리케이션만 자원에 접근 가능
도커(Docker)
- 컨테이너 기술을 지원하는 프로젝트 중 하나로 다양한 운영체제에서 사용 가능한 컨테이너 런타임
- 애플리케이션에 국한 되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순화
- 리눅스의 네임스페이스와 cgroups와 같은 커널 기능을 사용하여 가상화
- containerd가 독립 실행형 프로젝트로 추출되어 현재 Kubernetes의 컨테이너 런타임으로 사용된다.
- kubernetes에서 docker를 중간에 두지 않고 containerd와 직접 통신이 가능하도록 발전, 개발 과정에서는 도커가 여전히 사용
- 다양한 운영체제에서 사용 가능(리눅스, 윈도우 등)
- 애플리케이션에 국한 되지 않고 의존성 및 파일 시스템까지 전부 패키징하여 빌드, 배포, 실행을 단순화
- 리눅스의 네임스페이스와 cgropus와 같은 커널 기능을 사용하여 가상화
- 이미지: 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
- 컨테이너: 이미지를 격리하여 독립된 공간에서 실행한 가상 환경
- 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행 가능
- 프로세스에 문제가 발생하여도 컨테이너 전체를 조정해야 하므로 컨테이너에는 하나의 프로세스를 실행시키는 것이 일반적이다
쿠버네티스(Kubernetes)
- 다수의 컨테이너를 자동으로 운영하기 위한 오케스트레이션 도구
- 많은 시스템을 통합, 컨테이너를 다루기 위한 API를 제공
도커의 한계
- 서비스가 커질수록 관리해야 하는 컨테이너 양이 급격하게 증가
- 도커를 사용하여 관리를 하기엔 무리
- 배포 및 컨테이너 배치 전략, 스케일-인, 스케일-아웃이 쉽지 않음
=> Kubernetes, docker swam등의 오케스트레이션 툴이 필요하게 된 이유
컨테이너를 격리하는 기술
- 리눅스 네임스페이스
- 각 프로세스가 파일 시스템 마운트, 네트워크, 유저(uid), 호스트 네임(uts) 등에 대해 시스템에 독립 뷰를 제공
- 리눅스 컨트롤 그룹: 프로세스로 소비할 수 잇는 리소스 양(CPU, Memory, I/O, 네트워크 대역대, device 노드 등)을 제한
'k8s' 카테고리의 다른 글
DevOps를 위한 쿠버네티스 마스터 강의 정리(1) (0) | 2024.03.12 |
---|---|
kubectl attach 와 kubectl exec 차이점 분석 (0) | 2023.02.06 |
[Helm 작성하기 (1)] Helm 차트 구조 (0) | 2023.02.03 |
쿠버네티스 완벽 가이드 2장 : 쿠버네티스 특징 간단히 알아보기 (1) | 2023.02.02 |
쿠버네티스 완벽 가이드 1장 : Docker (0) | 2023.01.19 |