본문 바로가기

오픈소스

쿠버네티스(kubernetes)란?

쿠버네티스를 설치하고 테스트 해본 과정을 공유 하려고 합니다. 

구글에서 검색 해보고 테스트 해본 내용 입니다.

 

1. 쿠버네티스(kubernetes)?

단일 서버에서 도커를 사용하게 되면 쿠버네티스를 사용할 이유가 없다.
두개 이상의 서버에서 도커 데몬을 사용하게 되면 어느 서버에 컨테이너를 생성 하는 것이 맞을지 고민이 필요 하다.
쿠버네티스는 idle상태인 서버에 컨테이너를 생성하여 운용하게 해주는 오케스트레이션 툴이다.
 

2. 쿠버네티스 목적

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

     쿠버네티스 마스터노드에게 사용자가 필요한 컨테이너를 어떤 목적에 맞는 이미지로 몇 개 만들지만 명령만 하면 된다.

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

     쿠버네티스는 컨테이너를 A서버와 B서버에 자동으로 할당하게 된다.

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

     서버 컨테이너는 각각의 private ip를 가지고 있고, A서버와 B서버에 있는 컨테이너 간의 통신은 kube-proxy 등을 통해 통신이 가능하다.

컨테이너 재 생성

     쿠버네티스는 서버가 다운 되거나 컨테이너가 Fail상태가 되면 서비스를 지속적으로 제공 하기 위해서 동일한 컨테이너를 생성 한다.

Load Balance

     쿠버네티스는 사용자가 접근할 때마다 container1 -> container2 -> container3 순서로 round-robin형태의 로그밸런싱이 제공 된다.

 

3. 쿠버네티스 용어

master

     마스터 노드이다. 다중 도커데몬을 관리하는 일을한다.

 

worker

     도커가 설치되어 있으며 실제 컨테이너들이 생성되어 일하는 노드이며. 마스터의 관리를 받는다.

 

pod

     kubernetes의 기본 단위. 컨테이너 혹은 컨테이너의 묶음이다.

rc

     rcreplication controller줄임 말이다. pod를 자동으로 생성 복제해주는 컨트롤이며, 복제 개수 설정을 3으로 하게 되면 3개의 pod가 서비스상에 계속 active상태가 된다.

 

service

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

 

yaml

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

k8s

     kubernetes를 간단하게 부르기 위한 줄임 말이다. ks사이의 8개의 알파벳을 빼서 부르겠다 하여 k8s라고 지칭 한다.

 

4. 쿠버네티스 pod

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

 

pod1pod2도커에서 흔히 볼수 있는 형태인데, pod3pod4kubernetes에서만 만들 수 있는 pod형태이다.
 
 

5. 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

apiversion : 보통 v1사용
kind : 리소스 종류 podservice 등이 있다
metadata : 리소스의 각종 메타 데이터인 name, resource, label
spec : resource등의 대한 상세정보를 정의 한다. container 이름, docker image, 컨테이너포트

 

 

6. pod - replicaset

web container2개 복제해서 띄어 놓겠다 라고 정의하여 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

 

8. kubernetes components

Kubectl

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

 

API Server

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

 

Scheduler

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

 

Controller Manager

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

 

ETCD

     오픈소스 key-value 저장소로서 Kubernetes에서는 Master NodeAPI ServerHTTP/JSON API를 이용하여 접근할 수 있는 구성 데이터를 저장하는 용도로 사용된다.

 

Kubelet

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

 

Kube-proxy

     노드별로 탑재되며 네트워크 프록시 및 로드밸런서 역할을 한다.

 

 

'오픈소스' 카테고리의 다른 글

쿠버네티스 설치 및 실행  (0) 2023.04.10