728x90

들어가며


프로젝트의 규모가 방대해지면서, 개발팀과 운영팀으로 나뉘어 진행하기도 하며 인수인계 등의 여러 과정에서는 특정 버전을 설치하고 환경을 세팅하는 일에 많은 시간이 소요되곤 했었다. 그러나 도커를 이용하면 이와 같은 문제가 해결된다. 

도커 컨테이너와 이미지란?


 

 

컨테이너란 어플리케이션과 그에 필요한 모든종속성, 즉 코드, 라이브러리, 리소스 등을 포함하여 어디서든 실행이 가능한 상태로 패키징하기 위한 하나의 단위이다.

 

이미지란 어플리케이션을 실행하기 위해 필요한 모든 환경 시스템을 포함한 템플릿이다.

 

일반적으로 서비스를 도커파일을 통해 이미지로 빌드하고, 빌드한 이미지를 컨테이너로 실행한다. 

 

 

사용자는 클라이언트를 통해 도커 데몬과 통신하여 컨테이너의 생성, 실행, 빌드 등을 요청하고 결과를 받는다.

도커 데몬은 도커 API를 통해 클라이언트 요청을 처리하는데 컨테이너의 실행과 관리를 담당한다.

도커 레지스트리는 이미지 저장소로 직접 이미지를 관리할 수 있다.

 

 

 

도커는 위 그림과 같이 레지스트리에 등록된 이미지를 pull 해서 다운받아 사용한다.
다운받은 이미지를 run 명령어를 통해 실행하면 컨테이너가 생성된다.
컨테이너의 이름 --name, 컨테이너 포트 -p 등의 명령어를 통해 지정할 수 있다.
실행되고 있는 컨테이너는 ps를 통해 확인이 가능하며, exec를 통해 내부에 접속할 수도 있다.

 

 

 

'Docker, K8S, AWS' 카테고리의 다른 글

Kubernetes 쿠버네티스란?  (0) 2023.12.12
728x90

들어가며,


 

요즘 어플리케이션이 복잡해지면서 도커를 통해 컨테이너 단위 묶어 다루는 환경을 구성한다.

컨테이너는 쉽게 어디서든 어플리케이션을 실행할 수 있도록 패키징하는 기술이며, 이러한 컨테이너를 다루는 도구가 도커와 쿠버네티스다.

 

도커에서 생성한 컨테이너를 배포, 확장, 관리하기 위해 오케스트레이션 플랫폼을 이용하는데, 오픈 소스이면서 확장성이 좋아 K8s는 현재 표준이 되었다.

어플리케이션 배포 환경의 변화


 

전통적인 배포 시대

  • 물리적인 서버 위에 어플리케이션을 돌리다 보니 여러 어플리키이션의 리소스 한계를 겪음.

가상화된 배포 시대

  • 가상화 VM을 통해 VM간의 어플리케이션을 격리하여 하드웨어 자원을 효율적으로 활용.
  • OS위에 놓인 하이퍼바이저는 하나의 시스템 상에서 여러 개의 VM을 구동할 수 있도록 동작한다.
  • 다시 VM에는 OS, Bin/Library 등의 환경을 놓고 여러 개의 App을 구동한다.
  • 다만, VM역시 완전한 컴퓨터이기 때문에 OS를 설치해야 하며, 컨테이너 중심에 비해 무겁다는 단점.

컨테이너 개발 시대

  • Container Runtime을 통해 VM기반에서의 단점을 해결한다.
  • 별도의 OS를 설치할 필요없이 OS를 컨테이너 간의 공유 방식으로 동작하되, 전통 방식과 달리 컨테이너 별로 리소스 할당량을 나누었기 때문에 자원을 효율적으로 사용할 수 있게 된다.
  • 다만, OS에 문제가 발생하면 전체 컨테이너에 영향을 준다는 단점이 있다. 

 

 

쿠버네티스 클러스터의 구성


쿠버네티스 클러스터는 여러 노드를 가지고 있어 동시에 파드를 처리할 수 있다.

또한, 컨트롤 플레인에서 모든 Pod를 조율하여 각 노드에게 전달하므로 효율적으로 운영된다. 만약 하나의 노드에 문제가 생겨도 다른 노드가 역할을 대신 수행하여 계속해서 서비스를 제공할 수 있다.

컨프롤 플레인 

  • kube-apiserver : API를 노출하는 컴포넌트
  • etcd : 클러스터의 데이터를 담는 저장소
  • kube-scheduler : Pod를 감지하고 노드를 선택 
  • kube-controller-manager : 컨트롤러 프로세스를 실행하는 컴포넌트
    • 노드 컨트롤러: 노드가 다운되었을 때 통지와 대응에 관한 책임을 가진다.
    • 잡 컨트롤러: 일회성 작업을 나타내는 잡 오브젝트를 감시한 다음, 해당 작업을 완료할 때까지 동작하는 파드를 생성한다.
    • 엔드포인트슬라이스 컨트롤러: (서비스와 파드 사이의 연결고리를 제공하기 위해) 엔드포인트슬라이스(EndpointSlice) 오브젝트를 채운다
    • 서비스어카운트 컨트롤러: 새로운 네임스페이스에 대한 기본 서비스어카운트(ServiceAccount)를 생성한다.
  • cloud-controller-manager : 클라우드 별로 클러스터를 클라우드 API에 연결하고, (클라우드용, 클러스터용) 컴포넌트를 구분한다.

워커 노드 

  • kubelet : API서버와 통신하여 할당된 Pod에서 컨테이너가 확실하게 동작할 수 있도록 Pod를 실행하고 유지.
  • kube-proxy : 클러스터 내의 서비스와 파드의 네트워크 정보를 기록하고 이 정보를 참조해 통신을 돕는다.
  • 컨테이너 런타임 : 실제 컨테이너를 실행하는 도구 ex) 도
  •  

 

 

'Docker, K8S, AWS' 카테고리의 다른 글

Docker 도커란? 도커 이미지 사용 방법  (1) 2024.01.23

+ Recent posts