본문 바로가기
Kubernetes/활용

Helm 헬름 활용(3)

by lumination 2024. 2. 19.

개요

1. 헬름 템플릿 변수 파일 사용하기

2. 리소스 Requests/Limits 이해


1. 헬름 템플릿 변수 파일 사용하기

vi templates/deployment.yaml

{{- if .Values.resources }}
resources: {{- toYaml .Values.resources | nindent 12 }}
{{- else if ne .Values.resourcesPreset "none" }}
resources: {{- include "common.resources.preset" (dict "type" .Values.resourcesPreset) | nindent 12 }}

 

{{- if .Values.resources }}

if 문을 사용해 resources 변수가 정의돼 있으면 해당 변수를 사용하도록 설정할 수 있다.

 

{{- toYaml .Values.resources | nindent 12 }}

toYaml 함수를 사용해 해당 변수의 내용을 들여쓰기 12칸 형식의 yaml 형식으로 전환한다.


2. 리소스 Requests/Limits 이해

같은 노드에 실행 중인 여러 파드는 동일한 호스트 노드의 자원을 공유하므로 특정 파드가 자원을 많이 사용하면 공통으로 사용 중인 노드 자원이 줄어들어 다른 파드의 성능에 영향을 끼친다.

이러한 상황에 대비해 파드가 사용 가능한 자원을 제한 할 수 있는 옵션이다.

 

Limits(제한)

resources:

  limits:

    cpu: 1000m

    memory: 500Mi

설정은 해당 파드가 1 CPU(1,000m은 1 CPU), 512Mi 메모리 이상의 자원을 사용하지 못하게 제한.


Request(요청량)

resources:

  requests:

    cpu: 100m

    memory: 128Mi

처음 노드에 파드를 할당할 때 해당 요청량(Request) 이상의 여유 자원이 있는 노드에 파드를 할당하게 하는 옵션이다.
파드가 배치된 이 후 각 파드 간 자원 사용량이 증가해서 노드에서 할당 가능한 자원 이상을 사용해 자원 경합이 발생하면 파드는 Requests에서 할당한 자원만큼 사용이 가능하도록 보장받는다.

파드가 보장받을 수 있는 자원 요청량으로 이해하면 된다.

 

예제

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-1
spec:
  containers:
  - name: memory-demo-1
    image: polinux/stress
    resources:
      requests:
        memory: "1Gi"
      limits:
        memory: "2Gi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "2500M", "--vm-hang", "1"]

 

kubectl apply -f oom-demo.yaml

허용 한계는 2기가인데 2500m 메모리를 스트레스 줘서 OOM이 발생한다.

k get pod -o wide
NAME                    READY   STATUS      RESTARTS      AGE   IP              NODE           NOMINATED NODE   READINESS GATES
memory-demo-1           0/1     OOMKilled   2 (21s ago)   35s   10.10.180.241   worker-node1   <none>           <none>

 

kubectl describe pod memory-demo-1

  Normal   Created    13s (x2 over 19s)  kubelet            Created container memory-demo-1
  Normal   Started    13s (x2 over 18s)  kubelet            Started container memory-demo-1
  Normal   Pulled     13s                kubelet            Successfully pulled image "polinux/stress" in 1.624650799s (1.624671461s including waiting)
  Warning  BackOff    11s                kubelet            Back-off restarting failed container memory-demo-1 in pod memory-demo-1_nginx(c3c631f8-842a-4ae5-90b3-d2f94a4ca5fb)

 

# 파드에 접속

kubectl exec -it memory-demo-1 -- bash

kubectl exec -it memory-demo-1 -- /bin/sh

kubectl exec -it memory-demo-1 -- /bin/bash

 

# 2900메가까지 스트레스 주기
stress --vm 1 --vm-byte 2900M --vm-hang 1

 

# 삭제하기

kubectl delete pod --all

kubectl delete deployments.apps --all

'Kubernetes > 활용' 카테고리의 다른 글

쿠버네티스 DNS 기능 이해  (0) 2024.02.22
쿠버네티스 서비스(service) 사용하기 (1)  (0) 2024.02.22
Helm 헬름 활용(2)  (0) 2024.02.19
Helm 헬름 활용(1)  (0) 2024.02.19
잘못된 pod 생성 트러블 슈팅  (0) 2024.02.15