본문 바로가기
INFRA/DevOps

[K8s] Pod에 Resource 할당(cpu/memory requests, limits) & K8s Pod 환경변수 설정과 실행 패턴

by BTC_비웃는사나이 2022. 9. 21.

Resource requests

  • pod를 실행하기 위한 최소 resource 양을 요청

Resource limits

  • pod가 사용할 수 있는 최대 resource 양을 제한
  • memory limit을 초과해서 사용되는 pod는 종료(OOM Kill)되며 다시 scheduling 된다
  • limits만 설정할 경우 자동으로 limits와 동일한 값으로 requests 설정됨

Container resource 설정 예

  • container별로 resource 설정
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-env
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports:
    - containerPort: 80
      protocol: TCP
    env:
    - name: MYVAR
      value: "testvalue"
    resources:              //설정 예
      requests:
        memory: 500Mi
        cpu: 200m
      limits:
        memory: 1Gi
        cpu: 1

⚠️ Memory의 단위 : 1MB = 1000KB, 1MiB = 1024KiB CPU의 단위 : 1core = 1000mc

 

Container 환경변수란?

  • pod내의 container가 실행될 때 필요로 하는 변수
  • container 제작 시 미리 정의 (ENV)
  • pod 실행 시 미리 정의된 container 환경변수를 변경할 수 있다

[ Hands - on ] : 환경변수 설정하기

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx:1.14
    name: nginx
    ports:
    - containerPort: 80
    env:      //환경변수 지정
    - name: MYVAR
      value: "testvalue"
  • 실행된 pod의 container로 접속하여 환경변수 확인
kubectl exec nginx -it -- /bin/bash
env
MYDB_SERVICE_PORT=80
MYSERVICE_PORT_80_TCP_PROTO=tcp
MYSERVICE_SERVICE_HOST=10.105.26.191
HOSTNAME=nginx
MYSERVICE_SERVICE_PORT=80
NJS_VERSION=1.14.2.0.2.6-1~stretch
MYDB_PORT=tcp://10.110.46.126:80
NGINX_VERSION=1.14.2-1~stretch
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
MYDB_SERVICE_HOST=10.110.46.126
MYSERVICE_PORT_80_TCP=tcp://10.105.26.191:80
MYVAR=testvalue     #설정한 환경변수 확인
...

Pod 실행 패턴

  • pod를 구성하고 실행하는 패턴
  • multi-container pod
    • Sidecar :
      • 원래 사용하려고 했던 기본 container의 기능을 확장하거나 강화하는 용도의 컨테이너를 추가하는 패턴
    • Adapter :
      • pod 외부로 노출되는 정보를 표준화하는 역할
      • 주로 pod의 모니터링 지표를 adapter container를 통해서 표준화된 형식으로 노출시키고, 외부의 모니터링 시스템에서 그 데이터를 주기적으로 가져가서 모니터링하는데 이용
    • Ambassador :
      • pod내에 proxy 역할을 하는 container를 추가하는 패턴
      • pod내에서 외부 서버에 접근할 때 내부의 proxy에 접근하도록 설정하고 실제로 외부로의 연결은 proxy에서 알아서 처리하는 방식

<이미지 출처 : Multi-Container Pod Design Patterns - CKAD Course >

 

참고 :

[따배쿠] 5-6 Pod에 Resource 할당하기 (cpu/memory rrequests, limits)

[따배쿠] 5-7 쿠버네티스 Pod 환경변수 설정과 실행 패턴

쿠버네티스 pod 구성 패턴

댓글