[k8s] 클러스터의 구성 요소

안지환·2024년 5월 24일
0

DevOps

목록 보기
5/6

1. 쿠버네티스란?

쿠버네티스는 컨테이너 오케스트레이션 솔루션입니다.

  • 다수의 컨테이너를 관리하면서 자동 배포, 배포된 컨테이너의 동작 보증, 부하에 따른 동적 확장 등의 기능을 담당합니다.
  • 도커 컨테이너들을 클러스터 내에 실행하고 관리하는 데 적합합니다.
  • 지속적 통합과 인도(CI/CD)에 유효하게 적용할 수 있습니다.
  • 컨테이너는 포드(pod)라고 불리는 k8s 오브젝트와 연관하여 실행합니다.

2. k8s 클러스터

클러스터의 하나 이상의 노드로 구성되어 있음

마스터 노드

  • kubectl
  • api 서버, etcd 클러스터의 중심 역할을 하는 구성 요소들
  • 컨트롤러 매니저, 스케줄러

워커 노드

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

3. 포드와 컨테이너

4. k8s가 제공하는 기능

  • 컨테이너 밸런싱
    • 포드의 부하 균등화를 수행 - 몇 개의 응용을 복제할 것인지를 알려주면 나머지는 k8s가 처리합니다.
  • 트래픽 로드 밸런싱
    • 응용의 복제본이 둘 이상 있다면 k8s가 트래픽 부하 균등화를 수행하여 클러스터 내부에 적절히 분배합니다.
  • 동적 수평 스케일링
    • 인스턴스 수를 동적으로 확장하거나 감축하여 동적 요구사항에 대응하면서 시스템 자원을 효율적으로 활용
  • 오류 복구
    • 포드와 노드를 지속적으로 모니터링하고 장애가 발생하면 새 포드를 실행하여 지정된 복제본의 수를 유지합니다.
  • 롤링 업데이트
    • 지연 시간을 적용하고 순차적으로 업데이트 배포함으로써 문제가 발생하더라도 서비스를 정상 유지할 수 있습니다.
  • 스토리지 오케스트레이션
    • 원하는 응용에 다양한 스토리지 시스템(Amazon EBS, Google CGE Persistent Disk)을 마운트 할 수 있습니다.
  • 서비스 디스커버리
    • 태생적으로 수명이 짧은 포드의 동적 성질을 관리하기 위하여 자체 DNS 기반으로 서비스를 동적 바인딩할 수 있는 기능을 제공합니다.

5. k8s Pod의 생명 주기(Life Cycle)

  • kubectl을 통해서 API 서버에 포드의 생성을 요청합니다.
  • 컨트롤러 매니저는 포드를 생성하고, 이 상태를 API 서버에 전달합니다.
  • 스케줄러는 포드가 생성되었다는 정보를 인지하고, 이 포드를 어떤 워커 노드에 적용할지를 결정해서 해당 노드에 포드의 싱행을 요청합니다.
  • 해당 노드의 kubelet이 CRI에 요청하여 포드가 만들어지고 사용 가능한 상태가 됩니다.
  • k8s 는 절차적인 구조가 아닌 선언적인 구조를 가지고 있습니다.
    • 각 요소가 추구하는 상태를 선언하면 현재 상태와 비교하고 지속적으로 맞추어 가려고 노력하는 구조입니다.
  1. 쿠버네티스란?
    쿠버네티스는 컨테이너 오케스트레이션 솔루션입니다.
  • 다수의 컨테이너를 관리하면서 자동 배포, 배포된 컨테이너의 동작 보증, 부하에 따른 동적 확장 등의 기능을 담당합니다.
  • 도커 컨테이너들을 클러스터 내에 실행하고 관리하는 데 적합합니다.
  • 지속적 통합과 인도(CI/CD)에 유효하게 적용할 수 있습니다.
  • 컨테이너는 포드(pod)라고 불리는 k8s 오브젝트와 연관하여 실행합니다.

2. k8s 클러스터

클러스터의 하나 이상의 노드로 구성되어 있음

마스터 노드

  • kubectl
  • api 서버, etcd 클러스터의 중심 역할을 하는 구성 요소들
  • 컨트롤러 매니저, 스케줄러

워커 노드

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

3. 포드와 컨테이너

4. k8s가 제공하는 기능

  • 컨테이너 밸런싱
    • 포드의 부하 균등화를 수행 - 몇 개의 응용을 복제할 것인지를 알려주면 나머지는 k8s가 처리합니다.
  • 트래픽 로드 밸런싱
    • 응용의 복제본이 둘 이상 있다면 k8s가 트래픽 부하 균등화를 수행하여 클러스터 내부에 적절히 분배합니다.
  • 동적 수평 스케일링
    • 인스턴스 수를 동적으로 확장하거나 감축하여 동적 요구사항에 대응하면서 시스템 자원을 효율적으로 활용
  • 오류 복구
    • 포드와 노드를 지속적으로 모니터링하고 장애가 발생하면 새 포드를 실행하여 지정된 복제본의 수를 유지합니다.
  • 롤링 업데이트
    • 지연 시간을 적용하고 순차적으로 업데이트 배포함으로써 문제가 발생하더라도 서비스를 정상 유지할 수 있습니다.
  • 스토리지 오케스트레이션
    • 원하는 응용에 다양한 스토리지 시스템(Amazon EBS, Google CGE Persistent Disk)을 마운트 할 수 있습니다.
  • 서비스 디스커버리
    • 태생적으로 수명이 짧은 포드의 동적 성질을 관리하기 위하여 자체 DNS 기반으로 서비스를 동적 바인딩할 수 있는 기능을 제공합니다.

5. k8s Pod의 생명 주기(Life Cycle)

  • kubectl을 통해서 API 서버에 포드의 생성을 요청합니다.
  • 컨트롤러 매니저는 포드를 생성하고, 이 상태를 API 서버에 전달합니다.
  • 스케줄러는 포드가 생성되었다는 정보를 인지하고, 이 포드를 어떤 워커 노드에 적용할지를 결정해서 해당 노드에 포드의 싱행을 요청합니다.
  • 해당 노드의 kubelet이 CRI에 요청하여 포드가 만들어지고 사용 가능한 상태가 됩니다.
  • k8s 는 절차적인 구조가 아닌 선언적인 구조를 가지고 있습니다.
    • 각 요소가 추구하는 상태를 선언하면 현재 상태와 비교하고 지속적으로 맞추어 가려고 노력하는 구조입니다.

6. k8s 오브젝트들

  • 기본 오브젝트
    • Pod - 한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위
    • Namespace - k8s 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹
    • Volume - 포드가 생성될 때 포드에서 사용할 수 있는 디렉토리를 제공
    • Service - 유도적인 포드들에 대한 접속을 안정적으로 유지하도록 클러스터 내/외부에 연결하는 역할
  • 디플로이먼트
    • 기본 오브젝트들을 보다 효율적으로 작동할 수 있도록 조합하고 추가로 구현한 것
    • 레플리카셋 오브젝트를 합쳐 놓은 형태로 단순하게 생각할 수 있

7. k8s 인프라 구축

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

Public Clouds

  • Amazon의 AWS EKS
  • GCP의 GKE
  • Microsoft의 AKS

On-proem

  • SUSE의 Rancher
  • RedHat의 OpenShift
profile
BackEnd Developer

0개의 댓글

관련 채용 정보