본문 바로가기

Tech/[Container] Kubernetes

쿠버네티스 기초 다지기

왜 쿠버네티스인가?

과거 서버 관리 방식

  • 자원이 통합되어 있지 않고, 필요에 따라 증설/회수 하는 비용 발생
  • 낭비되는 자원 발생
  • 무중단 업데이트를 위해 서버 가용성이 떨어지는 상황 발생
  • 수동 스케일링 수행 (스케일아웃, 스케일업, 스케일인, 스케일다운)

쿠버네티스를 사용한 서버 관리 방식

  • 자원 풀링 (낭비 자원 최소화)
  • 오토 스케일링
  • 오토 힐링 (컨테이너 죽으면 자동으로 새로운 컨테이너 실행)
  • 무중단 업데이트 시 서버 가용성 유지 (새로운 버전의 컨테이너를 실행해 갈아끼우는 방식)

 

VM과 컨테이너의 차이

VM : 하이퍼바이저를 통해 Guest OS를 가상화해 동작

  • 따라서 게스트 OS 간 격리로 인해 보안성이 높음
  • 하나의 큰 모놀리식 서비스를 배포해야 돼서 자원 낭비

컨테이너 : 컨테이너 엔진을 통해 리눅스 기술인 cgroups, namespace 를 활용해 컨테이너 간 격리 환경 위에서 동작

  • 호스트 OS와 자원을 공유해 보안성이 비교적 취약
  • OS에 종속적 예) Linux OS에서 윈도우 컨테이너 사용 불가
  • 모듈별로 쪼개서 컨테이너로 배포해서 자원 확보 가능

 

리눅스 서버, 도커, 쿠버네티스 비교

  • 리눅스 서버 : 백엔드 서버를 직접 띄워서 서비스 제공
  • 도커 : 도커 파일로 백엔드 서버의 도커 이미지를 만들고, 이를 실행한 뒤 컨테이너와 호스트 OS의 포트를 매핑해 서비스 제공
  • 쿠버네티스 : 도커로 빌드된 이미지를 도커 허브로부터 받아와 Pod이라는 배포 단위의 컨테이너를 지정해 배포, 배포한 후 Service 객체를 활용해 외부 사용자가 접속할 수 있도록 포트를 Pod에 매핑해 서비스 제공

 

Kubernetes Overview

  • 하나의 Kubernetes Cluster는 Master, Node들로 구분된다.
  • Kubernetes Cluster 안에서는 Namespace로 환경을 분리할 수 있다.
  • Service 를 사용해 Pod 들을 매핑해 외부 접근을 허용할 수 있다.
  • Pod 안에는 여러 개의 Container 가 포함될 수 있다.
  • Pod 데이터 영속성을 위해 Volume 을 사용한다.
  • ResourceQuota 를 사용해 자원(메모리, 디스크 크기 등)에 제약(용량 제한)을 걸 수 있다.
  • ConfigMap 을 사용해 Pod 에 환경 변수를 관리할 수 있다.
  • Controller 를 통해 Pod 들을 관리할 수 있다. Controller의 종류로는 ReplicaSet, Deployment, DaemonSet, CronJob 등으로 다양하다.
  • ReplicaSet은 Pod 상태를 감지해 죽은 Pod 를 다시 실행시키거나 개수를 조절한다.
  • Deployment 는 업데이트를 지원하고, 실패 시 롤백 시켜준다.
  • DaemonSet 은 하나의 Node에 하나의 Pod 만 실행되도록 유지해 준다.
  • CronJob 은 여러 개의 Job 들을 반복적으로 수행하기 위해 스케줄링할 때 사용한다.

 

Reference : https://inf.run/yW34