Jump to section

쿠버네티스 패턴 소개

URL 복사

패턴은 문제에 대한 반복 가능한 솔루션을 설명합니다. 쿠버네티스 패턴은 컨테이너 기반 애플리케이션 및 서비스에 대한 설계 패턴입니다.  

쿠버네티스는 개발자가 클라우드 네이티브 애플리케이션을 작성할 수 있도록 지원하며 애플리케이션 구축을 위한 애플리케이션 프로그래밍 인터페이스(Application Programming Interface, API) 라이브러리와 툴을 제공합니다. 

그러나 쿠버네티스는 개발자와 아키텍트에게 이를 사용하여 비즈니스의 필요와 목표를 충족하는 완전한 시스템을 구축하는 방법에 대한 가이드라인은 제공하지 않습니다. 

패턴은 아키텍처를 재사용하는 방식입니다. 아키텍처를 직접 완전히 구축하는 대신, 기존 쿠버네티스 패턴을 사용할 수 있으며 이를 통해 모든 것을 의도한 대로 작동하게 할 수 있습니다. 

쿠버네티스로 중요한 비즈니스 서비스를 제공하려 할 때, 시행착오를 통한 학습은 너무 많은 시간이 소요되며 다운타임 및 운영 중단과 같은 문제가 발생할 수도 있습니다. 

패턴은 유사한 문제들을 전체적으로 해결하는 방법을 보여주므로 하나의 청사진이라고 생각하면 좋습니다. 패턴은 하나의 특정한 문제를 수정하는 단계별 지침 이상의 역할을 하기 때문입니다.

패턴은 동일한 솔루션을 제공하는 것이 목적이 아니기 때문에, 경우에 따라 패턴 사용 시 예상과는 다른 결과가 나올 수도 있습니다. 또한 동일한 패턴을 사용하더라도 시스템마다 그 결과가 다를 수도 있습니다. 그러나 두 시스템은 모두 공통적인 특징을 공유하게 됩니다. 

쿠버네티스 패턴을 사용해 개발자는 쿠버네티스를 런타임 플랫폼으로 사용하여 클라우드 네이티브 애플리케이션을 제작할 수 있습니다.

패턴은 쿠버네티스 개발자가 필요로 하는 툴로서, 시스템을 구축하는 방법을 보여줍니다.

  • 기본 패턴은 쿠버네티스의 핵심 개념을 다룹니다. 이러한 패턴은 컨테이너 기반 클라우드 네이티브 애플리케이션을 구축하는 데 있어 기본적인 원칙이자 사례입니다. 
  • 동작 패턴은 기본 패턴에 근거한 패턴을 설명하고 컨테이너와 플랫폼 상호작용의 다양한 유형을 관리하기 위한 개념에 세분화를 추가합니다. 
  • 구조 패턴은 쿠버네티스 포드 내에 컨테이너를 구성하는 것과 연관이 있습니다. 
  • 설정 패턴은 쿠버네티스에서 애플리케이션 설정을 처리하는 다양한 방식에 사용됩니다. 이러한 패턴에는 애플리케이션을 설정에 연결하는 특정 단계가 포함되어 있습니다. 
  • 고급 패턴에는 플랫폼 자체를 확장하는 방법, 컨테이너 이미지를 클러스터 내에 직접 구축하는 방법 등 고급 개념을 포함하고 있습니다.

예측 가능한 수요 패턴

예측 가능한 수요 패턴은 기반 패턴입니다. 이러한 유형의 패턴은 애플리케이션이 컨테이너화된 애플리케이션의 기본 원칙을 준수하는지 확인하고 쿠버네티스를 사용하여 자동화할 수 있도록 합니다. 

예측 가능한 수요 패턴은 모든 컨테이너가 애플리케이션 리소스 요구 사항과 런타임 종속성을 선언해야 하는 이유를 설명합니다. 이러한 요구 사항을 정의함으로써 쿠버네티스는 클러스터 내의 올바른 애플리케이션 배포 위치를 선택할 수 있습니다. 

이러한 패턴을 사용하여 정의할 수 있는 것의 예로는 런타임 종속성, 리소스 프로필, 포드 우선순위, 프로젝트 리소스가 있습니다.

예: 리소스 프로필

CPU, 메모리, 컨테이너의 리소스 요건을 요청과 제한 형식으로 지정해야 합니다. 요청은 필요한 최소 리소스를 뜻하며, 제한은 컨테이너가 소비할 수 있는 최대 리소스를 뜻합니다. 

요청량은 스케줄러에서 포드를 노드에 배치할 때 사용됩니다. 스케줄러는 수용하기 충분한 용량이 있는 노드에 대해서만 포드를 스케줄링합니다.  

리소스 요건이 설정되어 있지 않다면 컨테이너가 가장 낮은 우선 순위로 간주되며, 노드에 사용 가능한 리소스가 없을 경우 가장 먼저 탈락합니다.

설정 패턴

모든 애플리케이션에는 설정이 필요합니다. 소스 코드에 설정을 저장하는 방법을 간편하게 사용할 수 있지만 이 경우 애플리케이션 이미지를 재생성하지 않고 설정을 유연하게 조정할 수 없습니다. 외부 설정을 사용하면 환경에 따라 조정할 수 있습니다.

설정 패턴은 각기 다른 개발, 통합, 프로덕션 환경에 대해 외부 설정을 사용해 애플리케이션을 맞춤 설정하고 조정할 수 있도록 지원합니다. 

예: EnVar 설정

EnVar 설정 패턴은 보편적으로 지원되는 환경 변수가 설정을 표면화하는 데 사용될 수 있는 소규모의 설정 변수에 가장 이상적입니다. 

애플리케이션 설정을 표면화하면 애플리케이션을 재구축해야 하는 하드코드 설정과 달리 애플리케이션을 구축한 후에도 설정을 변경할 수 있습니다. 

환경 변수를 사용하여 설정을 표면화하면 어떠한 운영 체제에서도 이러한 변수를 설정할 수 있고 모든 프로그래밍 언어로 액세스 가능하기 때문에 원활하게 작동합니다. 

환경 변수가 있는 경우 하드코드된 기본값은 일반적으로 빌드 도중 정의되어 런타임 도중 덮어쓰기됩니다.

쿠버네티스에서 변수는 배포 또는 복제본 세트와 같은 컨트롤러의 포드 사양에 바로 설정할 수 있습니다. 값을 바로 환경 변수와 연결할 수 있으며 이는 포드 정의와 개별적으로 관리할 수 있습니다.

Kubernetes Secrets(민감한 데이터의 경우)와 ConfigMaps(민감하지 않은 설정)에 위임할 수도 있습니다

고급 패턴

이러한 패턴은 복잡한 토픽과 최신 패턴 구현을 포함하고 있습니다. 컨트롤러, 오퍼레이터, 탄력적 확장, 이미지 빌더 패턴은 모두 고급 쿠버네티스 패턴의 한 예입니다.

예: 탄력적 확장 

탄력적 확장 패턴은 포드 복제본 수를 채택해 애플리케이션을 수평으로 확장하거나, 포드의 리소스 요건을 채택해 수직으로 확장합니다. 또한 클러스터 노드의 수를 변경해 클러스터 자체를 확장할 수도 있습니다.

수동으로 확장을 처리할 수도 있지만, 탄력적 확장 패턴은 쿠버네티스가 부하에 따라 자동으로 확장할 수 있도록 허용합니다. 

쿠버네티스를 통해 컨테이너의 리소스, 원하는 서비스 복제본, 클러스터의 노드 수를 변경할 수 있습니다. 또한 외부적 부하와 용량 관련 이벤트를 모니터링하고, 컨테이너 상태를 분석하며 원하는 성능을 위해 확장할 수 있습니다. 

수평적 포드 자동 스케일링을 통해 고정되지 않은 다양한 부하를 처리할 수 있는 충분한 용량을 보유한 애플리케이션 용량을 정의할 수 있습니다. 수평적 포드 자동 스케일러는 포드를 확장하는 데 사용됩니다. 

수평적 포드 자동 스케일러를 사용하려면 메트릭 서버, 리소스 사용 데이터의 클러스터 전반 애그리게이터를 활성화하고 CPU 리소스 제한을 정의해야 합니다. 수평적 포드 자동 스케일러에 대한 정의는 커맨드라인에서 생성할 수 있습니다. 

수평적 포드 자동 스케일러 컨트롤러는 커맨드라인에서 이전에 설정한 정의에 따라 스케일링과 관련된 포드에 대한 메트릭을 지속적으로 검색합니다. 

또한 현재 가치 및 목표 가치를 기반으로 필요한 만큼의 복제본 수를 계산하고, 선언된 복제본을 변경하여 새로운 목표 상태를 유지관리합니다.

Red Hat® OpenShift®는 엔터프라이즈 레디 쿠버네티스 플랫폼으로, 개발자는 셀프 서비스 환경을 구축하여 모든 인프라에서 자동화된 풀 스택 오퍼레이션을 구현할 수 있습니다.

Red Hat OpenShift에는 레지스트리, 네트워킹, 텔레메트리, 보안, 자동화, 서비스 등을 비롯한 부가 기술이 모두 내장되어 있어서 기업이 강력하고 실효성있는 쿠버네티스를 구축할 수 있습니다.

Red Hat OpenShift를 사용하면 개발자는 확장성, 제어, 오케스트레이션을 통해 컨테이너화된 새 애플케이션을 구축 및 호스팅하고 클라우드에 배포함으로써 우수한 아이디어를 새로운 비즈니스에 신속하게 연결할 수 있습니다.

추가 자료

문서

스테이트풀과 스테이트리스 비교

스테이트풀과 스테이트리스는 상호 작용 상태가 얼마나 오래 기록되는지, 해당 정보가 어떤 식으로 저장되는지를 기준으로 구별할 수 있습니다.

문서

Quarkus란?

Quarkus는 Java 가상 머신(Java Virtual Machine, JVM)과 네이티브 컴파일을 위해 만들어진 쿠버네티스 네이티브 Java 스택으로, 특히 컨테이너에 Java를 최적화합니다.

문서

서버리스란?

서버리스(serverless)란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델입니다.

클라우드 네이티브 애플리케이션에 대한 자세한 내용

제품

선택한 인프라에서 애플리케이션 출시 테스트를 완료한 통합 서비스 세트를 포함하는 엔터프라이즈 애플리케이션 플랫폼입니다.

여러 서비스를 서로 분리하여 독립적으로 생성, 확장, 배포할 수 있게 하는 분산형 클라우드 네이티브 통합 플랫폼입니다.

리소스

e-book

클라우드 네이티브와 하이브리드 클라우드의 융합: 전략 가이드

E-book

클라우드 네이티브 애플리케이션 구현을 위한 과정

교육

무료 교육 과정

Developing Cloud-Native Applications with Microservices Architectures