SERVER/Kubernetes

쿠버네티스 기본

lovineff 2020. 11. 13. 11:42

쿠버네티스(kubernetes)란?

쿠버네티스는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼

2014년 구글 내부에서 사용하던 컨테이너 오케스트레이션 시스템 보그를 오픈 소스로 공개한것

명칭의 유래는 키잡이(helmsman)이나 파일럿을 뜻하는 그리스어

k와 s사이의 글자가 8개라 줄여서 k8s라고 쓰임

 

컨테이너(container)란?

가상머신(virtual machines)

VM은 기본적으로 컴퓨터의 에뮬레이션으로 프로그램을 실제 컴퓨터처럼 실행

내부에서 보면 게스트 머신은 자신만의 자원을 할당 받은 독립된 유닛처럼 동작하나, 외주의 시점에서 보면 결국 호스트 머신의 자원을 다른 VM들과 공유하는 또 하나의 VM임을 알 수 있음

VM은 가상 하드웨어, 커널(OS 등) 그리고 유저 공간을 포함

컨테이너(container)

하드웨어의 가상화를 제공하는 VM과는 달리, 컨테이너는 유저 공간의 추상화를 통해 운영체제 레벨의 가상화를 제공

컨테이너도 VM과 흡사해보이나 가장 중요한 차이점은 호스트 시스템의 커널을 다른 컨테이너들과 공유한다는 점 

VM vs Container

컨테이너는 하이퍼바이저와 게스트 os가 필요하지 않아 용량이 작음

컨테이너는 운영체제 부팅이 필요하지 않으므로 서비스 시작 시간이 짦음

용량이 작으므로 복제, 배포도 용이

 

마스터 노드(master node) / 워커 노드(worker node)

마스터 노드

클러스터 전체를 관리하는 노드

워커 노드

컨테이너가 실제 배포 되는 노드

 

오브젝트와 컨트롤러

쿠버네티스는 크게 오브젝트와 오브젝트를 관리하는 컨트롤러로 나뉨

사용자는 템플릿 등으로 쿠버네티스에 자원의 바라는 상태를 정의하고 컨트롤러는 바라는 상태 현재 상태가 일치하도록 오브젝트들을 생성/삭제

 

오브젝트 종류

파드(pod)

쿠버네티스에서 배포할 수 있는 가장 작은 단위

한개 이상의 컨테이너와 스토리지, 네트워크 속성을 가짐

서비스(service)

파드의 경우에 지정되는 Ip가 랜덤하게 지정이 되고 리스타트 때마다 변하기 때문에 고정된 엔드포인트로 호출이 어렵기 때문에 파드간의 로드밸런싱을 지원해줘야 하는데 서비스가 이런한 역할을 함

파드를 외부 네트워크와 연결해주고 여러개의 파드를 바라보는 내부 로드 밸런서를 생성할 때 사용

볼륨(volume)

저장소와 관련된 오브젝트

네임스페이스(namespace)

쿠버네티스 클러스터 하나를 여러 개 논리적인 단위로 나눠서 사용하는 것

클러스터 안에서 용도에 따라 실행해야 하는 앱을 구분할 때도 네임스페이스를 사용

네임스페이스별로 자원 사용량 쿼터 설정을 통해서 사용량 제한 가능

 

컨트롤러 종류

레플리카셋(replicaSet)

파드를 관리해주는 역할을 하는데 지정된 숫자로 파드를 기동 시키고, 관리해줌

디플로이먼트(deployment)

레플리카셋의 좀 더 상위 추상화 개념

파드 배포를 위해 레플리카셋을 생성 관리하는 역할

스테이트풀셋(statefulSet)

레플리카셋과 유사

차이점은 파드의 순차적인 배포 및 삭제 또는 스케쥴링이 가능

데몬세트(daemonSet)

Pod가 각각의 노드에서 하나씩만 돌게 하는 형태로 파드 관린

서버의 모니터링이나 로그 수집 용도로 많이 사용

잡(job)

일종의 배치성 파드에 사용

 

인그레스(ingress)

클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함

인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공

'SERVER > Kubernetes' 카테고리의 다른 글

쿠버네티스 명령어  (0) 2020.11.13
쿠버네티스 파일 작성 방법  (0) 2020.11.13