17-2 쿠버네티스 (개념)

airbus·2025년 5월 13일

프로그래머스

목록 보기
74/93

17-2 쿠버네티스 (개념)



쿠버네티스 (Kubernetes)


Kubernetes 쿠버네티스 링크(ko)

사전지식

마이크로서비스 아키텍처 (Microservice architecture; MSA)

  • 응용 시스템 개발 및 구성을 위한 아키텍처 스타일의 하나
  • 이에 비교하여 전통적인 방식의 아키텍처를 모놀리식(monolithic) 아키텍처라고 부르기도 함
  • 애플리케이션이 서비스 모음으로 개발되어 각 마이크로서비스는 특정한 기능을 수용하고 개별 작업을 처리, 이 서비스들이 서로 연결되어 전체 응용을 구성

컨테이너 인프라 환격의 적용
컨테이너 모델은 마이크로서비스를 구현하기에 적합

  • 도커를 사용하여, 개별 컨테이너를 만들고 묶어서 마이크로서비스로 구현한 이미지


쿠버네티스란?


줄여서 k8s 라고 표기함. (k와 s사이의 8개 철자를 생략)

  • 컨테이너 오케스트레이션 솔루션
    • 다수의 컨테이너들을 관리
    • 자동 배포, 배포된 컨테이너의 동작 보증, 부하에 따른 동적 확장 등의 기능을 담당
  • 도커와 잘 어울리는 실행 환경 구성 도구
    • 도커 컨테이너들을 클러스터 내에 실행하고 관리하는 데 적합
    • 지속적 통합과 인도 (CI/CD)에 유효하게 적용할 수 있음
    • 컨테이너 포드(pod)라고 불리는 k8s 오브젝트와 연관하여 실행 (=포드 위에서 실행)


쿠버네티스의 클러스터


https://kubernetes.io/docs/concepts/overview/components/

한개의 Control Plane과 여러개의 Worker Node로 구성되어있습니다.
하나의 Node는 하나의 컴퓨터의 개념이라 생각하면 됩니다.

클러스터 : 물리적인 한 대 or 다수의 컴퓨터를 묶어놓은 것, 여러대의 컴퓨터(서버)가 하나의 시스템처럼 동작하도록 만든 구조입니다.

k8s 클러스터의 구성요소

  • 클러스터는 하나 이상의 노드(들)로 구성됨

  • 컨트롤 플레인 (= 마스터 노드)

    • Kubectl (반드시 마스터 노드에 있어야 하는 것은 아님)
    • API 서버, etcd - 클러스터의 중심 역할을 하는 구성 요소
    • 컨트롤 매니저, 스케쥴러
  • 워커 노드

    • 컨테이너 런타임(CRI; Container Runtime Interface) - 포드를 이루는 컨테이너의 실행을 담당
    • kubelet - 포드의 구성 내용을 받아 CRI 에 전달하고 컨테이너들의 동작 상태를 모니터링

포드(pod)와 컨테이너(Container)


  1. UI 또는 CLI 방식으로 요청을 보냅니다.
  2. Control Plane에서 요청을 받고 (어떤 노드에 배치할지 결정)
  3. 워커노드의 포드에서 (하나 이상의)컨테이너를 생성해서 처리(실행)합니다. // 보통의 경우 한개의 포드에서 하나의 컨테이너만 처리
  4. 컨테이너는 요청된 애플리케이션을 실행합니다.

k8s가 제공하는 기능


  • 컨테이너 밸런싱 (container balancing)
    • 포드의 부하 균등화를 수행 : 몇 개의 응용을 복제할 것인지를 알려주면 나머지는 k8s가 처리
  • 트래픽 로드 밸런싱 (traffic load balancing)
    • 응용의 복제본이 둘 이상 있다면 k8s가 트래픽 부하 균등화를 수행하여 클러스터 내부에 적절히 분배
  • 동적 수평 스케일링 (HPA; horizontal pod autoscaling)
    • 인스턴스 수를 동적으로 확장하거나 감축하여 동적 요구사항에 대응하면서 시스템 자원을 효율적으로 활용
  • 오류 복구 (error recovery)
    • 포드와 노드를 지속적으로 모니터링하고 장애가 발생하면 새 포드를 실행하여 지정된 복제본의 수를 유지
  • 롤링 업데이터 (rolling update)
    • 지연 시간을 적용하고 순차적으로 업데이트 배포함으로써 문제가 발생하더라도 서비스를 정상 유지할 수 있음
  • 스토리지 오켓흐트레이션 (storage orchestration)
    • 원하는 응용에 다양한 스토리지 시스템 (Amazone EBS, Google GCE Persistent Disk 등)을 마운트 할 수 있음
  • 서비스 디스커버리 (service discovery)
    • 태생적으로 수명이 짧은 포드의 동적 성질을 관리하기 위하여 자체 DNS기반으로 서비스를 동적 바인딩 할 수 있는 기능을 제공
DNS : 도메인 이름을 IP주소로 변환해주는 서비스. e.g. www.naver.com 도메인(사람이 기억하기 쉬운)을 컴퓨터가 이해할 수 있는 주소인 IP로 변환해주는것 142.xxx.xxx 처럼.


k8s pod의 생명주기 (life cycle)]


  • kubectl을 통해서 API 서버에 포드의 생성을 요청

    • (업데이트가 있을 때마다) API 서버는 etcd에 기록하고 클러스터의 상태를 최신으로 유지 (하려고 함)
  • 컨트롤러 매니저는 포드를 생성하고, 이 상태를 API 서버에 전달

    • 아직 어떤 워커 노드에 포드를 적용할지는 결정하지 않은 상태
  • 스케줄러는 포드가 생성되었다는 정보를 인지하고, 이 포드를 어떤 워커 노드에 적용할지ㅡㄹ 결정해서 해당 노드에 포드의 실행을 요청

  • 해당 노드의 kubelet이 CRI 에 요청하여 포드가 만들어지고 사용 가능한 상태가 됨

  • k8s는 절차적인 구조가 아닌 선언적인 구조를 가지고 있음

    • 각 요소가 추구하는 상태(desired state)를 선언하면 현재 상태(current state)와 비교하고 지속적으로 맞추어 가려고 노력하는 구조

k8s 오브젝트


기본 오브젝트

오브젝트설명
Pod한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위. (언제든지 죽을 수 있음)
Namespacek8s 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹
Volume포드가 생성될 때 포드에서 사용할 수 있는 디렉토리를 제공
Service유동적인 포드들에 대한 접속을 안정적으로 유지하도록 클러스터 내/외부에 연결하는 역할

디플로이먼트 (Deployment)
기본 오브젝트들보다 효 율적으로 작동할 수 있도록 조합하고 추가로 구현한 것
레플리카셋(replicaset)오브젝트를 합쳐 놓은 형태로 단순하게 생각할 수 있음

k8s 인프라 구축


로컬 : 개인, 한 대의 컴퓨터

  • kubeadm, docker desktop 등을 설치, 웅용함으로서 로컬 환경에 간단한 클러스터 구성 가능
  • 개발 단계에서의 테스트 등에 이용

public clouds : 클라우드 업체(AWS, GCP 등)에서 소유한 인프라를, 인터넷을 통해 공유 형태로 제공, 사용.

  • Amazon의 AWS EKS (Elastic Kubernetes Services)
  • GCP (Google Cloud Platform)의 GKE (Goolgle Kubernetes Engine)
  • Microsoft의 AKS (Azure Kubernetes Service)

On-perm : 자체 인프라, 기업의 자사 시스템 운용.

  • SUSE의 Rancher
  • RedHat의 Openshift

0개의 댓글