목차 |
---|
...
1. Container 란
보통 IT인이 아니라고 한다면 아니라면 ‘컨테이너’ 라는 말을 듣는다면 말에 다음의 그림을 상상하실 겁니다.
...
...
Container
사전적 의미로 컨테이너는 어떤 물체를 격리하는 공간을 뜻합니다. 하지만 우리에게 컨테이너는 어떤 의미일까요?
...
컨테이너는 OS의 기능을 활용하여 프로세스를 격리하고, 격리된 프로세스가 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해줍니다.
컨테이너는 격리된 프로세스 형태로 실행되므로 환경에 상관없이 빠르고 안정적이며 일관된 배포를 보장합니다.
VM
VM은 하이퍼바이저라는 가상화 소프트웨어 계층을 사용하여 하드웨어를 가상화하고, 각 VM을 서로 분리하여 상호작용할 수 있는 가상 컴퓨팅 환경을 구축하는 기술입니다.
VM에는 애플리케이션, 관련 라이브러리 및 종속 항목과 함께 게스트 OS가 포함됩니다.
...
Container와 VM 비교
가상 환경에 익숙하다면 컨테이너를 가상 머신(VM)에 비교하여 생각하면 이해하기 쉽습니다.
컨테이너는 가상머신과 마찬가지로 애플리케이션을 관련 라이브러리 및 종속 항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 마련해 마련해 줍니다.
Host | 컨테이너 | VM |
---|---|---|
|
|
|
컨테이너를 사용하면 개발자와 IT 운영팀이 훨씬 작은 단위로 업무를 수행할 수 있으므로 그에 따른 이점도 훨씬 많습니다.
컨테이너의 장점
가벼움
탄력성 / 이식성 / 플랫폼 독립성
성능
유지 관리 효율
각각의 장점들에 대해서 한가지씩 보도록 하겠습니다.
(1) 가벼움
사용자의 Request Traffic 이 증가함에 따라, 가상머신이나 컨테이너를 추가적으로 배포합니다.
...
가상머신의 크기는 최소 몇 GB이지만, 컨테이너의 경우 Guest OS가 없기에 MB단위의 크기를 가집니다.
...
가상머신은 배포하는데 수분에서 수 십분의 시간이 소요되지만, 컨테이너는 배포에 소요되는 몇 초 밖에 걸리지 않습니다.
(2) 탄력성 / 이식성 / 플랫폼독립성
...
컨테이너가 모든 종속 항목들을 자신과 함께 전달하므로, OS나 라이브러리 등의 환경 설정이 호스트 운영 체제와 상관없이 동일하게 유지되며, On-premise 및 클라우드 환경에서 이를 재구성하지 않고 바로 실행할 수 있습니다
이런 특성으로 인해, 컨테이너는 Linux, Windows운영체제, 가상머신, 베어메탈, Local pc, Data Center, Public Cloud등 어느 환경 에서나 운영체제 및 기동 장비 상관없이 어느 환경에서나 구동 되므로 개발 및 배포가 크게 쉬워집니다.
(3)성능
리소스 압박이 큰 경우 애플리케이션 사용이 많은 애플리케이션의 성능은 하이퍼바이저를 사용하는 것보다 컨테이너가 훨씬 우수합니다.
...
아래 자료는 2018년도 자료이지만, CPU와 Memory는 성능저하가 거의 없습니다.
컨테이너를 따로 layer로 Layer로 칭하지 않는 이유이기도 합니다.
...
(4) 유지 관리 효율
...
운영 체제 커널이 하나밖에 없기 때문에 운영 체제 수준에서 업데이트 또는 패치 작업을 한 번만 수행하면 변경 사항이 모든 컨테이너에 적용됩니다.
이를 통해 서버를 더 효율적으로 운영하고 유지 관리할 수 있습니다.
(5) 활용도 향상
컨테이너를 사용하여 개발자와 운영자는 CPU 및 메모리 리소스 활용도를 향상시킬 수 있습니다.
컨테이너는 마이크로서비스 아키텍처도 허용하므로 애플리케이션의 구성을 보다 미세하게 배치 및 스케일링할 수 있습니다.
(6) 보안
컨테이너는 격리된 환경에서 실행되기 때문에, 한 컨테이너에서 발생한 보안 문제가 다른 컨테이너나 호스트 운영체제에 영향을 미치지 않습니다.
2. Docker
도커(Docker)는 개발자와 시스템 관리자가 컨테이너로 애플리케이션을 개발, 배포 및 실행할 수 있는 플랫폼입니다.
이를 컨테이너화(containerization)라고 부르기도 합니다.
도커에 대해 알아보기 전에 도커의 아키텍처에 대해 먼저 설명드리겠습니다.
다음과 같은 형태로 도커가 실행이 되는데 이를 좀더 들여다 보면 아래와 같습니다.
...
도커안에는 여러 컴포넌트들이 있지만 크게 3가지로 나누어 보겠습니다.
...
도커 주요 컴포넌트
docker engine
여러분 모두가 아는 그 엔진, 이 엔진containerd / dockerd /cri-o
container 런타임runc
Open Container Initiative (OCI) 규격에 맞게 컨테이너를 실행하고 생성하는 CLI 도구
...
정보 |
---|
|
낮은 수준의 컨테이너 런타임
하위 컨테이너 런타임의 주요 작업은 컨테이너를 생성하고 삭제하는 것입니다.
...
정보 |
---|
다음과 같은 기능을 제공합니다.
|
...
Docker의 등장
사용자가 컨테이너와 더 쉽게 소통할 수 있도록 컨테이너 관리라는 관리하는 새로운 도구가 탄생했는데, 도커도 그 중 하나입니다.
정보 |
---|
|
OCI (Open Container Initiative)는?
컨테이너 포맷과 런타임에 대한 개방형 업계 표준을 만들기 위한
...
목적으로 Linux Foundation 의 지원으로 구성된 오픈 거버넌스 조직 (프로젝트)입니다.
OCI는 2015년 6월 22일에 Docker 사와 CoreOS 사가 각각 별도로 표준화를 진행하고 있던 컨테이너의 규격을 통일하는 것을
...
목적으로 Docker, CoreOS 그리고 AWS, Google, Microsoft, IBM 등 주요 플랫폼 벤더가 참여하여 2015 년 6 월에 발족 한
...
단체입니다.
즉, OCI 는 => 컨테이너 규격을 통일하는 것을 목적으로 만들어진 조직
도커를
...
이용한 앱 개발
...
간략하게 설명드리자면개발 순서
코드개발
Dockerfile 생성
Dockerfile Image 생성
Container Orchestrator를 통한 배포
Container run
Container image Push
의 순서로 작동을 하게 됩니다.
여기에서 중요한 점은 코드를 이미지화 하며 배포한다는 점입니다.
잠깐! Oh wait!!
이미지화를 하면 어떤점이 좋을까요?
예를 들어 신규 애플리케이션을 만든다고 가정했을 시 일단 인프라 환경을 먼저 구축할것입니다.
...
서버도 만들어야하고 데이터를 저장할 데이터베이스도 만들어야겠죠…
코드 블럭 |
---|
요즘 그래도 CLOUD 환경이 많기에 클릭클릭클릭 만 해주면 예전에 비해 구축법이 많이 간편해 졌습니다!!
(클라우드 짱짱!)
하.지.만! 서버환경이 조금 씩 다른 서버 수십대를 생성하려면....? |
...
이 또한 매우 반복되는 작업일 것입니다…
이렇게 반복되는 과정속에 ‘필요한것은 미리 만들어 놓자!’ 라는 아이디어가 나오게 되고
서서히 이미지화를 하게 됩니다.
IMAGE
...
AWS에서는 AMI(Amazon Machine Image)형태로 이미지를 관리하고
Docker에서는 Docker Image 형태로 이미지를 관리합니다,
...
→ 보통 생성된 이미지를 통해 OS를 실행하게 되고,
...
→ 실행된 OS에서 이것저것 요청에 따라 설정사항들을 변경하고, 이를 토대로 다시 이미지를 재 생성하게 됩니다.
하. 지. 만.
시간이 서서히 지나면서 이미지가 쌓이게 되면서
...
뭐가 변경된 건지 알수가 없습니다… ( 저만 그런가요ㅜㅜ? )
...
그래서
...
이미 다양한 코드화를 위한 도구들이 존재합니다.
...
오늘의 주인공 도커는 도커 파일 로 코드들을 관리하고 있습니다.
...
위와같은 전반적인 흐름으로 도커가 실행되고 있습니다.
여기에서! 도커이미지를 Docker Hub같은 Registry에 업로드 할때 PUSH라는 명령어를 쓰고
각 서버에서 이미지를 다운받을 때 이미지를 떙겨온다 해서 PULL이라는 명령어를 씁니다!
출처
1. 컨테이너 이해
1.1 컨테이너란?
컨테이너는 기존의 On-premise 또는 클라우드 환경 등 어디서나 실행될 수 있도록 애플리케이션 코드가 해당 라이브러리 및 종속 항목을 포함하는 독립적으로 실행 가능한 소프트웨어 패키지 입니다.
컨테이너는 OS의 기능을 활용하여 프로세스를 격리하고, 격리된 프로세스가 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해줍니다.
컨테이너는 격리된 프로세스 형태로 실행되므로 환경에 상관 없이 빠르고 안정적이며 일관된 배포를 보장합니다.
1.2 VM(Virtual Machine)
...
VM 은 하이퍼바이저라는 가상화 소프트웨어 계층을 사용하여 하드웨어를 가상화 하고, 각각의 VM을 서로 분리하여 상호작용 할 수 있는 가상 컴퓨팅 환경을 구축하는 기술입니다.
...
...
3
...
경량: 컨테이너는 시스템 OS 커널을 공유함으로써 애플리케이션 마다 OS가 필요하지 않아 크기가 작고 가볍습니다.
가상머신의 크기는 최소 몇 GB이지만, 컨테이너의 경우 Guest OS가 없기 때문에 몇 MB의 크기를 가집니다.
또한, 가상머신의 경우 배포하는데 수분에서 수십분이 소요되지만, 컨테이너는 배포하는데 단 몇 초 밖에 걸리지 않습니다.
이식성 및 플랫폼 독립성: 컨테이너가 모든 종속 항목들을 자신과 함께 전달하므로, OS나 라이브러리 등의 환경 설정이 호스트 운영 체제와 상관없이 동일하게 유지되며, On-premise 및 클라우드 환경에서 이를 재구성하지 않고 바로 실행할 수 있습니다.
유지관리 효율: 컨테이너는 OS 커널을 공유하기 때문에 OS 수준에서 업데이트 또는 패치 작업을 한 번만 수행하면 변경 사항이 모든 컨테이너의 적용됩니다. 덕분에 서버를 더 효율적으로 운영/관리할 수 있습니다.
활용도 향상: 컨테이너를 사용하여 개발자와 운영자는 CPU 및 메모리 리소스 활용도를 향상시킬 수 있습니다.
컨테이너는 마이크로서비스 아키텍처도 허용하므로 애플리케이션의 구성을 보다 미세하게 배치 및 스케일링할 수 있습니다.
보안성: 컨테이너는 격리된 환경에서 실행되기 때문에, 한 컨테이너에서 발생한 보안 문제가 다른 컨테이너나 호스트 운영체제에 영향을 미치지 않습니다.
2. 컨테이너 소개
2.1 컨테이너 Runtime
...
.
...
컨테이너
...
저수준 Runtime
namespace와 cgroup을 이용해서 컨테이너 자체를 만드는 일을 합니다.
이미지로부터 컨테이너를 실행하는 기능은 없습니다.
대표적인 예시: runc
고수준 Runtime
저수준 Runtime 위에 배치되어 이미지로부터 컨테이너를 실행할 수 있습니다.
대표적인 예시: Containerd, cri-o
...
docker
docker의 경우, docker-cotainerd라는 고수준 Runtime과 docker-runc라는 저수준 Runtime을 이용해서 제공하고 있습니다.
2.2 컨테이너 Orchestration
...
Orchestration
Container Orchestration은 애플리케이션을 구성하고 있는 수십 또는 수백 개의 컨테이너와 호스트들을 배포하고 관리하기 위한 도구입니다.
...
컨테이너 프로비저닝 및 배포
컨테이너 구성 및 스케쥴링 조정
컨테이너 상태 모니터링 및 장애 복구
컨테이너 추가 또는 제거로 확장 및 축소
실행될 컨테이너를 기반으로 애플리케이션 설정
컨테이너 간 상호 작용의 보안 유지
3. 쿠버네티스 소개
...
...
4. 쿠버네티스
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 오케스트레이션 도구 입니다도구입니다.
...
4.
...
1 쿠버네티스를 구성하는 3가지 방법
...
(1) 관리형 쿠버네티스
...
퍼블릭 클라우드 업체에서 제공하는 관리형 쿠버네티스
구성이 이미 갖춰져 있고 마스터 노드는 클라우드 업체에서 관리합니다.
사용자는 필요한 부분들을 애플리케이션에 올려놓고 애플리케이션을 배포하여 사용하는 형태
예시: EKS(Amazon Elastic Kubernetes Service), AKS(Azure Kubernetes Service), GKE(Google Kubernetes Service)
...
(2
...
) 설치형 쿠버네티스
...
SUSE, Redhat와 같은 플랫폼에서 패키지화된 쿠버네티스를 제공하는 설치형 쿠버네티스
직접 설치할 수 있도록 패키지화된 쿠버네티스를 제공합니다.
예시: Rancher, RedHat OpenShift
(3
...
) 구성형 쿠버네티스
...
사용하는 시스템에 쿠버네티스 클러스터를 자동으로 구성해주는 구성형 쿠버네티스
관리형/설치형 쿠버네티스 보다 자유롭게 구성 가능합니다.
예시: kubeadm, kops(Kubernetes operations), KRIB(Kubernetes Rebar Integrated Bootstrap), Kuberspray
...
4.
...
2 쿠버네티스에서 제공하는 기능
(1)서비스 디스커버리와 로드밸런싱
쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있습니다.
트래픽이 많아지면, 자동으로 네트워크 트래픽을 로드밸런싱하여 배포가 안정적으로 이루어질 수 있도록 합니다.
스토리지 오케스트레이션
로컬 저장소, 공용 클라우드 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있습니다.
자동화된 롤아웃과 롤백
롤아웃: 새로운 버전의 애플리케이션을 배포할 때, 이전 버전과 새로운 버전을 비교하여 설정한 속도에 따라 변경(전환) 할 수 있습니다.
롤백: 배포 중 문제가 발생하거나, 이전 버전으로 되돌아가야할 때, 롤백을 지원합니다.
롤아웃과 롤백은 이벤트 로그를 자동으로 기록하며, 추적이 가능합니다. 하여 이를 통해 배포 이력을 관리 할 수 있습니다.
자동화된 빈 패킹
컨테이너화된 작업을 실행하는데 사용할 수 있는 클러스터 노드를 제공합니다.
시크릿과 구성 관리
시크릿된 정보들은 암호화되어 저장됩니다.
시크릿과 애플리케이션 구성을 안전하게 배포하고 업데이트할 수 있습니다.
자동화된 복구
오류가 발생하거나 노드가 죽었다면, 컨테이너를 재시작하고 다시 스케쥴링합니다스케줄링합니다.
배치 실행
배치(일괄적으로 모아서 한 번에 처리하는 것) 단위의 작업을 실행할 수 있도록 하며, 주기적인 배치 작업도 실행할 수 있습니다.
Auto Scailing
CPU 사용률이나 애플리케이션이 제공하는 Metric을 모니터링하여 애플리케이션에서 실행되는 인스턴스의 수를 조정할 수 있습니다.
CPU 사용율을 기반(HPA, horizontal Pod Autoscaling)으로 인스턴스 수를 자동 조절 할 수 있으며, POD의 CPU와 메모리 사용량 기반(VPA, Vertical Pod Autoscaling)으로 인스턴스를 조정할 수 있습니다.
...