본문 바로가기

Kubernetes

[k8s] 쿠버네티스란? 기본 개념 총정리 (에티버스러닝)

이 글은 에티버스러닝에서 K-Digital Training 멀티 클라우드 엔지니어 교육을 수강하면서 공부한 내용을 작성한 것이다. 
요즘 진도가 빨리 나가고 어려운 과정을 진행하였기 때문에 따로 자주 글을 쓰지 못했다. 지금은 Kubernetes 과정을 듣고 있다. 너무 어려웠던 Docker 강의를 겨우 다 들었는데, 강사님께서는 이게 더 어려울 거라고 하셨다 ㅠㅠ 
쿠버네티스를 설치하는 과정은 강사님께서 되도록 올리지 말라고 하셔서 생략했다. 
 

 


 

1. Kubernetes 개요

1.1 Kubernetes란?

레드햇에서는 

쿠버네티스 (k8s, Kubernetes, 큐브, kube)는 컨테이너화된 애플리케이션을 배포, 관리, 확장할 때 수반되는 다수의 수동 프로세스를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼입니다.

라고 정의한다. 
 
간단히 말하자면 컨테이너를 관리하는 플랫폼이다. 컨테이너 오케스트레이션 툴이라고 볼 수 있다. 
그런데 컨테이너가 적은 경우에는 굳이 쿠버네티스를 사용할 필요가 없다. (약 100대 이상부터 사용)
 
컨테이너의 장점은 가상화에서 하이퍼바이저에 있던 GusetOS 때문에 걸리던 오버헤드를 해결할 수 있다는 점이다. 
더 가볍게 돌릴 수 있다. 
 
 
 

1.2 Kubernetes 구조

1.2.1 기본 구조

Cluster  > (Namespace)  > Node  >  Pod  >  Container

 

  • 클러스터 Cluster

쿠버네티스에서 가장 큰 단위이다. 가상 서버들이 속한 클라우드 환경을 의미한다. 
간단히 말하면, 여러 개의 컴퓨터들이 묶여서 하나의 시스템 처럼 동작하는 것이다.
다양한 리소스(노드 등)들을 관리한다.
이런 클러스터는 무조건 여러 개 만드는 것이 권장된다. 왜냐하면 HA 때문이다. 
쿠버네티스를 실행한다는 것은 클러스터도 실행하고 있다는 것!

 

  • 노드 Node

컨테이너를 실행시키는 장소이다. 가상 혹은 물리 서버이다. 

 

  • 파드 Pod

쿠버네티스의 가장 작은 단위로 여러 개의 컨테이너를 만들 수 있다. 
그런데, 하나의 Pod에는 하나의 Container만 구성하는 것을 권장한다. 왜냐하면 Pod가 죽을 수 있기 때문이다. 
(Container는 Container의 가장 작은 단위이다.)

 

 

 

 

컨테이너가 1개 이상인 파드들이 모여 노드가 되고, 노드들이 모여 클러스터가 된다. 

 

 

1.2.2 동작 흐름

 

처음의 그림을 보면 Control Plane이 있는데 이건 Master node라고도 한다. 쿠버네티스가 관리하는 node로 우리가 접근해서 볼 수 없다. 그래서 kubectl 같은 명령어를 통해 Master node의 API 서버에 명령을 보낸다. 그러면 API 서버는 Worker node들에 명령을 보낸다. (예를 들어 파드를 1번 노드에 생성할 것이다 라던가)

 

 

사용자는 두 가지를 해야 한다. 

1. docker 명령어로 이미지를 만들고, hub(물론 다른 repository도 괜찮다. github라던가, aws의 s3 등의 저장소!)에 push한다. 

2. kubectl 명령어로 어떤 상태를 원하는지 선언한다. 그러면 그 명령어는 API 서버로 전달된다. 다른 세 컴포넌트들이 API에게 이런 저런 내용을 알려주면, API 서버는 Worker Node로 그 내용을 보낸다. 만약 Node2가 바뀌어야 하는 상황이 되면 kubelet을 통해 node2가 docker daemon에 이미지를 pull 하라는 명령을 보낸다. 

 

 

 

위 그림은 

[따배쿠] 4-1. 쿠버네티스 아키텍처 - Kubernetes 동작원리 - YouTube

를 참고하여 직접 그린 것이다. 

 

 


 

 

2. Namespace의 개념

(아주 쉽게 풀어낸 것이라 굳이 읽지 않아도 된다.)

 

 쿠버네티스는 오브젝트와 컨트롤러로 나눌 수 있다. 오브젝

오브젝트 object 에는 파드, 서비스, 볼륨, 네임스페이스 등이 있다. 

컨트롤러에는 레플리카세트, 디플로이먼트, 스테이트풀세트, 데몬세트, 잡 등이 있다. 

 


쿠버네티스를 공부하면서 namespace에 대한 개념이 헷갈려서 이 부분을 추가하였다.

namespace는 하나인 API 서버를 논리적으로 나누어서 사용하는 것이다.

예를 들면, 우리가 쇼핑몰 웹 사이트를 구성한다고 가정했을 때 로그인 화면, 상품별 화면 등으로 나누어서 pod, service 등을 관리하고 싶을 수 있다.
혹은 어떤 기업이 있을 때 ㅇㅇ전자, ㅇㅇ증권, ㅇㅇ면세점 등으로 나누어서 관리하고 싶을 수도 있다.
이럴 때 하나의 namespace를 활용하여 구분한다.



Namespace 구성하기 

- namespace 확인 

kubectl get namespace

- namespace 생성

kubectl create namespace 1team
'1team'이라는 namespace를 생성한다. 

 
- namespace 삭제

kuberctl delete namespace 1team
 

namespace 명령어 요약

 
 
 
이를 yaml 파일로 작성하여 돌릴 수도 있다. 

name.yml

 
 
 
 
 
 

 

'Kubernetes' 카테고리의 다른 글

[k8s] 쿠버네티스 yaml 파일로 작성하기  (0) 2023.06.25
[k8s] 쿠버네티스 명령어 (with.Nginx)  (0) 2023.06.22