DevOps/Kubernetes

[K8S] k8s 정리 - (8) Kubernetes Pod (Container 구성, 리소스, 환경변수)

yubi5050 2022. 9. 9. 05:22

이전 글에서는 Kubernetes Pod의 Lifecycle과 Probe와 Handler의 역할에 대해 알아보았다.

https://yubi5050.tistory.com/179

 

[K8S] k8s 정리 - (7) Kubernetes Pod (Lifecycle, Probe, Handler)

이전 글에서는  Kuberenetes Controller의 종류와 역할에 대해 알아보았다. https://yubi5050.tistory.com/178 [K8S] k8s 정리 - (6) Kubernetes Controller 종류와 역할 이전 글들에서는 Kubernetes 기본적인 O..

yubi5050.tistory.com

이번 글에서는 Kubernetes Pod의 컨테이너 구성과 리소스 할당, 환경 변수 설정 등에 대해 알아보려고 합니다.

 

 

Pod 구성 (컨테이너 별 역할 분리)

Pod를 구성시 컨테이너를 나누어 역할을 분리할 수 있다.

👉 Pod내 Container 역할

  • 기동 시점에 처리하고 종료되고 Init Container
  • 실제 업무를 처리하는 Runtime Container (App Container)
  • 파드 시작시 인프라를 만들어 주는 Infra Container
  • 보조 역할로써 배포되는 SideCar Container (애플리케이션 컨테이너와 주변 프로그램을 같이 배포)
    Ambassador, Adapter Container 등 여러 패턴 존재

 

Init Container

init continaer 의 목적은 사전 환경셋팅이 완료됬는지 체크

👉 Init Container 특징

  • init/main container를 같은 Pod로 묶어, init가 완료되면 main 작동
  • 초기화 컨테이너가 모두 실행된 후에 앱 컨테이너를 실행
  • 초기화 컨테이너는 실행 후 반드시 종료되어야 하므로, lifecycle 관련 probe가 사용 될 수 없다
  • 주로 DB, Network 설정, 파일 권한 등의 작업 수행
  • 추가로 보안상 이유로 앱 컨테이너 이미지에 포함하지 않는 유틸리티 및 정보도 가질 수 있음

아래 예제 이미지에서 'init-myservice', 'init-mydb container' 모두 실행 된 후 'myapp-containers' 실행됨

 

Init container 예제

 

Infra Container

모든 파드에서 항상 실행되는 pause 컨테이너로 Pod에 대한 Infra(IP, Hostname)등을 관리 목적

👉 infra container 특징

  • Pod 내에서 PID 1을 가지고 실행되어 다른 컨테이너에 대한 부모 컨테이너 역할
  • Pod의 환경을 만들어 줌
  • Pause 컨테이너가 재시작되면 파드 안 모든 컨테이너 재시작

 

infra container 역할

 

Runtime Container

실제 업무(비즈니스 로직)를 담당하는 메인 컨테이너라고 보면 된다.

 

Sidecar Container

Pod가 가진 Filesystem을 공유하면서 보조하는 역할을 수행하는 컨테이너를 Sidecar 컨테이너라고 부른다. 

Sidecar들을 관리하는 대표적인 예로 아래 그림과 같은 Adapter 패턴, Ambassador 패턴 등이 활용 가능하다. 

 

ex) 파드 안에 Nginx 웹서버에 대한 최신 로그만을 스트리밍 하는 사이드카 컨테이너를 두고 별도로 운영되는 Log 관리 서비스가 외부에서 접근하게 해당 컨테이너에만 접근하게 한다.

 

👉 Sidecar container 패턴

  • Adapter 컨테이너 : 이질적인 애플리케이션들로부터 나오는 다양한 형태의 정보를 표준화하여 외부로 노출
    ex) A app : yyyy-mm-dd , B app : yy-mm-dd
  • Ambassador 컨테이너 : Pod 외부의 서비스에 대한 엑세스 간소화
    ex) Proxy 역할 수행하는 Ambassador 컨테이너  

이미지 출처:https://matthewpalmer.net/kubernetes-app-developer/articles/multi-container-pod-design-patterns.html

 

 

Pod 리소스 할당

노드 하나에 Pod가 여러개 몰리게 되면, 파드들의 성능이 나빠지고 자원 사용 효율이 낮을 수 있어, 각 컨테이너가 CPU나 메모리를 얼마나 사용 할 지 조건을 지정 할 수 있다.

 

관련 필드 종류

  • Requests : 파드를 실행하기 위한 최소 리소스 양을 요청
  • Limits : 파드가 사용할 수 있는 최대 리소스 양을 제한 (Memory limit을 초과시 해당 파드는 종료 후 다시 생성)

 

아래 예시는 자원을 CPU (0.1 ~ 0.5) 와 Memory (250Mi ~ 500Mi)의 최소(requests) ~ 최대(limits) 범위를 나타낸 것

 

Pod Resource 할당

 

 

Pod 환경 변수 설정

Pod내 컨테이너가 사용 할 수 있는 환경변수를 정의 할 수 있다.

사용할 env 환경 변수의 이름을 설정(name) 및 문자열이나 숫자 형식의 값을 설정 (value)

 

pod 내 환경 변수

 

마무리 

이번 글에서는 Kubernetes Pod의 컨테이너 구성과 리소스 할당, 환경 변수 설정에 대해 알아보았습니다. 다음 글에서는 Kubernetes의 Volume의 emptyDir, hostPath 개념과, PV/PVC 추상화 개념에 대해 좀 더 자세히 알아보도록 하겠습니다.