본문 바로가기
엑셈 경쟁력/전문가 기술기고

클라우드 A to Z | Kubernetes 디자인 패턴

by EXEM 2021. 9. 29.

 

Kubernetes에는 서비스의 안정적인 운영을 위해 여러 가지 디자인 패턴이 존재합니다. 이 시간에는 Kubernetes에 적용된 많은 디자인 패턴 중에 가장 중요한 패턴 10가지를 살펴보고자 합니다.

 

 Kuberentes의 디자인 패턴은 크게 핵심 패턴’, ‘구조 패턴’, ‘행위 패턴’, ‘고급 패턴’의 4가지로 구분할 수 있고, 그 패턴들의 상세한 내용은 아래와 같습니다.

 

핵심 패턴

핵심 패턴은 세부적으로 ‘Health Probe 패턴’, ‘Predictable Demands 패턴’, ‘Automated Placement 패턴이라는 총 3개의 패턴으로 분류할 수 있습니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Health Probe 패턴

Health Probe는 운영 중인 컨테이너 애플리케이션이 정상적으로 동작하는지 체크하는 API를 구현하는 디자인 패턴을 의미합니다. Cloud-Native한 애플리케이션은 쿠버네티스의 입장에서 컨테이너가 정상적으로 기동되었는지 그리고 외부에서 들어온 요청을 받을 준비가 되었는지를 감지할 수 있는 API가 필요합니다. 쿠버네티스는 애플리케이션이 가지고 있는 API를 통해서 파드에 장애가 발생했는지 등을 체크하여 라이프 사이클을 관리합니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Predictable Demands 패턴

Predictable Demands 패턴은 컨테이너가 사용할 리소스의 양을 미리 정의하는 것을 말합니다. Container는 클러스터 내의 노드 위에 배포되게 되는데, 만일 컨테이너의 리소스의 양을 미리 정의하지 않으면 노드의 모든 리소스를 점유할 수 있다는 문제점이 있습니다. 따라서 이러한 문제를 방지하고자 쿠버네티스에서는 Predictable Demands 패턴을 통해 컨테이너가 사용할 리소스를 미리 정의할 수 있게 합니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Automated Placement 패턴

Automated Placement 패턴은 여러 노드로 구성된 클러스터에서 배포하고자 하는 워크로드들을 어떤 노드에 분배할지를 결정하는 패턴입니다. 쿠버네티스 스케줄러가 새로운 파드를 어떠한 노드에 배포할지를 결정해야 합니다. 스케줄러는 새로운 파드를 어떤 노드에 배포할지 결정하기 위해서 노드에 리소스는 충분한지, 스케줄링 정책에는 걸리지 않는지 등을 점검하여 파드가 배포되기 가장 적합한 노드에 파드를 배포합니다. 이 패턴은 쿠버네티스의 스케줄링 알고리즘 원리를 설명하는 디자인 패턴이라고 보시면 됩니다.

 

구조 패턴

구조 패턴은 파드 내의 컨테이너들을 조직화하고, 구조화하는 데에 초점을 맞춥니다. 이 패턴에는 세부적으로 ‘Init Container 패턴‘Sidecar 패턴이 있습니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Init Container 패턴

Init Container 패턴은 메인 컨테이너를 실행하기 전에 초기화 작업을 해주는 컨테이너를 실행시키는 패턴을 말합니다. 예를 들어, 메인 컨테이너를 실행하기 전에 Init Container를 실행시켜 특정 디렉토리의 권한을 변경한다거나 특정 명령어를 미리 사용한 후, 메인 컨테이너를 실행시키는 과정이라고 보시면 됩니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Sidecar 패턴

Sidecar 패턴은 이미 존재하는 컨테이너의 기능을 컨테이너의 변경 없이 강화하거나 확장하는 방법을 설명하는 것이라고 보면 됩니다. Sidecar 패턴은 하나의 파드 내에 여러 컨테이너를 동시에 실행하고 운영하는 것을 의미합니다. 이것을 통해 주요 컨테이너는 다른 컨테이너들과 긴밀한 작업을 할 수 있게 됩니다.

 

행위 패턴

행위 패턴은 파드의 라이프 사이클을 보증하기 위한 패턴을 의미합니다. 워크로드의 타입을 통해 파드는 Batch Job이 완료되거나 파드가 어떻게 배포될지를 의미합니다. 그것은 데몬 형태의 서비스나 싱글톤 형태의 서비스로 운영됩니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Batch Job 패턴

Batch Job 패턴은 파드를 Job 형태로 배포하는 패턴입니다. 예를 들어, 머신러닝에서 지도 학습을 위해 준비된 모든 학습데이터를 입력시키는 과정을 Job이라고 보고, 이 데이터 입력 과정을 파드로 배포한다고 보시면 됩니다. 이 예를 통해 알 수 있듯이, Batch Job 패턴의 파드는 작업 자체가 완료성을 가지며, 작업을 원자적이고 고립된 형태로 어떻게 운영할지를 설명합니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Stateful Service 패턴

Stateful Service 패턴은 상태 값을 갖는 애플리케이션을 만들고 관리하는 방법을 설명합니다. Stateful Service 형태로 배포된 애플리케이션은 네트워킹, 스토리지 같은 구성 요소들을 사용할 때 주로 사용됩니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Service Discovery 패턴

Service Discovery 패턴은 애플리케이션 서비스를 제공하는 인스턴스들을 발견하고 접근하는 것에 대해 설명해줍니다. 이 패턴을 통해 배포된 애플리케이션은 자신이 통신해야 하는 다른 서비스와 연결될 수 있습니다.

 

고급 패턴

이 카테고리에 있는 패턴들은 위에 언급한 패턴들보다 좀 더 복잡하고, 좀 더 높은 레벨의 관리 패턴에 대해 설명합니다. 여기에 소개되는 패턴들은 영구적이며, Kubernetes 자체가 이 패턴 위에 구축된다고 보시면 됩니다.

 

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Controller 패턴

Controller 패턴은 쿠버네티스의 리소스들을 바람직한(Desired) 상태로 유지하고, 모니터링하는 역할을 합니다. 쿠버네티스는 유저가 특정 애플리케이션에 명령을 내리면 애플리케이션이 현재의 상태에서 다른 상태로 변하도록 하고, 해당 상태의 변화를 정기적으로 관찰하는 등의 역할을 하는 여러 컨트롤러로 구성되어있습니다. 이 패턴은 애플리케이션들의 플랫폼을 확장시키기 위한 컨셉으로 동작합니다.

이미지 출처 : 반드시 알아야 할 쿠버네티스 디자인 패턴 10가지

Operator 패턴

Operator는 자동화된 형태로 특정 애플리케이션을 구동하는 데 필요한 데이터들을 CRD(Custom Resource Definitions)를 통해 전달받는 컨트롤러입니다. 오퍼레이터 패턴은 쿠버네티스에서 컨트롤러 패턴을 더 유동적이고 확장할 수 있게끔 합니다. 쿠버네티스를 위한 오퍼레이터들은 계속해서 추가되고 있고, 이 패턴은 복잡한 분산 시스템들을 작동시키는 주요한 형태로 변모하고 있습니다.

 

Summary

오늘날, 쿠버네티스는 가장 유명한 컨테이너 오케스트레이션 플랫폼입니다. 쿠버네티스는 주요 S/W회사들에 의해 공동으로 개발되고 있고, 주요 클라우드 프로바이더들에 의해 서비스로 제공되고 있습니다. 쿠버네티스는 리눅스와 윈도우 시스템 둘 다 지원이 되며, 모든 주요 프로그래밍 언어들을 지원합니다.

 

만일 현재 이 글을 읽고 계신 독자분이 개발자이시거나 아키텍트이시라면, 쿠버네티스는 독자의 현재 또는 미래 운영 환경의 한 부분으로 자리 잡고 있을 것입니다. 따라서, 여기에 설명된 이 패턴들을 단순히 이해하는 것만으로 넘어가기보다는 쿠버네티스를 시작하는 단계에서 쿠버네티스를 더 알기 위한 기초가 되기를 기원합니다.

 

 

 

 

클라우드 네이티브 아키텍처 통합관제 솔루션, CloudMOA
엑셈의 CloudMOA는 쿠버네티스 기반 Service, Application, Database에 대한 모니터링을 고객 환경에 맞추어 서비스형(SaaS) 또는 설치형(On-Premises)으로 제공합니다. 쉽고 편한 쿠버네티스 모니터링을 원하신다면, 👉이곳👈을 방문해주세요!

 

 

 

 

 

 

댓글