IT/CKA

CKA 준비과정 - Application Lifecycle Management (5) / Container

Primes 2023. 6. 6. 16:49
728x90

Multi Container Pods

서비스의 규모가 클 때, 모놀리식 아키텍쳐보다는 마이크로 아키텍쳐가 서비스 운영에 적합하다.

마이크로 아키텍처는 스케일 업 다운에 유용하며, 서비스를 파트별로 나누어 관리하여 유지보수 및 업데이트에도 용이하다.

 

일반적으로 쿠버네티스에서 구축하는 서비스들이 이 마이크로 아키텍쳐의 구성을 위해 쿠버네티스를 사용하게 된다. 컨테이너별로 서비스를 분리하기 쉽기 때문이다.

 

하지만 때때로 웹 서버와 로깅 서비스들을 같이 운영해야 하는 케이스가 생긴다. 각각 다른 기능이지만, 함께 연동되어 작동해야 하는 서비스들의 경우가 그렇다. 이렇게 두 가지 서비스를 한 아키텍처에서 운영해야 할 때, 멀티 컨테이너 파드를 사용할 수 있다.

 

위와같이 두 서비스(주황, 남색)는 같은 네트워크 공간을 공유하며, 같은 저장소 볼륨에 액세스 할 수 있다.

이렇게 설정하게 되면 서비스간 볼륨 공유와 같은 설정을 하지 않아도 된다.

 

이와같은 멀티 컨테이너 파드를 정의 파일로 작성하는 방법은 아래와 같다.

파일 작성 시, containers 파트에 두 개의 컨테이너를 생성한다. 파드 내에 각각 다른 서비스를 제공하는 2개의 컨테이너를 정의하는 것이다.

 

이러한 멀티 컨테이너의 디자인 패턴은 보통 3가지로 구성하게 된다.

CKA 시험에서는 자세히 다루지 않으나, CKAD 코스에서는 알아볼 필요가 있는 부분이므로, 나중에 자세히 살펴보기로 한다.

 

InitContainers

InitContainer는 파드 내 어플리케이션 컨테이너들이 실행되기 전에 먼저 실행되는 컨테이너이다.

따라서 파드가 생성될 때 가장 먼저 생성되어 최초 1회만 실행되는 컨테이너이다. (네이버클라우드의 Init Script 비슷하다고 볼 수 있을 것 같다.)

InitContainer에서 각 컨테이너들이 유기적으로 동작하기 위해 필요한 설정, 애플리케이션 값들을 미리 구성하여 편리하게 파드 내 컨테이너들을 구성할 수 있다.

 

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    command: ['sh', '-c', 'git clone <some-repository-that-will-be-used-by-application> ; done;']

Initcontainer는 정의 파일에서 필드를 initContainers 라고 주고 리소스를 정의한다.

 

반응형