본문 바로가기
CS 및 IT 일반

쿠버네티스(kubernetes)란?

by invelog 2023. 8. 23.
반응형

쿠버네티스(kubernetes)란 컨테이너화된 어플리케이션의 배포 및 확장, 관리를 자동화하는 오픈 소스 시스템이다. 

구글이 내부에서 배포시스템으로 사용하던 'borg'의 코드를 CNCF(Cloud Native Coumputing Foundation)에 기부하면서 쿠버네티스는 오픈소스가 되었다. 

쿠버네티스는 마이크로 서비스, 클라우드 플랫폼을 지향하며, 컨테이너로 이루어진 것들을 쉽게 관리할 수 있도록 해준다. Serverless, CI/CD, 머신러닝 등이 쿠버네티스 플랫폼 위에서 동작한다. 

 

왜 필요할까?

컨테이너화된 어플리케이션 환경을 탄력적으로 사용할 수 있게 되며 Production 환경에서는 어플리케이션을 실행하는 컨테이너를 관리하고 가동이 중지되는 시간이 없는지 등 지속적으로 확인을 해야한다. 만약 컨테이너가 가동이 중지되더라도 다른 컨테이너를 가동하여 중지되는 시간을 최소화해야 한다.

바로 위와 같은 문제를 쿠버네티스가 시스템에 의해 관리되도록 해주기 때문에 쿠버네티스가 필요하게 된다. 

 

어떠한 기능들을 제공하는가?

  • Service Discovery와 Load Balancing : DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출
  • Storage Orchestration : 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재
  • 자동화된 롤아웃과 롤백 : 원하는 상태를 서술하고 현재 상태를 원하는 상태로 설정한 속도에 따라 변경 가능
  • 자동화된 빈 패킹 : 각 컨테이너가 필요로 하는 CPU와 RAM을 제공
  • 자동화된 복구(Self-Healing) : 실패한 컨테이너를 다시 시작하고 컨테이너를 교체
  • 시크릿과 구성 관리 : 암호 OAuth Token, 및 SSH 키와 같은 중요한 정보를 저장하고 관리

 

Desired State

쿠버네티스는 얼마만큼의 서버가 구동돼야 할지, 몇 번 Port로 서비스할 지 등 관리자가 원하는 환경대로 작업이 되고 있는지 지속적으로 체크하며 조치하는 역할을 한다. 이 때 관리자가 원하는 상태를 Desired State라고 하며 이것이 쿠버네티스의 핵심이다.

 

Desired State를 설정하는 방법

YAML 또는 JSON 파일을 사용하여 Desired State에 대해 명시적으로 설정할 수 있다.

apiVersion : apps/v1
Kind : Deployment
metadata : 
	name : nginx-deployment
spec : 
	selector : 
    	matchLabels : 
        	app : nginx
     replicas : 2 # tells deployment to run 2 pods matching the template
     template : 
     	metadata : 
        	labels : 
            	app : nginx
        spec : 
        	containers : 
            - name : nginx
              image : nginx:1.14.2
              ports : 
              - containerPort : 80

와 같은 형식으로 작성을 완료하면 쿠버네티스가 정의된 사양에 따라 컨테이너의 라이프사이클을 관리한다. 쿠버네티스를 사용하게 되면 시스템으로 컨테이너 기반 어플리케이션 및 서비스의 설정, 라이프사이클, 스케일 등을 관리할 수 있다. 

 

설정할 수 있는 요소

쿠버네티스는 Pod를 배포할 때 CPU, RAM 등 컨테이너에 필요한 Resource의 양을 선택적으로 지정 및 제한할 수 있다. 

apiVersion : v1
kind : Pod
metadata : 
	name : frontend
spec : 
	containers : 
    - name : app
      image : images.my-company.example/app:v4
      resources : 
      	requests : 
        	memory : "64Mi"
            cpu : "250m"
        limits : 
        	memory : "128Mi"
            cpu : "500m"
     - name : log-aggregator
       image : images.my-company.example/log-aggregator:v6
       resources : 
        requests : 
        	memory : "64Mi"
            cpu : "250m"
        limits : 
        	memory : "128Mi"
            cpu : "500m"

와 같은 YAML 파일에 Resource Limit을 지정하면 이보다 많은 Resource를 사용할 수 없도록 제한을 적용한다. 또한 해당 시스템의 Resouce 최소 요청량도 설정할 수 있다. 

 

어떻게 이루어져 있을까?

쿠버네티스는 여러 개의 노드(Node)로 구성된 클러스터로 이루어져 있다. 노드는 하나의 VM(Virtual Machine)을 의미한다. 쿠버네티스에서는 컨테이너화된 어플리케이션을 실행하는 Worker Node와 이 Work Node들을 관리하는 Master Node로 구성되어 있다. Worker Node와 Master Node는 여러개로 이루어질 수 있지만 쿠버네티스를 사용할 때는 최소한 1개의 Woker Node가 존재해야 한다. 

 

Master Node에 필요한 Component는 무엇인가?

Master Node는 클러스터에 대한 전반적인 결정과 이벤트를 감지하고 반응하는 역할을 수행하는데 기본적으로

Component 명 역할
kube-apiserver 모든 요청을 처리
kube-controller-manager 다양한 Controller(복제/배포/상태 등)를 관리
kube-scheduler 상황에 맞는 Worker Node를 선택
etcd 클러스터 내의 데이터를 담는 저장소

와 같은 Component들을 통해 역할을 수행하며 필요로 한다.

 

Worker Node에 필요한 Component는 무엇인가?

Worker Node는 컨테이너화된 어플리케이션을 동작하고 유지시키는 역할을 하는데 기본적으로 

Component 명 역할
pod 컨테이너화된 어플리케이션 그룹
kubelet 노드에 할당된 pod의 상태 체크 및 관리
kube-proxy pod로 연결되는 네트워크 관리

와 같은 Component들을 통해 역할을 수행하며 필요로 한다. 

반응형

'CS 및 IT 일반' 카테고리의 다른 글

로드 밸런싱(Load Balancing)이란?  (0) 2023.08.23
XSS(Cross-Site Scripting)  (0) 2023.08.07
Cookie와 Session  (0) 2023.08.07