프로그래머스 데브코스 웹 풀사이클 17주차 - 4

geun·2024년 3월 7일
0

데브코스

목록 보기
63/79
post-thumbnail

쿠버네티스

마이크로 서비스 아키텍처

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

쿠버네티스란?

컨테이너 오케스트레이션 솔루션

  • 다수의 컨테이너들 관리
  • 자동 배포, 배포된 컨테이너의 동작 보증, 부하에 따른 동적 확장

도커와 잘 어울리는 실행 환경 도구

  • 도커 컨테이너들을 클러스터 내에 실행하고 관리하는데 적합
  • 지속적 통합/인도에 유효하게 적용 가능
  • 컨테이너는 pod라고 불리는 쿠버네티스 오브젝트와 연관하여 실행

쿠버네티스 클러스터의 구성 요소

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

  • 마스터 노드
    kuubectl
    API 서버, etcd - 클러스터의 중심역할을 하는 구성요소들
    컨트롤러 매니저, 스케줄러

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

    쿠버네티스가 제공하는 기능

    컨테이너 밸런싱

  • 포드의 부하 및 균등화 수행

    트래픽 로드 밸런싱

  • 응용의 복제본이 둘 이상 있다면 쿠버네티스가 트래픽 부하 균등화를 수행하여 클러스터 내부에 적절히 분배

    동적 수평 스케일링

  • 인스턴스 수를 동적으로 확장하거나 감축하여 동적 요구사항에 대응하면서 시스템 자원을 효율적으로 활요

    오류 복구

  • 포드와 노드를 지속적으로 모니터링하고 장애가 발생하면 새 포드를 실행하여 지정된 복제본의 수를 유지

    롤링 업데이트

  • 지연시간을 적용하고 순차적으로 업데이트 배포함으로써 문제가 발생하더라도 서비스를 정상 유지할수 있음

    스토리지 오케스트레이션

  • 원하는 응용에 다양한 스토리지 시스템을 마운트할 수 있음

    서비스 디스커버리

  • 태생적으로 수명이 짧은 포드의 동적 성질을 관리하기 위하여 자체 DNS 기반으로 서비스를 동적 바인딩할 수 있는 기능을 제공

쿠버네티스 포드의 생명주기

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

  • API 서버는 etcd에 기록하고 클러스터의 상태를 최신으로 유지

2. 컨트롤러 매니저는 포드를 생성하고, 이 상태를 API 서버에 전달

  • 아직 어떤 워커 노드에 포드를 적용할지는 결정하지 않은 상태

3. 스케줄러는 포드가 생성되었다는 정보를 인지하고, 이 포드를 어떤 워커 노드에 적용할지를 결정하여 해당 노드에 포드의 실행을 요청

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

쿠버네티스는 절차적인 구조가 아닌 선언적인 구조를 가지고 있음

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

쿠버네티스 오브젝트들

기본 오브젝트

  • Pod - 한개 이상의 컨테니어로 단일 목적의 일을 하기 위해 모인 단위
    => 독립적인 공간과 사용가능한 IP를 가지고 있음, 언제든지 죽을 수 있다.

  • Namespace - 쿠버네티스 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹

  • Volume - 포드가 생성될 때 포드에서 사용할 수 있는 디렉토리를 제공

  • Service - 유동적인 포드들에 대한 접속을 안정적으로 유지하도록 클러스터 내/외부에 연결하는 역할

    디플로이먼트

  • 기본 오브젝트들을 보다 효율적으로 작동할 수 있도록 조합하고 추가로 구현한 것

  • 레플리카셋 오브젝트를 합쳐 놓은 형태로 단순하게 생각할 수 있음

    쿠버네티스 인프라 구축

    로컬 환경

  • kubeadm, docker desktop 등을 설치, 운용함으로써 로컬 환경에 간단한 클러스터 구성 가능

  • 개발 단계에서의 테스트 등에 이용

    Public cloud

  • Amazon의 AWS EKS

  • GCP의 GKE

  • Microsoft의 AKS

    On-prem 설치

  • SUSE 의 Rancher

  • RedHat의 OpenShift

    쿠버네티스 디플로이먼트

    Deployment

  • 응용의 배포를 위해 많이 이용되는 쿠버네티스의 오브젝트 형태

  • 동일한 모습의 포드들의 복제본 모음인 레플리카셋을 이용하는 것이 일반적

  • 단순한 레플리카셋에 비하여 동적 업데이트 및 롤백, 배포 버전의 관리 등이 유연하여 응용의 배포에 널리 이용

  • 보통은 상태가 없는 응용의 배포에 이용

    동적 방식

  • 디플로이먼트의 상태를 선언하면 쿠버네티스가 동적으로 의도된 상태가 되도록 레플리카셋 관리

    클러스터 바깥으로 응용 노출

    쿠버네티스 서비스

  • 클러스터 내부의 포드에 의해서 실행되는 응용을 외부에 접근 가능하도록 노출하는 기능을 하는 오브젝트

    노출 대상

  • 특정 포드에서 실행하는 컨테이너의 특정 포드

    서비스의 서로 다른 형태들

  • ClusterIP

  • NodePort

  • LoadBalancer

  • ExternalName

    매니페스트

    쿠버네티스 오브젝트에 대한 명세를 파일로 기록한 것

  • YAML 형태를 이용

    파일에 각 오브젝트에 의도하는 상태를 기술

  • 이것을 오브젝트의 스펙이라고 부름

    이 파일을 이용해

  • 오브젝트 생성 가능

  • 오브젝트 상태 변경 가능 (파일의 내용을 변경하지 않고 다른 파일을 이용하여 오브젝트 상태 변경도 가능)

    자동화가 필요한 환경에서 명령어 라인에 일일이 입력하는 것보다 많이 이용됨

0개의 댓글