보람찬 코기의 개발자 블로그
article thumbnail
반응형

대학교 스터디 그룹- 쿠버네티스 스터디 20230105 자료입니다.

 

클러스터(Cluster)란?

  • 두개 이상의 컴퓨터가 하나로 묶어서 하나의 시스템같이 작업을 실행하기 위해 함께 동작하는 것.
  • 클라이언트들에게 고가용성의 서비스를 제공한다.
  • 클러스터로 묶인 한시스템에 장애가 발생하면, 정보의 제공 포인트는 클러스터로 묶인 다른 정상적인 서버로 이동한다.
  • 클러스터는 사용자로 하여금 서버 기반 정보를 지속적이고, 끊기지않게 제공받을수 있게 한다.

클러스터 유형들을 알아보자

1. 고계산용 클러스터( HPC : High-Performance Cluster )

  • 고성능의 계산능력(동시 연산)을 제공하기 위한 목적으로 제작 (슈퍼 컴퓨터, 과학자용 고성능 컴퓨터)
  • 사물 인터넷, 인공지능, 머신러닝과 같은 기술 사용에 따른 막대한 양의 데이터를 빠르게 처리하고 사용하는 것에 쓰임
  • 컨테이너 기술이 도입되어 HPC 부문이 탄력을 받게 됨
  • 여러대의 노드를 이용하여 하나의 작업을 수행하는 병렬 구조

주요 장점

  • 속도: HPC에는 최신 CPU, 그래픽 처리 장치(GPU) 및 원격 직접 메모리 액세스(RDMA) 같이 지연 시간이 짧은 네트워킹 패브릭이 올 플래시 로컬 및 블록 스토리지 장치에 결합되어 있기 때문에 몇 주 또는 몇 개월이 아닌 단 몇 분 만에 대규모 계산을 수행할 수 있습니다.
  • 비용: 응답 시간을 단축하면 시간과 비용 낭비를 줄일 수 있습니다. 또한 소기업과 스타트업은 클라우드 기반 HPC를 사용하여 HPC 워크로드를 비용 효과적으로 실행할 수 있습니다. 사용한 서비스에 대해서만 비용을 지불하고 필요에 따라 확장 및 축소를 할 수 있기 때문입니다.

2. 부하분산 클러스터( LVS : Linux Virtual Server Cluster)

  • 대규모의 서비스를 제공하기 위한 목적으로 사용되는 클러스터 기법
  • 이용자가 평균적으로 많은 웹 서비스에 활용가치 높음
  • 여러 대의 리얼 서버에 부하를 분산해 주는 로드 밸런서(Load Balancer)를 두고 운영하는 방법

LVS 클러스터의 웹요청 처리과정을 살펴보면 다음과 같다.

  1. 로드밸런서에게 인터넷으로부터 웹요청이 들어온다.
  2. 로드밸런서는 정해진 알고리즘에 따라 서비스를 수행할 server를 선택하고 웹요청을 forwarding 한다.
  3. forwarding된 웹요청은 선택된 server에 전달된다.
  4. 웹요청을 받은 서버는 이에 대한 응답을 로드밸런서에게 제공한다.
  5. 로드밸런서는 제공받은 데이타를 웹요청을 한 컴퓨터로 재 전송해준다.

 부하분산용 클러스터중에서도 이러한 방식을 NAT(Network Address Transaction)라고한다.

 이 방식의 장점은 server가 어떤 OS이든지 상관이 없다는 것이다.

 

 

LVS클러스터에서 어떠한 이슈로 로드밸런서가 고장났다면 클러스터 전체는 마비가 될것이다.

또한 서버 중 하나가 고장이 났다면 일부 사용자는 원하는 데이터를 제공 받지 못하게 된다.

 

이러한 문제를 극복하고자 구성한 것은 아래와 같다

3. 고가용 클러스터(HA : High-Availability cluster)

 

  • 하나의 시스템처럼 작동하여 다운타임을 최소화하고 지속적인 서비스를 가능하도록 한다.
  • 주로 미션 크리티컬한 업무에 사용 -  Load Balancer 백업을 만들어 이슈 발생시 백업으로 서비스 전환으로 지속적 서비스 제공

이후 우리는 쿠버네티스 학습에 목적을 두었기에 이어서 쿠버네티스(K8S)의 클러스터링도 설명한다.

쿠버네티스(kubernetes)란?

  • 컨테이너 운영환경 중 하나.
  • 컨테이너화된 애플리케이션의 자동 디플로이, 스케일링 등을 제공하는 관리시스템으로 오픈소스기반.
  • 컨테이너화된 애플리케이션 환경(Containerized Application)을 탄력적으로 실행

 

목적?

 

https://www.xenonstack.com/insights/kubernetes-deployment/

  • 서비스 디스커버리와 로드 밸런싱 - DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출
  • 스토리지 오케스트레이션 - 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 
  • 자동화된 롤아웃과 롤백 - 원하는 상태를 서술하고 현재 상태를 원하는 상태로 설정한 속도에 따라 변경 가능 
  • 자동화된 빈 패킹 - 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 제공 
  • 자동화된 복구(self-healing) - 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체
  • 시크릿과 구성 관리 - 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리

핵심 5가지

1. 선언적 구성 기반의 배포 환경

  • 쿠버네티스에서는 동작을 지시하는 개념보다는 원하는 상태를 선언하는 개념
  • 쿠버네티스는 원하는 상태와 현재의 상태가 상호 일치하는지를 지속적으로 체크하고 업데이트한다.

2. 기능 단위의 분산

 

3.클러스터 단위 중앙 제어

  • 쿠버네티스에서는 전체 물리 리소스를 클러스터 단위로 추상화하여 관리한다. (마스터 노드)

4.동적 그룹화

  • 쿠버네티스의 구성 요소들에는 쿼리 가능한 레이블(Label)과 메타데이터용 어노테이션(Annotation)에 임의로 키-값 쌍을 삽입할 수 있다.
  • 특징적인 내역을 추적할 수 있다.

 

5. API기반 상호작용

  • 쿠버네티스의 구성 요소들은 오직 Kubernetes API server를 통해서만 상호 접근이 가능한 구조를 가진다.

 

 

설명은 이정도로 하고, 클러스터를 알아보도록 하자.

쿠버네티스 클러스터?

  쿠버네티스 아키텍처에서 클러스터(Cluster) 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합을 의미한다.

 

  • 쿠버네티스에서는 호스트 환경에 구성된 자원들을 클러스터 단위로 추상화해서 관리한다.
  • 하나의 클러스터 안에는 클러스터 내부 요소들을 제어하는 컨트롤 플레인(Control Plane) 역할을 수행할 마스터 노드(Master Node)를 두고 (위의 자료에서는 파란 상자), 관리자는 이 마스터 노드를 통해 클러스터 전체를 제어하는 구성을 따른다.

쿠버네티스 클러스터 구성을 선단의 개념에 비유해보자.

온라인 인프라 영역에서의 컨테이너가 화물선에 선적되는 실물 컨테이너 개념에 비유된다면, 

쿠버네티스 클러스터는 컨테이너들을 실은 컨테이너선과 이를 관리하는 통제함으로 이루어진 선단의 개념에 비유할 수 있는 것이다.

 

클러스터의 설계 전략

예시) 3개의 앱에는 개발/테스트/운영 환경이 있다

⇒ 클러스터를 어떻게 설계하는게 좋을지?

1. 대규모 공유 클러스터 -  모든 워크로드를 동일한 클러스터에서 실행하기

장점

  1. 효율적인 리소스 사용
    • 클러스터당 마스터 노드가 3개가 필요하므로, 1개의 마스터노드가 3개면 된다
    • load balancer, ingress controller, auth, logging, monitoring 등 하나로 관리할 수 있다
  2. 비용이 저렴하다
    • 위의 장점으로 리소스를 더 적게 사용할 수 있으므로 저렴하다
  3. 관리가 쉽다
    • kubernetes 버전 업그레이드
    • CI/CD 파이프라인 설정
    • CNI 플러그인 설치
    • 사용자 인증 시스템 설정

단점

  1. 단일 실패 지점 (single failure point)
    • 쿠버네티스 업그레이드시에 예상치 못한 장애 발생 가능성
    • 클러스터 구성요소가 예상대로 작동하지 않을 수 있음 ex) CNI플러그인
    • 클러스터 구성요소 중 하나에 잘못된 구성이 만들어지면 인프라 장비 자체에 대한 중단이 발생
  2. 보안에 취약
    • 쿠버네티스는 격리 및 보안이 아니라 공유를 위해 설계
  3. 하드한 멀티 테넌시가 없다
    • 쿠버네티스 클러스터는 리소스를 공유하므로 서로 다른 앱이 서로에게 영향을 끼칠 수 있는 방법이 존재
    • CPU나 메모리와 같은 특정 공유 리소스를 독점하여 동일한 노드에서 실행 되는 다른 앱을 고갈 시킬 수 있다
  4. 클러스터는 무한히 커질 수 없다
    • 클러스터는 약 5000개의 노드 150000개의 파드, 300000개의 컨테이너로 정의된다

2. 소규모 공유 클러스터 - 각 전개 유닛에 대해 개별 Kubernetes 클러스터를 사용

장점

  1. 오류가 퍼지는 반경 감소
    • 클러스터가 중단되면 이 클러스터에서 실행되는 워크로드만 제한이 되며 모든 워크로드에는 영향을 받지 않는다
  2. 격리
    • 개별 클러스터에서 실행되는 워크로드는 CPU, Memory ,OS, Network 등 리소스를 공유하지 않으므로 보안에 큰  이점

단점

1. 비효율적인 리소스 사용 

  • 각각의 클러스터 설정시 비효율성 UP

2. 막대한 비용

 

 

3.어플리케이션 별 클러스터 - 특정 애플리케이션의 모든 인스턴스에 대해 별도의 클러스터를 제작

장점

  1. 클러스터는 앱에 맞게 사용자 지정할 수 있음
    • 앱에 특정 요구 사항이 있는 경우 이러한 요구 사항은 다른 클러스터에 영향을 주지 않고 해당 클러스터에 설치할 수 있다

단점

  1. 같은 클러스터의 다른 환경
    • 다른 환경의 어플리케이션 인스턴스가 같은 클러스터에서 실행된다는 단점이 있음
    • 이는 개발 환경과 운영환경이 서로 영향을 미칠 수 있다는 것을 의미한다

4. 소규모 일회성 클러스터 - 환경별로 별도의 클러스터 제작

장점

  • 운영환경의 격리
  • 각 환경에 맞게 커스텀 가능

단점

  1. 어플리케이션 간의 격리가 부족으로 인한 보안 문제 가능성
  2. 환경별로 모두 별도 클러스터 구성 ex) GPU가 필요한경우: 모든 환경에서 GPU를 사용해야 하므로 비용부분에 있어 효율적이지 못하다.

클러스터의 세부적인 내용은 더 학습하고 정리 해보겠다.

 


분산 시스템(Distributed system) 이란?

  • 사용자를 위한 단일 컴퓨터를 형성하기 위해 함께 작동하는 컴퓨터들의 집합이다.
  • 하나의 공유상태를 가지며 동시에 작동한다.
  • LAN 같은 네트워크 인프라를 필요로 한다.
  • 자원의 공유로 속도가 빠르고 신뢰성이 높다.

https://medium.com/the-modern-scientist/distributed-system-vs-centralized-system-d2ad232ac259

분산 시스템의 종류

  • Client-server  - 보안과 지속적인 관리의 용이성  , 서버에서 통신 병목 현상이 발생할 수 있음
  • Three-tier - 클라이언트(1) ,애플리케이션 서버 (2), 데이터베이스 서버(3)계층으로 나뉨. 병목현상 줄이고 성능 향
  • N-tier - 3계층 아키텍처에서 1,2 계층을 합쳐 Client Tier , 3계층을 Data Tier 로 사용
  • Peer to Peer - 클라이언트 컴퓨터와 서버 컴퓨터 사이에는 구분이 없으며, 모든 컴퓨터가 모든 작업을 수행할 수 있다. (토렌트, 가상화폐, 채굴기법)

 

 

 

 

 

 

 

 

참조 https://www.oracle.com/kr/cloud/hpc/what-is-hpc/

 

고성능 컴퓨팅이란 무엇인가? | Oracle 대한민국

HPC가 중요한 이유 HPC는 수십 년 동안 학술 연구 및 산업 혁신에서 중요한 부분을 차지했습니다. HPC는 엔지니어, 데이터 사이언티스트, 설계자 및 기타 연구자들이 기존 컴퓨팅보다 훨씬 적은 시

www.oracle.com

https://blog.pages.kr/108

 

리눅스를 이용한 클러스터링 구축법

Cluster Overview [ 목 차 ] 1. 클러스터 2. 클러스터의 필요성 3. 클러스터의 종류 3-1. 고계산용 클러스터 (HPC) 3-2. 부하분산 클러스터 (LVS) 3-3. 고가용성 클러스터 (HA) 3-4. 그외의 클러스터 분류 4. 클러

blog.pages.kr

https://seongjin.me/kubernetes-cluster-components/

 

쿠버네티스의 클러스터 개념과 구성 컴포넌트 알아보기

이번 글에서는 쿠버네티스의 핵심 제어 단위인 클러스터(Cluster)와 구성 컴포넌트를 알아본다. 클러스터의 개념과 내부 구조를 먼저 살펴보고, 컨트롤 플레인(Control Plane)과 노드(Node)를 구성하는

seongjin.me

https://jamong1.notion.site/jamong1/20230105-9913164de643411fa1e89854cabe1ff3

 

20230105 쿠버네티스 스터디

클러스터 설계 전략

jamong1.notion.site

 

반응형
profile

보람찬 코기의 개발자 블로그

@BoChan

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!