Resource Limits

Watermelon·2026년 1월 29일

CKA 학습 과정

목록 보기
33/35

Resource Requests

이 부분은 전 강의에서 다뤘던 내용인데 되게 짧게 다뤘던 것으로 기억..
찾아보려다 작성한 글이 많아서 찾는걸 포기함
CKA 문제보고서 이게 뭐였더라..만 중얼거릴 것 같아서 무섭다

하여튼, Resource Requests는 pod yaml에서 지정 시 해당 resource를 사용할 수 있는 node를 찾게 됨

apiVersion:
kind: Pod
metadata:
  name:
  labels:
spec:
  containers:
  - name:
    image:
    ports:
    - continerPort:
    resources: ## resource 지정 란
      requests:
        memory: "4Gi"
        cpu: 2

Resource - CPU

  • 1, 0.1, 100m(최소 1m) 이런 식으로 표현 가능

Resource - Memory

  • 256Mi, 268435456, 268M 과 같이 표현 가능
  • 1G와 1Gi의 차이점 유의
  • 1Gi가 실제 용량으로 더 정확

Resource Limits

spec:
  containers:
  - name:
    image:
    ports:
    - continerPort:
    resources: ## resource 지정 란
      requests:
        memory: "4Gi"
        cpu: 2
      limits: ## limit 설정
        memory: "2Gi"
        cpu: 2

Exceed Limits

  • cpu의 경우 정해진 용량을 넘어서려하면 시스템에서 Throttle(사용량 조절)
  • mem의 경우 정해진 용량을 넘어서려하면 파드가 종료되고 오류뜸(Out of Memory (OOM))

Default Behavior

기본적으로는 limit가 없음

Behavior - CPU

  • 제한 설정이 없으면 하나의 파드가 모든 자원을 잡아먹어서 다른 파드가 정상작동하지 못하게 함
  • 제한 시 파드들이 정상적으로 자원할당 받을 수 있음
  • 기본 보장값과 임계값을 두어 유동적으로 파드가 cpu를 사용하게 만들 수도 있음
  • cpu 자원이 넉넉할 경우 기본 보장만 두고 임계값은 두지 않을 수도 있음
    • 아무튼.. 파드마다 리소스를 기본 보장할 수 있도록 하는 것이 좋다

Behavior - Memory

  • cpu와 마찬가지고 제한 설정이 없으면 한 파드에서 자원을 잡아먹을 수 있음
  • 제한을 걸어둘 수 있음
  • 기본 보장값과 임계값을 둘 수 있음
  • 기본 보장값만 두고 임계값을 두지 않음
    • 만약.. 특정 파드가 리소스를 다 잡아먹었다면 pod를 죽이고 자원을 갈취할 수밖에 없다..

LimitRange

기본적으로 생성될 파드에 대하여(컨테이너) 리소스 limit 설정 가능

LimitRange - CPU

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-resource-constraint
spec:
  limits:
  - default: ## 컨테이너가 limit 명시하지 않았을 때 자동 설정
      cpu: 500m
    defaultRequest: ## 컨테이너가 request를 명시하지 않았을때 자동 설정 
      cpu: 500m
    max: ## 설정될 수 있는 최대 자원 한게
      cpu: "1"
    min: ## 설정될 수 있는 최소 자원 한계
      cpu: 100m
    type: Container

LimitRange - Memory

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-resource-constraint
spec:
  limits:
  - default:
      memory: 1Gi
    defaultRequest:
      memory: 1Gi
    max:
      memory: 1Gi
    min:
      memory: 500mi
    type: Container

Resource Quotas

모든 파드를 합쳐서 일정 자원 이상 사용하면 안될 시 - 가정
네임스페이스 기준으로 resource quotas 설정 가능

apiVersion: v1
kind: ResourceQuota
metadata:
  name: my-resource-quota
spec:
  hard:
    requests.cpu: 4
    requests.memory: 4Gi
    limits.cpu: 10
    limits.memory: 10Gi

tip

pod는 일회성 객체에 가깝기 때문에 수정 가능한 부분이 일부
deployment는 수정 자유로움

spec.containers[*].image
spec.initContainers[*].image
spec.activeDeadlineSeconds
spec.toleration

방법 1) kubectl edit 임시 파일 재사용

kubectl edit pod webapp

저장 실패 -> 임시 yaml 파일 생성됨 -> 기존 Pod 삭제 -> 임시 파일로 새 Pod 생성

방법 2) Pod YAML 추출 → 수정 → 재생성 (정석)

kubectl get pod webapp -o yaml > my-new-pod.yaml
vi my-new-pod.yaml
kubectl delete pod webapp
kubectl create -f my-new-pod.yaml
  • Pod 수정 = 삭제 후 생성

방법 3) edit 오류로 뜨는 파일 복사하기

kubectl edit pod elephant

했을 때
/tmp/kubectl-edit-321321.yaml 이렇게 hint를 줌
수정사항 변경 후

kubectl replace --force -f /tmp/kubectl-edit-321321.yaml

위 명령어 입력 시 pod 삭제 후 replace됨

  • 번거롭다.. yaml 파일 추출 후 수정 재생성하는게 더 쉬운듯..
profile
많은 경험을 해보고자 하는

0개의 댓글