[k8s] 쿠버네티스 컴포넌트 정리 - Namespace, ResourceQuota, LimitRange

🔥Log·2024년 11월 29일
0

k8s

목록 보기
6/15

☕ 개요


하나의 k8s 클러스터는 개념적으로 완전히 구분된 영역을 나타내는 N개의 Namespace로 구성된다.
Namespace는 무한대로 클러스터이 갖고 있는 자원을 사용할 수는 없고, ResourceQuota로 정의한 만큼만 자원을 최대로 사용할 수 있다.
그리고, Namespace에 새로운 컴포넌트를 생성할 때, 그 하나의 컴포넌트는 LimitRange에 정의된 범위 이내에서만 생성할 수 있다.

이렇게 ResourceQuotaimitRange는 자원의 최대 사용량을 설정하기 위해서 사용되는 컴포넌트들이다.
이 컴포넌트들은 amespace 뿐만 아니라, 클러스터에 할당하여 클러스터 전체의 자원을 관리할 수도 있다.



🐳 YML


위에서 이야기한 각각을 어떻게 생성하는지 알아보자.

1) Namespace

apiVersion: v1
kind: Namespace
metadata:
  name: namespace-1

별도의 Namespace는 위와 같이 간단하게 만들어줄 수 있다.

2) ResourceQuota

apiVersion: v1
kind: ResourceQuota
metadata:
  name: resource-quota-1
  namespace: namespace-1
spec:
  hard:
    requests.memory: 3Gi
    limits.memory: 6Gi
    pods: "2"

ResourceQuota는 위와 같이 yml을 작성하여 생성할 수 있다.

ResourceQuota로 제한할 수 있는 것은 CPU 뿐만 아니라 Memory, Storage도 있고, Pod, Service와 같은 컴포넌트의 개수 또한 제한할 수 있다.

3) LimiRange

apiVersion: v1
kind: LimitRange
metadata:
  name: limit-range-1
  namespace: namespace-1
spec:
  limits:
    - type: Container
      min:
        memory: 0.1Gi
      max:
        memory: 1Gi
      defaultRequest:
        memory: 0.2Gi
      default:
        memory: 0.5Gi
      maxLimitRequestRatio:
        memory: "3"

LimitRange는 한번에 생성 가능한 컴포넌트의 자원의 최소값(min)과 최대값(min)을 설정할 수 있을 뿐만 아니라, 자원 스펙이 명시되지 않은 컴포넌트를 생성할 경우 request의 기본값(defaultRequest)과 limits의 기본값(default)을 설정할 수도 있다.
또, requests에 명시된 값과 limits에 명시된 값의 비율(maxLimitRequestRatio)도 제한할 수 있다.

4) Pod

apiVersion: v1
kind: Pod
metadata:
  name: pod-4
  namespace: namespace-1
spec:
  containers:
    - name: container-1
      image: kai1114/hello
      resources:
        requests:
          memory: 0.1Gi
        limits:
          memory: 0.2Gi

ResourceQuota나 LimitRange가 존재한다고 해서, 사실 컴포넌트를 생성할 때 특별히 달라지는 것은 없고, 위와 같이 자원에대한 Spec을 명시해서 생성해주면 된다.



🙏 참고


0개의 댓글