본문 바로가기
가상화/docker

클라우드 환경을 위한 리눅스 ch1

by JINJINC 2023. 4. 2.
728x90
반응형

데이터 센터

온프레미스   ---------> 클라우드 서비스 

온프레미스란?

"온프레미스"는 기업이 자체 시설에서 보유하고 직접 유지 관리하는 프라이빗 데이터 센터

온프레미스 인프라를 사용하여 컴퓨팅 리소스가 퍼블릭 클라우드에서와 매우 유사한 방식으로 가상화 되는 프라이빗 클라우드를 실행할 수 있습니다.(단, 프라이빗 클라우드도 임대한 타사 하드웨어 실행이 가능하다.)

클라우드란?

필요한 만큼 할당하여 사용한 만큼만 비용을 지불합니다.

간단하고 즉각적으로 할당하여 급하게 큰 자원이 필요한 경우 바로바로 확장하여 사용이 가능한 유용한 점이 있습니다.

API/SDK이용해 모든 자원을 자동화 가능 

금융, 국방분야에도 클라우드 사용이 추세


컴퓨팅 환경

가상머신 ------->  컨테이너

가상머신

- 하드웨어 가상화 기반으로 가상머신을 할당합니다.

- 가상 머신 단위로 확장(스케일 업, 스케일 아웃)

컨테이너 

- 운영체제 기반 가상화로 컨테이너 패키지 단위로 가상화

- 컨테이너 단위로 확장

- 빠른 확장성을 가집니다.(기존: 컴퓨터를 켜서 운영체제 구동되고 어플리케이션 실행 -> 어플리케이션 실행)

- 리눅스 기반 기술로 자원의 격리를 수행합니다. 


서버관리

쉘 스크립트 ----> 자동화 도구

 

쉘 스크립트

- 커스텀 쉘 스크립트

- 담당자 부재 시 대응 어렵다.

- 스크립트 자체 오류 존재 가능

 

자동화도구

- 필요한 부분에 쉘 스크립트 사용

- 한단계 추상화된 형태로 자원을 기술하는 도구들 사용하여 관리(예, ansible등)

 


장애 대응

리눅스 명령의 이해 ------> 리눅스의 이해

 

리눅스 명령의 이해

- 서버에 직접 접속해서 장애 대응 해야함

- 리눅스 명령어 기반으로 복구/분석 해야함

 

리눅스의 이해

- 중앙 집중화된 로깅/ 모니터링 환경

- 수집된 데이터를 기반으로 장애를 판단

 


컨테이너 기술

주목해야할 부분은 컨테이너의 개념

- 애플리케이션의 코드, 종속성 그리고 실행환경을 하나의 패키지로 구성가능

- 컨테이너 런타임이 있는 곳이라면, 동일한 패키지가 실행됩니다. 

 

컨테이너의 장점

민첩성

- 개발자가 어플리테이션을 빌드하고 더 빠른 배포

이식성

-  os플랫폼 간 및 클라우드 간 이식 가능

- 개발 시스템에서 프로덕션 환경까지 일관된 형식을 사용

신속한 확장성

- 같은 인프라에 더 많은 컨테이너 지원 가능

- 신속한 스케일링 지원

 

docker의 container와 vm 비교

 

VM과 컨테이너의 비교

VM(Vitual machines)

하이퍼바이저(가상 머신 모니터)

- 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼

-  CPU, 메모리, 스토리지 등의 리소스를 에뮬레이션 -> 한대의 서버에 독립된 여러 머신 환경을 구성가능 

 

저수준 하드웨어 장치(CPU, Disk, Network) 를 가상화 

 

장점

- 같은 서버에 다양한 운영체제를 실행

- 물리머신 대비 동일한 자원을 효율적으로 사용

- 물리 머신 대비 빠른 서버 프로비저닝

단점

- OS 이미지, 라이브러리, 어플리케이션등을 반복적으로 포함 

 

Containers

애플리케이션 구동에 필요한 모든 종속성을 포함한 소프트웨어 패키지를 운영체제 위에서 가상화

 

장점

- 컨테이너를 어느 환경에나 배포 가능

-  os를 부팅하거나 라이브러리를 로드할 필요가 없음

- 가상환경을 더 효율적이고 경량으로 생성 가능

- 수초 이내의 빠른 시작 시간

- 하나의 호스트에 더 많은 어플리케이션 실행 가능

- os  패치 업데이트 등 유지 관리와 관련된 오버헤드 감소

 

단점

- 컨테이너가 정의된 운영체젱 종속성

 

Docker 란?

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다.

Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행됩니다.

 

Docker 작동 방식

Docker는 코드를 실행하는 표준 방식을 제공합니다. Docker는 컨테이너를 위한 운영 체제입니다. 가상 머신이 서버 하드웨어를 가상화하는 방식과 비슷하게(직접 관리해야 하는 필요성 제거) 컨테이너는 서버 운영 체제를 가상화합니다.
Docker는 각 서버에 설치되며 컨테이너를 구축, 시작 또는 중단하는 데 사용할 수 있는 간단한 명령을 제공합니다.
Docker는 OS 레벨 가상화 기술이다.

Docker는 다중 운영체제 사용이 가능할까?

=> docker hub에 다양한 os의 이미지가 존재합니다.

 

$ cat /etc/os-release
$ docker pull fedora
$ docker run --rm fedora cat /etc/os-release

 

OS레벨 가상화

  • 커널이 여러 격리된 사용자 공간 인스턴스의 존재를 허용하는 운영체제 패러다임
  • Containers : LXC, Solaris containers, Docker, Podman
    zones : Solaris containers
    virtual private servers: OpenVZ
    virtual kernels : DragonFly BSD
    jails : FreeBSD jail, chroot jail
  • 호스트 os의  커널을 공유
    $ uname -a
    $ docker run --rm fedora uname -a

리눅스 배포판 -> Ubuntu, Redhat, SUSE, CentOS,,,

 리눅스 배포판 = 리눅스 커널 + 컴포넌트 (윈도우 시스템, 데스크톱 환경, 서비스 데몬, 패키지 매니너, 애플리케이션 등)

 

컨테이너 가상화 관련 에코/용어 정리

CFCN(Cloud Native Computing Foundation)

- 벤더 중립적인 클라우드향 오픈소스 프로젝트를 관리하는 재단

- 대표 프로젝트 : 쿠버네티스, HELM, CoreDNS, etcd, fluentd, containerd , Prometheus 등

 

클라우드 네이티브

-> 퍼블릿/ 프라이빗/ 하이브리드 클라우드 환경에서 확장 가능한 형태로ㅗ 빠르고 민첩하게 애플리케이션을 빌드하고 실행 목표

-> 뒷받침하는 기술 : 컨테이너, 마이크로 서비스, 서비스 메시, 변경할 수 없는 인프라 등

 

CNCF에 등록된 프로젝트 100개 이상 + 벤더 제품들

-> 개별 툴의 기능을 살펴보는 방식으로 접근은 한계  풀어야하는 문제나 프로시스를 이해하고, 거기에 맞는 도구를 선택

 

 

Cloud Native Trail Map
1. Containerization
2. CI/CD
    Argo
3.Orchestration
   Kubernetes
4. Observability
    Prometheus, Fluentd
5. Service Proxy, discovery, mesh
    envoy, Core DNS
6. Networking, Security
   CNI(Calico, Flannel, Weave Net, Cilium)
7. Database & Sotrage
   etcd
8. Streaming & Messaging
   gRPC, cloudevents
9. Container registry & Runtime
    containerd
10. Software distribution

컨테이너 관련 표준

 

문제1> 다양한 런타임 등장, 인터페이스 분화 

해결 => Low level 컨테이너 런타임 표준 구성

 

* OCI(Open Container Initiative)

- 컨테이너 형식(format)과 런타임(runtime)의 업계 표준을 구성 [ Docker, IBM, Google, MS,,,]

- 현재 대부분의 컨테이너 런타임이 형식을 따름

* OCI 런타임

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

* runc

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

 

문제2 > 컨테이너 런타임 별 K8S 인터페이스 작성

 해결 -> High level 컨테이너 런타임 표준 구성

 

CRI(Container Runtime Interface)

쿠버네티스에서 다양한 컨테이너 런타임을 사용할 수 있도록 하는 플러그인 인터페이스

현재 대부분의 컨테이너 런타임이 형식을 따름

 

* CRI runtime

- 컨테이너 실행에 필요한 고수준 컨테이너 런타임

- 컨테이너 라이프사이클, 이미지 등을 관리

 

쿠버네티스에서 지원하는 컨테이너 런타임 종류

- containerd , CRI-O, Mirantis Container Runtime, Docker Enaine

 

문제3 > Host 커널을 공유하는 과정에서의 보안 이슈

해결 -> 경량 가상머신을 이용해 안전한 컨테이너 런타임 구성 

Firecracker

- AWS에서 개발한 경량 microVM(마이크로 가상머신)을 위한  VMM

장점: 보안 고성능, 운영환경 적용, 낮은 오버헤드, 오픈소스

 

Kata Containers

- 쿠버네티스에서 다양한 컨테이너 런타임을 사용할 수 있도록 하는 플러그인 인터페이스 

 

 

 

728x90
반응형

댓글