k8s

DevOps를 위한 쿠버네티스 마스터 강의 정리(2)

Joon0464 2024. 3. 12. 18:31

아래 강의에서 필요하거나 핵심적인 내용만 정리하였습니다.

https://inf.run/wAfB2

 

데브옵스(DevOps)를 위한 쿠버네티스 마스터 강의 - 인프런

컨테이너 기반 오픈 소스 가상화 프로젝트인 "쿠버네티스"를 이용한 컨테이너 환경의 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 활용하는 방법을 입문부터 활용까지 다룹니다., [

www.inflearn.com

- 범위: 색션 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 노드 등)을 제한