리눅스 기반 컨테이너 개발 환경 구축

_wiwater·2022년 9월 20일
0

클라우드

목록 보기
3/4
post-custom-banner

1. 컨테이너 기반 가상화 소개

1) 컨테이너 기술의 소개

  • 컨테이너의 장점
    • 민첩성 : 개발자가 어플리케이션을 빌드하고 더 빠른 배포
    • 이식성 : OS 플랫폼 간 및 클라우드 간 이식 가능, 개발 시스템에서 프로덕션 환경까지 일관된 형식을 사용
    • 신속한 확장성 : 같은 인프라에 더 많은 컨테이너 지원 가능, 신속한 스케일링 지원

2) VM과 컨테이너 비교

  • VM (Vittual machines)
    - 하이퍼바이저(가상 머신 모니터)
    - 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼
    - cpu, 메모리, 스토리지 등의 리소스를 에물레이션 -> 한대의 서버에 독립된 여러 머신 환경을 구성 가능
    - 저수준 하드웨어 장치를 가상화
    • 장점
      • 같은 서버에 다양한 운영체제를 실행
      • 물리머신 대비 동일한 자원을 더 효율적으로 사용
      • 물리머신 대비 빠른 서버 프로비저닝
    • 단점
      • OS 이미지, 라이브러리, 어플리케이션 등을 반복적으로 포함
  • 컨테이너(containers)
    - 애플리케이션 구동에 필요한 모든 종속성을 포함한 소프트웨어 패키지를 운영체제 위에서 가상화
    • 장점
      • 컨테이너를 어느 환경에나 배포 가능
      • OS를 부팅하거나 라이브러리를 로드할 필요가 없음
      • 가상환경을 더 효율적이고 경량으로 생성 가능
      • 수 초 이내의 빠른 시작 시간
      • 하나의 호스트에 더 많은 어플리케이션 실행 가능
      • OS 패치 업데이트 등 유지 관리와 관련된 오버헤드 감소
    • 단점
      • 컨테이너가 정의된 운영체제에 종속성

3) 컨테이너 관련 에코시스템 정리

  • CNCF
    • 벤더 중립적인 클라우드향 오픈소스 프로젝트를 관리하는 재단
    • 대표 프로젝트 : 쿠버네티스, HELM, CoreDNS, etcd, fluentd, containerd, Prometheus 등
      *클라우드 네이티브
      -> 퍼블릿/프라이빗/하이브리드 클라우드 환경에서 확장 가능한 형태로 빠르고 민첩하게 애플리케이션을 빌드하고 실행 목표
      -> 뒷받침하는 기술 : 컨테이너, 마이크로서비스, 서비스 메시, 변경할 수 없는 인프라 등
  • CNCF에 등록된 프로젝트 100개 이상 + 벤더 제품들
    -> 개별 툴의 기능을 살펴보는 방식으로 접근은 한계, 풀어야 하는 문제나 프로세스를 이해하고, 거기에 맞는 도구를 선택
  • 컨테이너(런타임)와 관련된 두가지 표준

    *해결책 : Low level 컨테이너 런타임 표준 구성

    • OCI (open container initiative)
      : 컨테이너 형식과 런타임의 업계 표준을 구성 (Docker, IBM, CoreOS, Google, MS,,)
      / 현재 대부분의 컨테이너 런타임이 이 형식을 따름

    • OCI 런타임
      : 컨테이너 실행에 필요한 저수준 컨테이너 런타임

    • runc
      : OCI 스펙에 따라 컨테이너를 생성 및 실행하기 위한 CLI 도구

      *해결책 : High level 컨테이너 런타임 표준 구성

    • CRI(container runtime interface)
      : 쿠버네티스에서 다양한 컨테이너 런타임을 사용할 수 있도록 하는 플러그인 인터페이스 / 현재 대부분의 컨테이너 런타임이 이 형식을 따름

    • CRI runtime
      : 컨테이너 실행에 필요한 고수준 컨테이너 런타임 / 컨테이너 라이프 사이클, 이미지 등을 관리

    • 쿠베네티스에서 지원하는 컨테이너 런타임 종류
      : containerd, CRI-O, Mirantis Container Runtime, Docker Engine

2. 컨테이너를 구성하는 리눅스 기술

*3개 주요 리눅스 계열로 정리 가능

2-1. 리눅스 배포판 소개

1) Debian 계열

  • Debian, Ubuntu, Mint Linux 등
  • 오픈소스이고 안정성에 초점
    • Ubuntu
      • 사용성과 LTS(long term support)을 목표로 함
      • 다수의 소프트웨어 리포지토리에서 패키지 사용가능, DPKG 기반, apt-get/apt

2) Red Hat / Fedora 계열

  • Fedora, Red Hat Enterprise Linux, CentOS, Oracle Linux, Amazon Linux 등
  • Fedora는 6개월마다 새로운 버전, CentOS는 좀 더 긴 릴리즈 사이클
    • RHEL
      -RPM기반, yum 또는 dnf 사용
      -엔터프라이즈 서버 환경을 타겟
      -긴 릴리즈 사이클(10년)

3)openSUSE 계열

  • openSUSE,SUSE Linux Enterprise Server
  • 오픈소스이고 안정성에 초점
    • SLES
      -rpm기반, zypper
      -관리 목적으로 YaST 사용 가능
      -안전한 패키지 관리
    -> 워크로드에 따라 이에 적합한 배포판 선택

2-2 리눅스 커널 소개

1) 리눅스 커널

  • 오픈 소스 모놀리딕 유닉스 계열 컴퓨터 운영 체제 커널
  • 크로스 플랫폼의 의도는 없었으나 그 이후로 다른 운영체제나 커널 대비 더 다양한 컴퓨터 아키텍처를 지원하도록 확장
  • c언어, 어셈블러로 작성
  • 가장 큰 오픈소스 프로젝트 중 하나

2) 리눅스 커널 접근

  • 69,970 파일, 29,460,000 라인
    -> 권장하는 커널 접근 방식 : 책/블로그 등으로 주요 개념 이해 후 필요시 관련 코드 보는 식으로 접근

3) 커널

  • 컴퓨터 운영체제의 핵심이 되는 컴퓨터 프로그램으로, 시스템의 모든 것을 완전히 통제
  • 어플리케이션 소프트웨어와 하드웨어를 연결함
  • 운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공

4) 리눅스 커널의 주요 기능

  • 하드웨어 관리 및 추상화

    • 디바이스 드라이버만이 하드웨어가 제공하는 기능이나 프로토콜에 관여
    • 사용자 프로그램은 하드웨어에 종속적인 작업이 필요하지 않음
    • 블록 I/O레이어 -> 파일 저장 매체 종류를 고려하지 않고 사용 가능
    • 파일시스템 -> 실제 파일이 저장된 위치 고려하지 않고 사용 가능
  • 프로세스와 쓰레드 관리

    • CPU 타임 공유와 메모리 보호
    • 프로세스 스케줄러 -> CPU 코어 갯수보다 더 많은 수의 프로그램이 동시 실행 가능
    • 메모리 보안 기능 -> 메모리 주소 정보를 이용한 악의적 공격 막기 위해
  • 메모리 관리

    • 개별 프로세스에 가상의 연속된 메모리 공간을 제공
    • 실제는 물리 메모리 내에서 같이 섞여서 할당되고 해제됨
    • 페이징 -> 물리 메모리보다 큰 크기의 프로그램이 동시에 실행 가능
  • I/O 관리

    • 디바이스 드라이버 위에 다양한 I/O를 지원
    • VFS -> 하부 시스템 구성에 상관없이 파일 입출력 형식으로 제어 가능

2-3. 리눅스 시스템 구성 - 클라우드

1) AWS에 리눅스 실행 환경 구성

  • AWS에 계정 만들기
    • 가입은 이메일
    • 프리티어 제공 -> 상세 내용 확인 필요
    --> putty 이용해서 aws ssh 연결 및 접속
post-custom-banner

0개의 댓글