티스토리 뷰

반응형

쿠버네틱스는 컨테이너를 다루는 기술이다.

 

컨테이너 - OS 가상화 기술이다.

프로세스를 격리하며, 리눅스 커널을 공유한다.

 

컨테이너 안에다가 원하는 어플리케이션(웹 서버, DB) 등을 설치해서 사용할 수 있다.

 

가상 머신은 하이퍼바이저 위에 Guest OS가 나눠지고, 각 Guest OS 위에 앱이 올라가는 반면,

컨테이너는 OS 위에 container Engine이 올라가고, 그 위에 앱들이 나눠져서 올라간다.

 

가상머신

게스트 OS - Windows, Linux 등 다양하게 선택

시작시간 - 길다(몇 분)

이미지 사이즈 - 크다(수 GB ~ 수백 GB)

환경관리 - 각 VM마다 OS 패치가 필요

데이터 관리 - VM 내부 또는 연결된 스토리지에 저장

 

컨테이너

게스트 OS - 없다.

시작시간 -짧다(몇 초)

이미지 사이즈 - 작다( ~수백 MB)

환경관리 - 호스트 OS만 패치

데이터 관리 - 컨테이너 내부의 데이터는 컨테이너 종료시 소멸.

필요시 스토리지를 이용하여 저장

 

모놀리식 구성 - 고용량 고성능의 단일 서버로 구성

한 곳에서 장애가 일어나면, 해당 장애가 퍼져나간다.

게다가 가격적으로도 비싸다.

 

마이크로 서비스 구성(MSA) - 모놀리식 구성과 비교하여 작은 서버들의 집합체로 구성된다.

MSA라는 환경에 가장 빠르게 적용할 수 있는 게 컨테이너이다.

속도도 빠르고, 트렌드에도 맞는다.

 

그래서 많은 기업에서 이제 물리적인 하드웨어도 작은 서버들로 바꿔나가고 있다.

Docker

컨테이너 엔진 (컨테이너를 실행하고 관리하는 도구)

컨테이너 기반의 오픈소스 가상화 플랫폼

도커허브라는 공개된 저장소 서버를 통해 컨테이너 자료들을 관리한다.

 

컨테이너 엔진으로서의 표준이다.

 

다운로드 이미지(os를 까는 이미지와 같은 개념)가 도커허브에 정말 많다.

 

Dockerfile

하나의 PC에 OS 설치하고, 어플 설치,

해당하는 이미지를 커스터마이징해서 쓸 수 있는데, 그 때 필요한 게 Dockerfile이다.

Costom windows = 템플릿을 따로 찍어서 윈도우를 만들 수 있다.

 

컨테이너 이미지를 생성(custom)하기 위한 레시피 파일

파일에 이미지 생성과정을 문법에 따라 작성하여 저장

From, workdir, run, cmd 등 용도에 따른 명령어 모음

FROM ubuntu:18.04
RUN apt-get update && apt-get install -y vim apache2
COPY index.html /var/www/html/
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

/var/www/html 밑에 있는 index.html에 해당하는 파일을 만든다.

 

Docker Image

서비스 운영에 필요한 프로그램, 소스 코드, 라이브러리 등을 묶는 형태

도커 이미지는 Dockrfile을 사용하여 커스텀 생성(Build)

도커 이미지를 사용하여 다수의 Container를 실항(Run)

 

컨테이너를 붕어빵이라고 하면, image라는 틀이 필요하다.

밀가루 같은 재료는 리소스이다.

Dockerfile은 해당 틀을 만들어내는 설계도이다.

 

Docker Image Nameing Rule

docker 이미지 빌드 명령

docker build -t <Namespace>/<ImageName>:<tag>

여기서의 namespace는, 해당 이미지가 저장된 저장소 주소이다.

ImageName

tag에는 해당 이미지의 버전을 게시한다.

 

예시)

docker.io/library/nginx:latest

이미지 이름 왼쪽까지가 anmespace 이므로, docker.io/library가 namespace 주소이다.

docker hub의 주소이다.

ImageName이 nginx,

 

nginx:latest - 최신 버전인데, namespace가 아무것도 없다.

없으면 저장소가 자동으로 docker hub가 되도록 약속이 된다.

 

nginx

아무것도 없이 이미지 이름만 덩그러니 있다.

tag가 없으면 latest로 약속된다.

 

결론적으로는 위의 3개가 모두 다 같은 명령어이다.

 

FROM ubuntu:18.04
#도커허브에 저장된 우분투 이미지의 18.04 버전

RUN apt-get update && apt-get install -y vim apache2
COPY index.html /var/www/html/
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

 

Docker Private Image

private 이미지 저장소를 구축, 이미지 관리 시

<Namespace>에 해당 서버주소 및 포트번호 등으로 사용

k8sedu.com:3000/mywebserver:latest
k8sedu.com:3001/mydbserver:v1

 

해당하는 도커 허브의 url과 서

수많은 컨테이너 이미지들을 서버에 저장하고 관리
공개 이미지를 무료로 관리

https://hub.docker.com/

 

 

Docker 간단 명령

image가 있을 때 run 하면 실행

도커 허브에서 push 또는 pull도 image를 가져올 수 있다.

또 도커 파일을 build하면 image가 만들어진다.

 

컨테이너 오케스트레이션

여러 페이지마다 수만개의 서버들로 구성되어 있는데, 그 많은 컨테이너를 관리하기 쉽지 않다.

 

다수의 컨테이너를, 다수의 시스템에서, 각각의 목적에 따라, 배포/복제/장애복구 등 

총괄적으로 관리

필요시 복제를 해야 하고, 장애복구를 해야 한다.

하모니를 이뤄내기 위한 지휘하는 도구

 

컨테이너 오케스트레이션 도구들의 일반적 기능

-스케줄링

-자동확장 및 축소 - 리소스의 효율적 배분

-장애복구 

-로깅 및 모니터링 - 시스템이기 때문에 가능해야 한다.

-검색 및 통신 - 어떤 컨테이너인지 검색하고, 잘하고 있는지를 확인

-업데이트 및 롤백 - 유지보수 가능

 

컨테이너 오케스트레이터

컨테이너 오케스트레이션을 해주는 도구

컨테이너 오케스트레이터의 종류

–Kubernetes
–Docker Swarm
–AWS ECS
–Azure Container Instance
–Azure Service Fabric
–Marathon
–Nomad

 

쿠버네티스가 아래 것들을 거의 누르고 상위권을 차지하고 있다.

 

컨테이너 오케스트레이터의 배포위치

베어 메탈

가상 머신

온프레미스

클라우드

 

쿠버네티스

그리스어로 선박 조종사라는 의미

쿠버네티스 - 컨테이너형 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈 소스 시스템

k와 s 사이 8글자 = 케이츠라고도 부른다.

 

쿠버네티스를 사용하는 이유

  • 높은 확장성, 원활한 이동성(이식성)
  • 퍼블릭/프라이빗/하이브리드/멀티 클라우드,
  • 로컬 또는 원격 가상 머신, 베어메탈과 같은 여러 환경에 구축 가능
  • 오픈 소스 도구의 장점
  • 플러그가 가능한 모듈 형식

 

CNCF(Cloud Native Computing Foundation)

클라우드 네이티브 오픈소스 기술들을 추친하고 관리하는 단체

대표적으로 쿠버네티스와 prometheus 오픈소스 도구

 

Kubernetes 아키텍쳐

쿠버네티스는 설치를 하면, 클러스터를 할당받게 된다.

 

클러스터는 Master node와 worker node를 묶어준다.

 

이때 node는 피지컬 머신일수도, 가상 노드일 수도 있다.

해당 노드에 마스터 역할과 워커 역할을 주는데, 여기서는 maste node가 1개, worker node가 3개이다.

 

마스터 노드의 또 다른 이름은 control plane이다.

제어를 하는 부서이다.

 

컨테이너를 만들어주고, 컨테이너가 몇개 있는지, 상태가 괜찮은지를 전부 확인한다.

 

마스터 노드는 총 4가지 구성요소로 사용된다.

 

API server - API를 사용할 수 있게 해주는 프로세스

외부에서 사용자가 API 서버에서 컨테이너 5개를 만드라고 명령을 요청하면, 해당 명령을 받아서 누구인지에 대한 식별을 한다.

한마디로 요청을 검증한다.

검증에 통과가 되면, 해당 명령을 다른 컴포넌트 들에게 전달한다.

 

명령을 전달하는 중간 다리 역할을 하게 된다.

 

스케줄러

Pod의 생성 명령이 있을 경우, 어떤 Node에 배포할지 결정

컨테이너는 워커 노드에 배포가 되는데, 5개를 워커 노드에 어떻게 분산시켜야 할 지를 결정한다.

결정만 한다.

 

Controller Managers

클러스터의 상태를 조절하는 컨트롤러들을 생성 및 배포

상태 = 사용자 또는 관리자가 원하는 상태

컨테이너 5개를 만들어달라고 했는데, 5개라는 개수가 유지되게 해달라고 했다고 하면,

사용자가 원하는 상태는 개수의 유지이므로, 개수를 유지하게 하는 컨트롤러가 필요하다.

 

그걸 컨트롤러 매니저가 만들어서 할당을 해준다.

 

etcd

모든 클러스터의 구성 데이터를 저장하는 저장소

 

워커 노드

컨테이너가 배포될 워커머신

워커 노드에는 3가지 구성요소가 있다.

 

Container Runtime

컨테이너를 실행하고, 노드에서 컨테이너 이미지를 관리해준다.

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

-도커 (1.24v 이상의 쿠버네티스에서는 사용 불가능)

-CRI-o

-containerd

-rkt

-rktlet

 

도커를 사용하다 보니까, 쿠버네티스의 연결성이 필요했는데, dockershim으로 연결했었다.

그런데 dockershim이 설치되어 있으면 쿠버네티스가 무거워진다.

그래서 조금 더 가벼워 진 걸 사용하자 해서 나온 게 CRI-O와 containerd이다.

 

해당 2개가 권장이 된다.

 

Kubelet

워커 노드의 팀장

각 Node의 에이전트이다.

 

상위 매니저(API-server)로부터 일(요청)을 받아온다.

 

컨테이너 런타임이 일을 수행하고, 컨테이너 런타임이 일을 잘 수행했는지를 확인하고,

보고를 한다.

 

API 서버는 해당 보고를 받으면, etcd 서버에 일이 잘 되었다고 저장한다.

 

kube-proxy

쿠버네티스 클러스터의 각 노드마다 실행되고 있으면서, 각 노드간의 통신을 담당

 

Addons

Dns, Dashboard,monitoring 등

addons를 설치하는 위치는 워커 노드

 

쿠버네티스 클러스터 배포

All-in-one single node installation

master+etcd는 하나,

worker1과 worker2가 master node에 연결되어 있다.

 

Single-Node etcd, Single-Master and Multi-Worker Installation

master+etcd는 하나,

woker node는 여러개

 

Single-Node etcd, Multi-Master and Multi-Worker Installation

마스터 노드 여러개.

etcd는 하나의 마스터 노드에만 있다.

워커 노드 여러개

 

Multi-Node etcd, Multi-Master and Multi-Worker Installation

마스터 노드+etcd 여러개

워커 노드 여러개

이러면 안전하다.

 

만약 etcd를 하나에만 둬야 한다면, 자주 백업을 해줘야 한다.

 

마스터 하나와 워커 1,2를 

 

kubernetes 설치 도구

kubeadm

kubesparay - ansible이라는 도구를 사용할 수 있어야 한다.

kops

 

쿠버네티스 배포 순서

container runtime 설치

쿠버네티스 설치

master와 worker 연동

 

master와 worker를 연동하기만 하면 된다.

 

user pc에서 cloud9으로 접속한다.

worker1로 접속하고,

master로 접속하고,

woker 2로 접속한다.

 

 

반응형