본문 바로가기
MLOps/Kubernetes

[Kubernetes] Kubernetes 기초

by Toritol 2023. 11. 1.
728x90

이번 글에서는 Kubernetes의 기초에 대해 작성하고자 합니다. 해당 글은 Inflearn의 '대세는 쿠버네티스 [초급~중급]' 강의를 학습하면서 작성한 글임을 미리 알려드립니다. 우선 Kubernetes에 대해 간단하게 살펴보면, kubernetes는 단어가 길기 때문에 보통 짧게 k8s라고도 작성합니다. redhat에서는 kubernetes를 컨테이너화된 애플리케이션을 배포, 관리, 확장할 때 수반되는 다수의 수동 프로세스를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼이라고 소개하고 있습니다. 보다 쉽게 설명하면, 여러 컨테이너를 효율적으로 관리할 수 있는 플랫폼이라고 생각해 주시면 될 것 같습니다. 그럼 강의 순서에 따라 kubernetes에 관한 내용을 설명하겠습니다.

 

1. Why Kubernetes

출처: https://inf.run/yW34

 Kubernetes의 필요성을 예시를 통해 살펴보겠습니다. 특정 회사는 A, B, C, 3개의 서비스를 운영하고, A는 아침, B는 점심, C는 저녁 시간대에 트래픽이 몰리고 있습니다. As-Is에서는 각 서비스별로 접속량을 감당하기 위해 3개의 서버를 배치해놓고 있으며, 서버가 다운되는 것을 방지하기 위해 백업 서버도 따로 준비해두고 있습니다. 이렇다보니 최소 9개에서 최대 12개까지의 서버가 필요하게 됩니다. 서버 업데이트 시, 서버를 모두 중단하고 업데이트를 하거나, 하나의 서버씩 순차적으로 업데이트를 진행해야 합니다.

 반면 To-Be인 kubernetes 환경에서는 4대의 서버만 존재하더라도 Auto Scaling 기능을 통해 트래픽 양에 따라 서비스의 자원량을 배분해줍니다. 또한, Auto Healing 기능을 바탕으로 특정 서비스의 서버가 죽더라도 한 대의 여분 서버를 통해 자동적으로 백업하는 것이 가능합니다. 마지막으로 Deployment를 통해 서버의 업데이트도 자동으로 관리할 수 있습니다. 이처럼 여러 서비스를 운영할 때, 효율적인 서버 운영 및 관리를 가능하도록 하는 것이 kubernetes입니다. 

 

2. VM vs Container

출처: https://inf.run/yW34

 다음은 VM과 Container의 차이입니다. 우선 VM(virtual machine)과 container, 모두 host OS(Linux, Mac, Windows)가 존재합니다. VM의 경우, hypervisor 툴을 통해 guest OS를 올려 여러 개의 VM을 생성하게 됩니다. 여기서 guest OS는 linux, mac, windows가 모두 가능하고, 서로 독립적인 OS이므로 보안적인 부분에서 장점이 있습니다. 하지만 OS 위에 다시 OS를 올리는 구조이기 때문에, 느리다는 단점이 존재합니다.

 Container의 경우, docker와 같은 container 가상화 솔루션을 활용하게 됩니다. 원래는 linux의 버전이 다를 경우 라이브러리를 사용하는데 제약이 있을 수 있습니다. 하지만 docker를 활용하게 되면 image를 가져와서 사용하는 것이므로, 이러한 제약에서 벗어나는 것이 가능합니다. 또한, linux 자체 기능인 namespace(프로세스별로 별도의 커널 자원을 분리)와 cgroup(리소스에 대한 제어를 통한 분리)을 통해, container 단위로 서비스를 분리하는 것이 가능합니다.

 

출처: https://inf.run/yW34

 다른 차이점으로는 A, B, C 모듈이 있고 C 모듈에 과부하가 걸린다고 할 때, VM의 경우에는 동일한 VM을 하나 더 생성하게 됩니다. A와 B는 추가할 필요가 없었기 때문에 비효율적인 상황이 생기는 겁니다. 반면 container의 경우, 일반적으로 모듈별로 구분해서 container를 생성하게 됩니다. 여기서 kubernetes도 적용하면 하나의 pod 내에 여러 container를 포함시킬 수 있는데, A, B를 하나의 pod로 묶고 C를 독립적인 pod로 둘 수 있습니다. 이때 과부하가 걸리는 C 모듈이 위치한 pod만 확장하는 것이 가능하므로, container 및 kubernetes를 적용할 때 상당히 효율적으로 자원을 쓰는 것이 가능합니다.

 

3. Kubernetes Overview

출처: https://inf.run/yW34

 Kubernetes cluster의 전체적인 구성을 간략하게 살펴보겠습니다. Kubernetes cluster는 master node와 worker node로 구성이 되고, master에 worker들이 연결됩니다. Master node는 kubernetes의 전반적인 관리, 계획, 스케쥴링, 모니터링을 담당하고, worker node에는 컨테이너화된 애플리케이션을 실행하는 시스템이 위치하게 됩니다. Cluster 자원을 확장시키기 위해서는 node를 추가하면 됩니다.

 Cluster 내에는 위에서 언급한 namespace를 통해 kubernetes object들을 독립된 영역으로 분리하게 되고, 하나의 namespace 내에는 최소 배포 단위인 pod들이 존재합니다. Pod에 문제가 발생하는 경우 재생성이 이루어지는데, 이 때 pod에 존재하던 데이터도 같이 없어지게 됩니다. 이러한 문제를 방지하기 위해 volume을 생성하여 pod와 연결하면, pod 내의 데이터를 별도로 저장하는 것이 가능합니다. 또한, ResourceQuota와 LimitRange를 통해 namespace의 자원을 제어할 수 있고, ConfigMap과 Secret을 통해 환경 변수 설정 등의 셋팅을 진행할 수 있습니다.

 마지막은 Controller입니다. Controller는 말 그대로 pod를 관리하는 역할을 하며, 여러 개의 유형이 존재합니다. 가장 기본적인 유형은 Replication ControllerReplicaSet으로, 지정된 숫자 만큼의 pod이 항상 cluster 내에서 실행되고 있도록 관리합니다. 따라서 이슈로 인해 pod가 다운됐을 때 새로운 pod을 자동적으로 생성해 줍니다. Deployment는 배포 이후에 pod들의 업그레이드를 진행해주고, 문제가 생기더라도 롤백이 쉽습니다. DaemonSet은 모든 node에 pod를 하나씩 배치하는 역할, CronJob은 linux의 CronTab과 유사하게 스케쥴링 역할을 수행합니다.

 

 

* 강의 내용을 복습하면서 정리한 것이므로, 내용적으로 유사한 부분이 많다는 점 양해부탁드립니다.

 

 

<참고>

https://www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88/dashboard

 

대세는 쿠버네티스 [초급~중급] - 인프런 | 강의

쿠버네티스는 앞으로 어플리케이션 배포/운영에 주류가 될 기술 입니다. 이 강좌를 통해 여러분도 대세에 쉽게 편승할 수 있게 됩니다., 현존 최고의 앱 운영 및 배포 기술, 쿠버네티스를 만나

www.inflearn.com

https://velog.io/@lijahong/0부터-시작하는-Kubernetes-공부-Master-Node-컴포넌트

 

0부터 시작하는 Kubernetes 공부 - Master Node 컴포넌트

Kubernetes 컴포넌트 / ETCD / Controller Manager / Kube Scheduler

velog.io

 

 

 

728x90

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

[Kubernetes] Service 기초  (1) 2023.11.25
[Kubernetes] Helm 설치  (1) 2023.11.15
[Kubernetes] Pod 기초  (0) 2023.11.13
[Kubernetes] minikube 설치 및 실행 (Linux)  (2) 2023.11.10
[Kubernetes] minikube 설치 및 실행 (Windows)  (0) 2023.10.27

댓글