쿠버네티스 패턴 - 1장 개요

오정재·2021년 4월 17일
8

쿠버네티스 패턴

목록 보기
2/12
post-thumbnail

🤔 무엇을 얘기할까?

우리가 쿠버네티스 패턴을 알아야하는 이유는 무엇일까요?

쿠버네티스의 리소스들을 추상화 하고 이와 관련된 원칙과 패턴을 잘 이해한다면,
클라우드 네이티브 어플리케이션을 구축하는 데 좋은 지름길이 될 것이기 때문입니다.

이번 장에서는 클라우드 네이티브 어플리케이션이 무엇인지
쿠버네티스에서 사용하는 리소스들을 어떻게 추상화 할 것인지에 대해 살펴볼 것 입니다.

🍏 클라우드 네이티브

2015년 처음 클라우드 네이티브라는 용어를 사용한 리눅스는 CNCF(Cloud Native Computing Foundation)재단을 만들어 클라우드 네이티브로 전환할 수 있는 오픈소스 기술들을 추진하고 관리하였습니다.

그렇다면 클라우드 네이티브란 무엇일까요?

사실 클라우드 네이티브의 배경은 쿠버네티스 패턴 - 0장 쿠버네티스 패턴 에서 설명한 쿠버네티스의 배경에 대한 내용과 같습니다.
따라서 배경을 알아보는 것을 건너뛰도록 하고, 다양한 정의 중 CNCF에서 정의한 클라우드 네이티브에 대해서 알아보겠습니다.

CNCF에서는 클라우드 네이티브를 다음과 같이 얘기하고 있습니다.

  • 퍼블릭, 프라이빗, 하이브리드 클라우드와 같은 동적인 환경에서 확장 가능한 어플리케이션을 개발 및 실행할 수 있게 합니다.
  • Container, Service mesh, Microservices, Immutable infrastructure, Declarative API가 이러한 접근 방식의 예시입니다.
  • 회복성, 관리의 편의성, 가시성을 갖춘 loosely coupled 시스템입니다.
  • 견고한 자동화 기능을 함께 사용하면, 영향이 큰 변경을 최소한의 노력으로 자주, 예측 가능하게 수행할 수 있습니다.

👍 결과적으로 클라우드 네이티브란 클라우드의 이점(위의 내용)을 최대로 활용할 수 있도록 어플리케이션을 구축하고 실행하는 방식을 말합니다.

앞으로 우리는 디자인 패턴을 통해서 클라우드의 이점을 최대로 활용할 수 있도록 하는 것에 집중할 것이고,
이를 토대로 클라우드 네이티브 어플리케이션을 만들 수 있도록 구체화 할 것입니다.

🍏 분산 기본 요소

앞서 클라우드 네이티브 어플리케이션에 대해서 알아보았는데요.
쿠버네티스 디자인 패턴을 얘기하기 전에 기본적인 컨셉이 될 쿠버네티스의 분산 기본 요소 추상화해보려고 합니다.

이번 시리즈에서 쿠버네티스의 분산 기본 요소를 추상화 하기 위해서
가장 먼저 잘 알려진 객체 지향 프로그래밍 언어와의 비교가 필요합니다.

따라서 대표적 객체 지향 프로그래밍 언어인 자바와 비교를 통해서 쿠버네티스의 기본 요소들을 추상화 해볼 것입니다.

자바에는 클래스, 객체, 패키지, 상속, 캡슐화, 다형성 같은 여러 가지 개념이 있습니다.
그리고 자바 런타임은 수명주기 관리 방법에 대해 특정 기능을 제공하고 보장합니다.
또한 자바와 JVM은 어플리케이션을 생성하기 위해 로컬 인프로세스 빌딩 블록을 제공합니다.

우리는 이러한 개념들을 쿠버네티스의 분산 기본 요소와 대입해 추상화를 하고
이런 개념을 토대로 쿠버네티스 디자인 패턴을 완성해 나갈 것입니다.

따라서 로컬에서 필요한 기본 요소들과 분산 환경인 쿠버네티스에서 필요한 기본 요소들의 차이를
아래의 표를 통해서 추상화 하였습니다.

개념로컬 기본 요소분산 기본 요소
캡슐화 동작클래스컨테이너 이미지
인스턴스화 동작객체컨테이너
재사용 단위.jar 파일컨테이너 이미지
컴포지션(Composition)클래스 A가 클래스 B를 포함사이드카 패턴
상속클래스 A가 클래스 B를 확장'FROM 부모 이미지' 로 만든 컨테이너 이미지
배포 단위.jar/.war/.ear파드
빌드 타임 / 런타임 격리모듈, 패키지, 클래스네임스페이스, 파드, 컨테이너
초기화 필요 조건생성자초기화 컨테이너
초기화 직후 트리고Init 메소드postStart
삭제 직전 트리거Destroy 메소드preStop
정리(Clenup) 절차finalize(), 셧다운 훅Defer 컨테이너
비동기 & 병렬 실행ThreadPoolExcutor, ForkJoinPool
주기적 작업Timer, ScheduledExecutorService크론잡
백그라운드 작업데몬 스레드데몬셋
설정 관리System.getenv(), Properties컨피그맵, 시크릿

👌 마무리

이번 장을 통해서 우리는 쿠버네티스 패턴을 알아야하는 이유를 자세하게 알아보고,
쿠버네티스에서 사용하는 리소스들을 어떻게 추상화 할 것인지까지 살펴보았습니다.

다음 장부터는 실제 쿠버네티스 디자인 패턴에 대해서 알아볼 것이며,
이번 장에서 설명한 내용을 토대로 내용을 펼쳐나갈 것입니다.

이해가 안되거나 논의 해볼 수 있는 내용이 있다면
언제든지 댓글로 달아주시면 제가 답변할 수 있는 범위 내에서 답변 달아보도록 하겠습니다.

👉 Reference

profile
ohhong

0개의 댓글