API 객체에 대한 쿼터 구성하기

API 객체에 대한 쿼터 구성하기 (Configure Quotas for API Objects)

이 페이지에서는 PersistentVolumeClaim과 Service를 포함한 API 객체에 대한 쿼터(quota)를 구성하는 방법을 보여드려요. 쿼터는 네임스페이스에서 특정 유형의 객체를 만들 수 있는 수를 제한해요. 쿼터는 ResourceQuota 객체에서 지정해요.

출처: 문서

본문

시작하기 전에 (Before you begin)

쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성돼 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 두 개 이상 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube로 만들거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있어요.

  • iximiuz Labs
  • Killercoda
  • KodeKloud

버전을 확인하려면 kubectl version을 입력하세요.

네임스페이스 만들기 (Create a namespace)

이 실습에서 만드는 리소스가 클러스터의 나머지와 격리되도록 네임스페이스를 만들어요.

kubectl create namespace quota-object-example

ResourceQuota 만들기 (Create a ResourceQuota)

다음은 ResourceQuota 객체의 구성 파일이에요.

apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-quota-demo
spec:
  hard:
    persistentvolumeclaims: "1"
    services.loadbalancers: "2"
    services.nodeports: "0"

admin/resource/quota-objects.yaml — ResourceQuota를 생성해요.

kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects.yaml --namespace=quota-object-example

ResourceQuota에 대한 자세한 정보를 확인해요.

kubectl get resourcequota object-quota-demo --namespace=quota-object-example --output=yaml

출력은 quota-object-example 네임스페이스에서 PersistentVolumeClaim이 최대 1개, LoadBalancer 유형 Service가 최대 2개, NodePort 유형 Service는 0개가 있을 수 있음을 보여줘요.

status:
  hard:
    persistentvolumeclaims: "1"
    services.loadbalancers: "2"
    services.nodeports: "0"
  used:
    persistentvolumeclaims: "0"
    services.loadbalancers: "0"
    services.nodeports: "0"

PersistentVolumeClaim 만들기 (Create a PersistentVolumeClaim)

다음은 PersistentVolumeClaim 객체의 구성 파일이에요.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-quota-demo
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

admin/resource/quota-objects-pvc.yaml — PersistentVolumeClaim을 생성해요.

kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc.yaml --namespace=quota-object-example

PersistentVolumeClaim이 생성됐는지 확인해요.

kubectl get persistentvolumeclaims --namespace=quota-object-example

출력은 PersistentVolumeClaim이 존재하고 상태가 Pending임을 보여줘요.

NAME             STATUS
pvc-quota-demo   Pending

두 번째 PersistentVolumeClaim 만들기 시도 (Attempt to create a second PersistentVolumeClaim)

다음은 두 번째 PersistentVolumeClaim의 구성 파일이에요.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-quota-demo-2
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi

admin/resource/quota-objects-pvc-2.yaml — 두 번째 PersistentVolumeClaim 생성을 시도해요.

kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc-2.yaml --namespace=quota-object-example

출력은 네임스페이스의 쿼터를 초과했기 때문에 두 번째 PersistentVolumeClaim이 생성되지 않았음을 보여줘요.

persistentvolumeclaims "pvc-quota-demo-2" is forbidden:
exceeded quota: object-quota-demo, requested: persistentvolumeclaims=1,
used: persistentvolumeclaims=1, limited: persistentvolumeclaims=1

참고 (Notes)

쿼터로 제한할 수 있는 API 리소스를 식별하는 데 사용하는 문자열은 다음과 같아요.

문자열 API 객체
"pods" Pod
"services" Service
"replicationcontrollers" ReplicationController
"resourcequotas" ResourceQuota
"secrets" Secret
"configmaps" ConfigMap
"persistentvolumeclaims" PersistentVolumeClaim
"services.nodeports" NodePort 유형의 Service
"services.loadbalancers" LoadBalancer 유형의 Service

정리 (Clean up)

네임스페이스를 삭제해요.

kubectl delete namespace quota-object-example

다음 단계 (What's next)

클러스터 관리자용:

  • 네임스페이스의 기본 메모리 요청/제한 구성하기
  • 네임스페이스의 기본 CPU 요청/제한 구성하기
  • 네임스페이스의 최소/최대 메모리 제약 구성하기
  • 네임스페이스의 최소/최대 CPU 제약 구성하기
  • 네임스페이스의 메모리 및 CPU 쿼터 구성하기
  • 네임스페이스의 Pod 쿼터 구성하기

앱 개발자용:

  • 컨테이너와 파드에 메모리 리소스 할당하기
  • 컨테이너와 파드에 CPU 리소스 할당하기
  • 파드 레벨 CPU 및 메모리 리소스 할당하기
  • 파드의 서비스 품질(QoS) 구성하기

더 알아보기 (Learn more)