본문 바로가기

Computer Science/Computer Systems

[Lecture 23] 클라우드, VM과 컨테이너

#클라우드 컴퓨팅

클라우드 컴퓨팅이란 서버, 스토리지 등의 IT 리소스를 인터넷을 통해 실시간 제공하고 사용한 만큼 비용을 지불하는 방식의 컴퓨팅을 말한다. 쉽게 말해 정보처리를 자신의 컴퓨터가 아닌 인터넷으로 연결된 다른 컴퓨터로 처리하는 기술을 말한다. 빅데이터를 처리하기 위해서는 다수의 서버를 통한 분산처리가 필수적이다. 분산처리는 클라우드의 핵심 기술이므로 빅데이터와 클라우드는 밀접한 관계를 맺고 있다. 빅데이터 선도 기업인 구글과 아마존이 클라우드 서비스를 주도하고 있는 이유도 여기에 있다.

  • “X as a service”
    • 예: SaaS (software as a service)
  • Infrastructure as a Service
    • 사용자가 커널에서 애플리케이션에 이르기까지 소프트웨어를 관리
    • 클라우드는 "인프라"(power, 쿨링 등)를 관리
    • 예: Amazon EC2
  • Platform as a Service
    • 사용자가 애플리케이션을 관리하고 클라우드에서 소프트웨어 구성(예: 사용할 런타임)을 지정
    • 예: Heroku
  • Software as a Service
    • 애플리케이션이 클라우드의 서버에서 실행됨
    • 예: Google Docs
  • 배보모델
    • Cloud 
    • Hybrid Cloud
    • On-prem cloud

#클라우드 특성

  • Elasticity
    • 인스턴스 수 확대/축소(보통 자동)
    • 사용한 만큼만 지불
  • Multi-tenant
    • 리소스 활용도가 높은지 확인(통계적 다중화)
  • Isolation
    • 각 사용자는 시스템에 대한 "프라이빗 뷰"를 가진다
    • tenant들은 서로 간섭하지 않는다
    • 상호 불신할 수 있다

#사용자 워크로드를 어떻게 실행할까?

  • 프로세스?
    • private address space
  • 애플리케이션 종속성을 패키징하는 방법은 무엇일까
    • 다른 시스템에 구축된 실행 파일
    • 대상 시스템에 올바른 공유 라이브러리가 있나?
  • 프로세스가 서로 interfere 할까?
    • 그렇다: 대부분의 시스템이 공유되고 있기 때문
    • 공유된 파일 시스템
    • 공유된 포트 공간
    • 공유된 pid
  • 프로세스는 멀티 테넌트(Multi-tenant) 클라우드 시나리오에 적합하지 않은 추상화이

#사용자 워크로드를 어떻게 실행할까? 답:

  • Bare Metal
    • 각 사용자 워크로드는 자체 물리적 시스템을 갖는다
  •  Virtual Machines
    • 각 사용자 워크로드는 자체 가상 머신을 갖는다.
    • 애플리케이션에 필요한 모든 것이 가상 디스크 이미지에 있음
    • 게스트 커널: 전체 커널이 공유되지 않음
    • 하이퍼바이저/가상 시스템 모니터 물리적 시스템 다중화
  • Containers
    • 개인 파일 시스템(chroot/layered)
    • 커널 메커니즘은 리소스(네임스페이스, cgroup)의 "private view"를 제공한다.

#70년대의 Virtual Machine

  • 목적:
    • OS 소프트웨어 개선 및 테스트
    • H/W 진단 소프트웨어 실행
    • 다른 OS 또는 버전 실행
    • 물리적 시스템과 다른 가상 하드웨어 구성으로 실행
  • Popek and Goldberg virtualization requirements
    • 동등성/균등성
      • 프로그램이 동일한 동작을 나타내야 함
    • 자원 관리
      • VMM이 리소스를 완전히 제어해야 함
    • 효율성
      • 대부분의 명령은 natively 실행되어야 한다.

#Virtual Machine 실행 방법들

  • 직접 실행
  • 기본 아이디어: deprivilege (supervisor 대신 OS를 사용자로 실행)
  • “trap and emulate”
  • 모든 명령이 트랩될까?
    • IBM/360 (70’s): 그렇다
    • x86(VT 확장 이전): 안된다

#2000년대 초반 VM의 부활

  • 동적 이진 변환
    • 게스트의 감독자 지침을 바꾸거나 트랩 앤 스파이크를 위해 강제로 트랩 수행
    • 1999년에 VMware 워크스테이션 출시
  • 게스트 수정: paravirtualization / 반가상화
    • Xen (2002 오픈소스)
    • Amazon EC2는 원래 Xen을 기반으로 했다
  • 하드웨어 extension
    • 2005/2006 Intel VT-x AMD-V

#VM의 메모리 관리

  • 추가 번역 계층
    • guest virtual → guest physical → host physical (machine)
  • 접근법
    • 섀도 페이지 테이블
      • 하이퍼바이저는 페이지 테이블의 복사본을 만들고 MMU에 복사본을 설치
    • Paravirtualization
      • cooperation of guest
    • 확장/내포된 페이지 테이블
      • 하드웨어가 추가 번역을 수행

#VM의 리소스 관리

  • OS는 고정/전용 RAM/CPU/장치에 사용된다
  • 가상 CPU
  • 메모리
    • 페이지 셰어링
    • Memory ballooning
  • i/o 장치
    • virtio
    • passthrough
    • “smart devices”

#컨테이너에 대한 커널 메커니즘

  • chroot
    • “chroot jail”
    • 이 프로세스와 모든 하위 프로세스에 대해 다른 디렉터리를 "/"로 사용.
  • Namespaces
    • 개인 파일 시스템(chroot/layered)
    • UTS - 호스트 이름
    • 마운트 - 파일 시스템
    • PID - pids(ps는 네임스페이스에 pid만 표시)
    • IPC - shmem, 세마포어
    • 사용자 - 사용자, 그룹 등
    • 네트워크 - 포트, 장치 등
  • Cgroups
    • 리소스 사용 제한
    • CPU, mem

#Clone과 unshare(2)

  • 커버 아래에서 포크 및 pthread create use clone 호출
  • 네임스페이스를 포함한 클론 제어 공유(예: VM 복제)에 플래그를 지정한다
  • unshare 가능(예: CLON NEWPID).

그렇다면 컨테이너란 무엇인가?

전용 chroot, 네임스페이스, cgroup을 공유하는 프로세스 집합을 말한다

컨테이너를 만드는 방법

  • 도커 파일 - 컨테이너를 만들때 쓰이는 사실상의 표준
    • 컨테이너에 대한 파일 시스템 이미지
    • 다른 이미지에서 빌드: 계층화

도커 파일

# Pull base image.
FROM dockerfile/ubuntu

# Install Nginx.
RUN \
    add-apt-repository -y ppa:nginx/stable && \
    apt-get update && \
    apt-get install -y nginx && \
    rm -rf /var/lib/apt/lists/* && \
    echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
    chown -R www-data:www-data /var/lib/nginx
    
# Define mountable directories.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", 
"/var/log/nginx", "/var/www/html"]

# Define working directory.
WORKDIR /etc/nginx

# Define default command.
CMD ["nginx"]

# Expose ports.
EXPOSE 80
EXPOSE 443

컨테이너 생태계

  • CNCF - 클라우드 네이티브 컴퓨팅 기반
  • Kubernetes
  • Service Mesh
  • Pods와 sharing
    • 일부 네임스페이스를 공유하는 컨테이너
    • 예: 파일 시스템 공유, 네트워크

가상화 스펙트럼

  • threads
  • processes
  • containers
  • virtual machines
  • physical machines
    • 더 높은 density, 더 낮은 오버헤드, 공유 용이성
    • 더 나은 격리, 보호, 더 많은 사용자 제어

컨테이너 보안 문제

  • 시스템 호출 인터페이스를 통한 공격 표면
  • 프로세스와 동일
  • 보안 문제 줄이는 방법
    • 시스템 호출 필터링(예: seccomp)
    • 가상화를 사용

VM 문제

  • 크고 다루기 힘든 이미지
  • 부팅 속도가 느림
    • 서버리스에겐 큰 문제

서버리스: 새로운 모델

  • 서비스의 역할을 하다
  • 사용자만 지원되는 언어로 쓰기/쓰기 기능
  • 이벤트 기반: 이벤트에 연결
  • “stateless”
  • charged on ms granularity

최첨단 "컨테이너": 마이크로 VC

  • 경량 VM에서 컨테이너 실행
    • AWS Firecracker
    • Kata containers
  • 컨테이너 오케스트레이션 시스템(예: Kubernetes)과 통합