[클라우드/Docker 기본(0) - 클라우드와 도커의 시작]

SooYeon Yeon·2022년 8월 30일
0

클라우드 Docker

목록 보기
1/24

클라우드

클라우드 = 남아도는 자원을 외부에 제공(그리드 컴퓨팅) + 과금 시스템(유틸리티 컴퓨팅, 전기세)

클라우드 → 사설 클라우드(openstack, cloudstack, vmware) vs 퍼블릭(공인) 클라우드

클라우드(aws,azure,gcp)

  • on-demand : 주문 즉시 사용가능
  • 인터넷 접속이 가능하다면 위치에 상관없이 24시간 온라인을 유지할 수 있다.(서비스 이용가능)
  • 탄력성(늘리고 줄이고 가능) / 확장성 : “auto scale”을 통해 탄력적으로 서비스의 확장과 축소가 가능하다. 예) 인스턴스의 대수를 2대에서 4로 늘리는 것, 디스크의 용량을 10GB에서 20GB로 늘리는 것. → 수평적으로 늘리는 것 / 수직적으로 늘리는 것. 일반적으로 클라우드에서 탄력적/확장성을 얘기할 때는 scale out을 지정한다. 특정 상황이 되면 자동으로 스케일로 확장하도록 설정할 수 있다.(오토 스케일링)
  • 자원 관리를 풀에 담아서 일괄적으로 처리할 수 있다.
  • 자원 사용의 모니터링이 가능해야한다. 이는 과금 서비스와 연계하여 사용할 수 있다.
  • 24시간 온라인을 유지할 수 있는 애플리케이션(예전에는 downtime이 많았다.) : 가상머신 등의 지역간 이동을 통해 구현가능하게 됨

가상화

서버 가상화 : KVM과 같은 하이퍼바이저를 이용해 가상서버형태로 서버를 제공하는 방법

스토리지 가상화 : 적은 양의 스토리지를 묶어 하나의 큰 자원 풀로 활용하는 것

네트워크 가상화 : vlan, vxlan, vpc(virtual private cloud), vrf(virtual routing forwarding)-각 고객사별로 별도의 라우팅 테이블을 제공하는 것

프로비저닝과 배포

프로비저닝(provisoning) : 시스템을 즉시 사용할 수 있는 준비 상태로 대기하는 것

만약, 가상서버10대, 네트워크 준비, 볼륨 준비 등을 일일이 처리한다면 이는 오랜시간이 걸릴 것이다. 이를 일괄적으로 처리할 수 있는 프로비저닝 도구가 있다. 대표적으로 앤서블, 셰프, 베이그런트, 퍼핏 등이 있다. 과거에는 일일이 명령으로 통해 구현했다면, 프로비저닝 도구를 일반적으로 코드를 이용하여 배포한다.

배포(Deployment) : 애플리케이션을 즉시 사용할 수 있는 준비 상태로 대기하는 것

오케스트레이션 : 시스템 또는 애플리케이션의 묶음을 일괄적으로 배포/프로비전 할 수 있으며 이를 회수 하는 것. 일반적으로는 애플리케이션/컨테이너의 관리에 주로 사용하는 용어이며 특히 컨테이너와 관련하여 대표적인 오케스트레이션 도구로는 “쿠버네티스”가 있다.

클라우드의 구분

IaaS

  • 서버/네트워크/방화벽과 같이 서비스 제공을 위한 인프라 환경을 제공하는 것
  • openstack, ec2, kvm을 인스턴스 형태로 제공

PaaS

  • 개발환경(데이터베이스, 개발 언어, IDLE 등을 동일한 버전 등으로 제공할 수 있다.)

SaaS

  • 소프트웨어 제공

클라우드 컴퓨팅 제공 방식

온프레미스 : 클라우드와 달리 자체 데이터 센터를 운영하는 것. 자체 솔루션 등을 적용할 수 있어 보안상, 효율성 면에서는 우수하수 할 수 있다. 단, 현재는 온프레미스 환경에서 이를 클라우드로 전환하는 케이스가 늘고 있다. → 사설 클라우드로 변환

사설클라우드 : 대기업/금융권 등의 서버를 자체 데이터센터에서 클라우드를 구축하고 이를 활용하는 방법

Bare Metal vs 가상머신 vs 컨테이너

베어메탈

  • 애플리케이션이 OS 위에 직접 배포

가상머신

  • 하이퍼바이저를 이용해 가상서버를 구축하고 해당 서버 위에 애플리케이션이 배치되는 형태로 가상머신은 각자의 커널을 가짐
  • 실제로 애플리케이션이 동작하기 위해서는 Guest OS → 커널 → 하이퍼바이저 → 커널 → 물리자원을 거쳐야하므로 성능 저하 발생

컨테이너

  • 도커 엔진 : 도커에서 이미지와 컨테이너를 관리하는 도구이며, 도커의 핵심
  • 컨테이너는 자신이 속한 OS의 커널을 직접 사용하므로 성능저하가 거의 없다.

사용자 입장에서는 자신이 이용하는 애플리케이션이 가상머신에서 또는 컨테이너에서 동작하는 것은 관심 대상이 아니다. 이용자는 빠른 처리속도만을 요구한다. 최근에는 대부분의 애플리케이션이 잦은 I/O를 요구하므로 컨테이너를 이용하는 경향이 많다.

따라서 성능 저하가 없으면서도 배포가 용이하고 스케일 등의 적용이 쉬운 컨테이너를 이용하는 것이 이용자를 위해서 유리하다

namespace

컨테이너는 가상머신처럼 물리적 자원을 격리시키는 것이 아니라 프로세스를 격리시킬 수 있다.

ps -ef | grep httpd

httpd가 설치된 상태에서 추가적으로 httpd를 설치하여 운영할 수 있는가?

도커는 리눅스에서 사용하던 기술인 namespace, cgroup을 이용하여 개발되었다.

도커의 namespace는 아래와 같은 리눅스의 네임스페이스를 차용하여 만들었다.

  1. user namespace : 사용자 또는 그룹별로 격리
  2. UTS(unix time-sharing) namespace : 응용 프로그램 입장에서 호스트명과 도메인에 대한 분리된 가시성을 제공
  3. 마운트 네임스페이스 : 프로세스에서 마운트된 파일시스템에 대한 가시성을 제공하기 위해 자신만의 마운트 네임스페이스 사용할 수 있다. (각각의 컨테이너에서 별도의 호스트 디렉토리를 마운트 할 수 있다.)
  4. PID네임 스페이스 : Process ID는 호스트 상의 다른 응용프로그램으로부터 격리될 수 있다. 이를 통해 동일한 애플리케이션이 동시에 2개 이상 동작하는 것도 가능하다.
  5. 네트워크 네임스페이스 : 네트워크 인터페이스, 라우팅 테이블 등에 대한 격리 가능하다.

CI/CD

  • 기존에는 코드의 변경사항을 일괄적으로 모아 한꺼번에 서버에 올리는 형식이었다면, 이제는 각 개발자가 자신이 담당하는 코드를 github/gitlab에 push 하면 이를 감지한 CD가 컨테이너에 이를 실시간(비정기적,정기적(cron))으로 이를 컨테이너에 반영한다.
  • gitlab은 설치형으로도 제공됨

쿠버네티스는 컨테이너를 생성하는 runtime(containerd, cri-o, podman…)이 아님. 쿠버네티스는 조율하는 것

쿠버네티스와 달리 runtime으로 도커만을 사용하는 오케스트레이션 툴도 있다. ⇒ swarm

0개의 댓글