쿠버네티스(kubernetes)란? 기본 개념부터 알아보자

쿠버네티스란 무엇일까? 이제 막 도커에 익숙해지고 있다 보니 쿠버네티스란 단어가 자주 보인다. 도커와 같은 컨테이너를 자동화해주는 오케스트레이션이라 불리는 쿠버네티스에 대해 간단하게만 기본 개념만 알아보도록 하자.

 

목차

  1. 쿠버네티스(kubernetes)란?
  2. kubernetes 목적
  3. kubernetes 용어
  4. kubernetes 주요 도구
  5. k8s pod
  6. pod 생성 - yaml
  7. pod - replicaset
  8. k8s components
  9. k8s pod 생성 과정

 

위와 같은 목차로 쿠버네티스에 간단한 설명을 하려 하는데요. 정말 많은 부분을 알아야 하지만 대략적인 내용도 모른 체 쿠버네티스를 접하게 된다면 금세 포기하고 다신 쳐다보지 않게 될 것입니다.

 

1. 쿠버네티스(Kubernetes)란?

docker? kubernetes?

만약 우리가 단일 서버에서 도커를 사용하게 된다면 오케스트레이션이라 불리는 쿠버네티스를 사용할 이유가 전혀 없는데요. 단일 서버에서 도커는 간단한 명령어로 컨테이너를 만들기 때문에 사용상 전혀 어려울 것이 없습니다.

 

반면에 두 개 이상의 서버에서 도커 데몬을 사용하게 된다면 혹은 10대 이상의 서버에서 도커를 사용하게 되면 어떤 시스템에 컨테이너를 생성하는 것이 맞을까를 생각해야 합니다.

 

당연히 idle상태인 서버를 선택하여 해당 서버에 컨테이너를 생성하여 운용을 하여야 합니다. 그것을 일일이 각 서버에 접근하여 유휴 자원을 확인하는 것은 정말 비효율적인데요. 그리하여 kubernetes와 같은 오케스트레이션 툴이 등장한 것입니다.

 

2. kubernetes 목적

다중의 도커 서버를 하나의 Pool로 구성

kubernets는 다중 서버의 도커 데몬에 연결하여 사용하는데요. 사용자는 사용하는 서버에 서버가 몇 개인지 도커 컨테이너가 몇개 실행중인지 알 필요가 없습니다. 

 

kubernetes 마스터에게 사용자가 필요한 컨테이너를 어떤 목적에 맞는 이미지로 몇개 만들지만 명령만 하면 됩니다. 

 

다중 서버에 분산되어 컨테이너 생성

두 개의 워커 노드에 3개의 container를 생성하게 되면 쿠버네티스에서 알아서 컨테이너를 A서버와 B서버에게 할당하게 됩니다. Idle상태인 서버를 직접 찾을 필요가 없는 거죠.

 

A서버 B서버 와의 컨테이너 통신

각 서버 컨테이너는 각각의 private ip가 있는데요, A서버와 B서버에 있는 컨테이너 간의 통신은 kube-proxy 등을 통해 통신이 가능합니다.

 

컨테이너 재 생성

단일 서버에서 도커 컨테이너를 생성하다 운영하다 보면 가끔은 불편한 상황을 마주할 수 있을 것이다. 서버가 다운되거나  컨테이너가 fail 되어 exit상태로 빠져나가는 경우.

 

쿠버네티스는 이 상황을 방지하여 동일한 컨테이너를 생성하고 서비스를 지속적으로 제공한다.

 

Load Balance

예를 들어 kubernetes 클러스터로 생성된 웹사이트에 3개의 컨테이너가 동작하고 있는데 그 웹사이트의 public ip로 사용자가 접근할 때마다 container1 -> container2 -> container3 순서로 접근할 수 있도록 round-robin형태의 로드밸런싱이 제공된다.

 

3. kubernetes 용어

master

우리가 잘 알고 있는 마스터 노드이다. 다중 도커데몬을 관리하는 일을한다.

 

worker

도커가 설치되어 있으며 실제 컨테이너들이 생성되어 일하는 노드인데요. 예전에는 minion이라는 이름을 가지기도 하였습니다. 마스터의 관리를 받고 있습니다.

 

pod

kubernetes의 기본 단위인데요. 컨테이너 혹은 컨테이너의 묶음이라고 불리는 pod는 아직까지는 간단하게 컨테이너로 알고 있으셔도 될것 같습니다.

 

rc

rc는 replication controller의 줄임말인데요. pod를 자동으로 생성 복제해주는 컨트롤러입니다. 복제 개수 설정을 3으로 하게 되면 3개의 pod가 서비스상에 계속 active상태가 됩니다.

 

service

pod의 group을 식별하는 라벨이라는 기준에 따라 pod들을 하나의 서비스로 외보에서 접근할 수 있도록 해줍니다.

 

yaml

kubenets에서 service, rc, pod등 기능을 설명한 데이터 형식 코드입니다. 야믈이라고 읽습니다.

 

4. kubernetes 주요 도구

kubeadm: init(join), 초기화(Bootstrap)

kubernetes 구성과 초기화 그리고 노드 확장할 때 외에는 사용하지 않지만 중요한 요소입니다.

 

kubectl: cmd작업 수행, k8s object 생성, 관리

k8s란 kubernetes를 간단하게 부르기 위한 줄임말이라고 보시면 되는데요. k와 s사이의 8개의 알파벳을 빼서 부르겠다 하여 k8s라고 지칭합니다.

 

5. k8s pod

pod란 kubernetes의 기본적인 배포 단위이며, 컨테이너를 포함한 단위입니다. kubernets의 특징중 하나는 container를 개별적으로 하나씩 배포하는 것이 아니라 pod 단위로 배포합니다.

 

위에서 보면 pod1과 pod2은 도커에서 흔히 볼수 있는 형태인데요. pod3과 pod4를 보시면 이제 kubernetes에서만 만들 수 있는 pod의 형태인거죠.

 

6. pod생성 yaml

apiVersion: v1
kind: Pod
metadata:
  name: k8s-nodejs
  labels:
    app: hi-nodejs
spec:
  containers:
  - name: gpu-test
    image: 1985ck/gpu-test:1.0
    ports:
    - containerPort: 8000

k8s의 apiversion은 보통 v1을 사용하며, kind는 리소스 종류를 정의하게 됩니다. pod및 service 등이 있습니다. metadata 에는 리소스의 각종 메타 데이터인 name, resource, label등이 존재하는데요.

 

하단에 spec은 resource등의 대한 상세정보를 정의하면 됩니다. container이름은 gpu-test로 정의하고 docker image는 1985ck/gpu-test:1.0을 사용하겠다. 또한 컨테이너포트 8000을 열겠다고 정의한 것이다.

 

6. pod - replicaset

kubernetes replicaset

위 그림에서 보면 이해가 쉬울 것인데요. web container를 2개 복제해서 띄어놓겠다 라고 정의하여 pod를 생성하게 되면 2개의 호스트에 container가 생성되서 서비스를 하는데요.

 

만약 container나 서버가 다운되게 되면 10.244.2.4의 호스트에 컨테이너가 바로 생성이 됩니다. kubernetes의 가장 강력한 기능중 하나입니다.

 

7. kubernetes components

Master Node

쿠버네티스의 주요 컨트롤 유닛으로서 worker nodes를 관리하는 주체인데요. 클러스터에 관한 전박적인 결정을 하고 이벤트를 감지 및 반응하는 역할을 합니다.

 

Worker Node

워커노드는 할당된 task를 요청대로 수행하는 시스템인데요. 컨테이너들간의 네트워크 등 서비스에 필요한 전박적인 일을 마스터 노드와 통신하며 수행합니다.

 

Master

kubectl, api server, scheduler, controller manager, etcd

 

worker

kubelet, kube-proxy, pod

 

Kubectl

마스터 노드와 통신하는 명령어로서 쿠버네티스 API를 사용해서 마스터노드와 상호작용을 합니다.

 

API Server

REST API 요청을 처리하고 쿠버네티스 클러스터를 구성하는 각 컴포넌트들과 통신을 담당합니다.

 

Scheduler

노드들의 리소스 상태를 파악하여 pod가 배치될 적절한 노드를 선택해 주는 역할.

 

Controller Manager

쿠버네티스 클러스터 상태 감시, 설정한 상태로 유지하는 역할.

 

ETCD

오픈소스 key-value 저장소로서 Kubernetes에서는 Master Node의 API Server가 HTTP/JSON API를 이용하여 접근할 수 있는 구성 데이터를 저장하는 용도로 사용됩니다.

 

Kubelet

쿠버네티스 마스터 노드간의 통신을 담당하는 에이전트로서 노드에서 동작하는 pod들을 관리합니다.

 

Kube-proxy

각 노드별로 탑재되며 네트워크 프록시 및 로드밸런서 역할을 해줍니다. Pod- Pod는 컨테이너의 그룹으로 한 개 또는 여러 개의 컨테이너를 포함하는 쿠버네티스의 작업단위 입니다.

 

k8s pod 생성 과정

 

pod생성 과정 architecture인데요. 왼쪽 그림과 우측 그림을 번갈아 보면 조금 이해가 빠르실 것 같습니다.

 

kubernetes에 대한 간랸한 설명을 보았는데요. 요즘은 nvidia에서 나오는 A100 GPU에서도 slice를 통해 kubernetes를 지원하며 슈퍼마이크로서버 4124GS-TNR AMD GPU서버에서 A100을 통해 kubernetes를 사용해 보실 수 있습니다.

 

2020/12/02 - [linux] - NVIDIA A100 MIG

2020/12/20 - [분류 전체보기] - 슈퍼마이크로 AS-4124GS-TNR 상세정보 PCI-E 4.0

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">