Merge pull request #34554 from derekwaynecarr/quota-storage-class
Automatic merge from submit-queue (batch tested with PRs 37270, 38309, 37568, 34554) Ability to quota storage by storage class Adds the ability to quota storage by storage class. 1. `<storage-class>.storageclass.storage.k8s.io/persistentvolumeclaims` - quota the number of claims with a specific storage class 2. `<storage-class>.storageclass.storage.k8s.io/requests.storage` - quota the cumulative request for storage in a particular storage class. For example: ``` $ cat quota.yaml apiVersion: v1 kind: ResourceQuota metadata: name: storage-quota spec: hard: requests.storage: 100Gi persistentvolumeclaims: 100 gold.storageclass.storage.k8s.io/requests.storage: 50Gi gold.storageclass.storage.k8s.io/persistentvolumeclaims: 5 silver.storageclass.storage.k8s.io/requests.storage: 75Gi silver.storageclass.storage.k8s.io/persistentvolumeclaims: 10 bronze.storageclass.storage.k8s.io.kubernetes.io/requests.storage: 100Gi bronze.storageclass.storage.k8s.io/persistentvolumeclaims: 15 $ kubectl create -f quota.yaml $ cat pvc-bronze.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: generateName: pvc-bronze- annotations: volume.beta.kubernetes.io/storage-class: "bronze" spec: accessModes: - ReadWriteOnce resources: requests: storage: 8Gi $ kubectl create -f pvc-bronze.yaml $ kubectl get quota storage-quota -o yaml apiVersion: v1 kind: ResourceQuota ... status: hard: bronze.storageclass.storage.k8s.io/persistentvolumeclaims: "15" bronze.storageclass.storage.k8s.io/requests.storage: 100Gi gold.storageclass.storage.k8s.io/persistentvolumeclaims: "5" gold.storageclass.storage.k8s.io/requests.storage: 50Gi persistentvolumeclaims: "100" requests.storage: 100Gi silver.storageclass.storage.k8s.io/persistentvolumeclaims: "10" silver.storageclass.storage.k8s.io/requests.storage: 75Gi used: bronze.storageclass.storage.k8s.io/persistentvolumeclaims: "1" bronze.storageclass.storage.k8s.io/requests.storage: 8Gi gold.storageclass.storage.k8s.io/persistentvolumeclaims: "0" gold.storageclass.storage.k8s.io/requests.storage: "0" persistentvolumeclaims: "1" requests.storage: 8Gi silver.storageclass.storage.k8s.io/persistentvolumeclaims: "0" silver.storageclass.storage.k8s.io/requests.storage: "0" ```
This commit is contained in:
@@ -182,9 +182,8 @@ func (rq *ResourceQuotaController) addQuota(obj interface{}) {
|
||||
for constraint := range resourceQuota.Status.Hard {
|
||||
if _, usageFound := resourceQuota.Status.Used[constraint]; !usageFound {
|
||||
matchedResources := []api.ResourceName{api.ResourceName(constraint)}
|
||||
|
||||
for _, evaluator := range rq.registry.Evaluators() {
|
||||
if intersection := quota.Intersection(evaluator.MatchesResources(), matchedResources); len(intersection) != 0 {
|
||||
if intersection := evaluator.MatchingResources(matchedResources); len(intersection) > 0 {
|
||||
rq.missingUsageQueue.Add(key)
|
||||
return
|
||||
}
|
||||
@@ -348,7 +347,6 @@ func (rq *ResourceQuotaController) replenishQuota(groupKind schema.GroupKind, na
|
||||
}
|
||||
|
||||
// only queue those quotas that are tracking a resource associated with this kind.
|
||||
matchedResources := evaluator.MatchesResources()
|
||||
for i := range resourceQuotas {
|
||||
resourceQuota := resourceQuotas[i].(*v1.ResourceQuota)
|
||||
internalResourceQuota := &api.ResourceQuota{}
|
||||
@@ -357,7 +355,7 @@ func (rq *ResourceQuotaController) replenishQuota(groupKind schema.GroupKind, na
|
||||
continue
|
||||
}
|
||||
resourceQuotaResources := quota.ResourceNames(internalResourceQuota.Status.Hard)
|
||||
if len(quota.Intersection(matchedResources, resourceQuotaResources)) > 0 {
|
||||
if intersection := evaluator.MatchingResources(resourceQuotaResources); len(intersection) > 0 {
|
||||
// TODO: make this support targeted replenishment to a specific kind, right now it does a full recalc on that quota.
|
||||
rq.enqueueResourceQuota(resourceQuota)
|
||||
}
|
||||
|
Reference in New Issue
Block a user