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) 구성하기