티스토리 뷰

Docker

쿠버네티스(Kubernetes)란? (1/2)

Jaime.Lee 2019. 10. 7. 14:42

쿠버네티스 사용에 앞서 아주 간단하게 살펴보기 위한 포스팅입니다. 직접 구현하고 설정하는 내용은 추후에 포스팅할 예정이오니 해당 내용에 관심있으신 분은 이후 포스팅을 참조해주세요.

쿠버네티스란?

쿠버네티스는 구글에서 개발한 컨테이너 오케스트레이션(Container Orchestration) 프레임워크입니다. 즉, 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼입니다. 단순한 컨테이너 플랫폼이 아닌 컨테이너를 손쉽게 관리할 수 있는 다양한 기능들(CI/CD, 머신 러닝 등)이 플랫폼 내에서 동작하고 마이크로서비스, 클라우드 플랫폼을 지향합니다.

컨테이너 오케스트레이션 프레임워크는 여러 개의 서버에 컨테이너를 배포하고 운영하면서 서비스 디스커버리와 같은 기능등을 제공하여 서비스 간 연결을 쉽게 해줍니다. 여러 서버를 하나로 묶어 자동으로 서버를 선택해 어플리케이션을 배포하고 부하가 생기면 컨테이너를 늘려주고 장애가 발생하면 적절한 조치를 취해주는 등의 역할을 합니다.

쿠버네티스의 특징

  • 전 세계의 방대한 스케일의 경험과 기술, 거대한 커뮤니티와 생태계
  • 다양한 배포 방식
    • Development
    • StatefulSets
    • DaemonSet
    • Job
    • CronJob
  • Ingress 기능 제공
    • L7 로드밸런싱 기능 제공
    • 프록시 서버 활용
  • 클라우드 지원
    • AWS
    • GCP (Google Cloud Platform)
    • Azure
  • Namespace와 Labeling
  • RBAC (Role-Based Access Control): 접근 권한 시스템
  • CRD (custom Resource Definition)
    • 쿠버네티스가 제공하지 않는 기능을 기존의 기능과 동일한 방식으로 적용 및 사용 가능
  • Auto Scaling
    • 자원 사용량, 접속자 수 등에 따른 확장
    • 컨테이너 개수 조정 방식(HPA: Horizontal Pod Autoscaler), 리소스 할당 조정 방식(VPA: Vertical Pod Autoscaler), 서버 개수 조정 방식(CA: Cluster Autoscaler)
  • Federation, Multi Cluster
    • 클라우드에 설치한 클러스터와 자체 서버에 설치한 클러스터를 하나로 묶어서 관리 가능

쿠버네티스의 단점

너어어어어무 복잡하고 어려움!

기본 개념

현재 상태(Current Status)를 모니터링하면서 관리자가 원하는 상태(Desired Status)를 만들기위해 동작하는 방식입니다. 따라서 명령 보다는 선언에 가까운 방식을 사용하고 상태를 선언하기 위해선 어떻게 선언하는지를 알아야 합니다.

쿠버네티스는 상태 관리 대상을 오브젝트로 정의합니다. 다양한 오브젝트를 프리셋으로 제공하고 새로운 오브젝트를 추가하는 과정이 어렵지 않기 때문에 확장성이 좋습니다. 오브젝트의 종류는 아래에서 설명합니다.

Pod

배포 가능한 가장 작은 단위로 컨테이너(한 개 이상), 스토리지, 네트워크 속성을 가집니다. Pod에 속한 컨테이너는 스토리지와 네트워크를 공유하고 localhost로 접근할 수 있습니다.

ReplicaSet

Pod을 여러 개 복제하여 관리하는 오브젝트로 Pod을 생성하고 유지하려면 반드시 사용해야 합니다. 복제할 개수, 생성할 Pod의 설정값 등을 가지고 있으며 주로 다른 오브젝트에 의해 사용됩니다.

Service

네트워크와 관련된 오브젝트로 Pod을 외부 네트워크와 연결해주고 여러 개의 Pod에 로드밸런싱 기능을 위해 사용합니다. 내부 DNS에 도메인으로 서비스 이름을 등록하기 때문에 서비스 디스커버리 역할도 할 수 있습니다.

Volume

저장소와 관련된 오브젝트로 호스트 디렉토리를 그대로 사용할 수도 있고 동적으로 생성하여 사용할 수도 있습니다.

오브젝트를 생성하기 위한 스펙은 주로 yaml을 사용(JSON도 가능)하여 정의합니다. 원하는 오브젝트의 종류, 상태, 접근 권한 등을 입력할 수 있습니다.

배포 방식

오브젝트에 레이블링 후 Desired State를 정의하고 API 서버에 전달하는 방식을 사용합니다.

 

다음 포스팅에서 아키텍처와 Pod 생성 과정을 살펴보도록 하겠습니다.

댓글