generated client-go.
This commit is contained in:
		
							
								
								
									
										20
									
								
								staging/src/k8s.io/client-go/pkg/api/helper/qos/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								staging/src/k8s.io/client-go/pkg/api/helper/qos/BUILD
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
|  | licenses(["notice"]) | ||||||
|  |  | ||||||
|  | load( | ||||||
|  |     "@io_bazel_rules_go//go:def.bzl", | ||||||
|  |     "go_library", | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | go_library( | ||||||
|  |     name = "go_default_library", | ||||||
|  |     srcs = ["qos.go"], | ||||||
|  |     tags = ["automanaged"], | ||||||
|  |     visibility = ["//visibility:private"], | ||||||
|  |     deps = [ | ||||||
|  |         "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", | ||||||
|  |         "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", | ||||||
|  |         "//vendor/k8s.io/client-go/pkg/api:go_default_library", | ||||||
|  |     ], | ||||||
|  | ) | ||||||
							
								
								
									
										94
									
								
								staging/src/k8s.io/client-go/pkg/api/helper/qos/qos.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								staging/src/k8s.io/client-go/pkg/api/helper/qos/qos.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2017 The Kubernetes Authors. | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | // NOTE: DO NOT use those helper functions through client-go, the | ||||||
|  | // package path will be changed in the future. | ||||||
|  | package qos | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"k8s.io/apimachinery/pkg/api/resource" | ||||||
|  | 	"k8s.io/apimachinery/pkg/util/sets" | ||||||
|  | 	"k8s.io/client-go/pkg/api" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // supportedComputeResources is the list of compute resources for with QoS is supported. | ||||||
|  | var supportedQoSComputeResources = sets.NewString(string(api.ResourceCPU), string(api.ResourceMemory)) | ||||||
|  |  | ||||||
|  | // GetPodQOS returns the QoS class of a pod. | ||||||
|  | // A pod is besteffort if none of its containers have specified any requests or limits. | ||||||
|  | // A pod is guaranteed only when requests and limits are specified for all the containers and they are equal. | ||||||
|  | // A pod is burstable if limits and requests do not match across all containers. | ||||||
|  | func GetPodQOS(pod *api.Pod) api.PodQOSClass { | ||||||
|  | 	requests := api.ResourceList{} | ||||||
|  | 	limits := api.ResourceList{} | ||||||
|  | 	zeroQuantity := resource.MustParse("0") | ||||||
|  | 	isGuaranteed := true | ||||||
|  | 	for _, container := range pod.Spec.Containers { | ||||||
|  | 		// process requests | ||||||
|  | 		for name, quantity := range container.Resources.Requests { | ||||||
|  | 			if !supportedQoSComputeResources.Has(string(name)) { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			if quantity.Cmp(zeroQuantity) == 1 { | ||||||
|  | 				delta := quantity.Copy() | ||||||
|  | 				if _, exists := requests[name]; !exists { | ||||||
|  | 					requests[name] = *delta | ||||||
|  | 				} else { | ||||||
|  | 					delta.Add(requests[name]) | ||||||
|  | 					requests[name] = *delta | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		// process limits | ||||||
|  | 		qosLimitsFound := sets.NewString() | ||||||
|  | 		for name, quantity := range container.Resources.Limits { | ||||||
|  | 			if !supportedQoSComputeResources.Has(string(name)) { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			if quantity.Cmp(zeroQuantity) == 1 { | ||||||
|  | 				qosLimitsFound.Insert(string(name)) | ||||||
|  | 				delta := quantity.Copy() | ||||||
|  | 				if _, exists := limits[name]; !exists { | ||||||
|  | 					limits[name] = *delta | ||||||
|  | 				} else { | ||||||
|  | 					delta.Add(limits[name]) | ||||||
|  | 					limits[name] = *delta | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if len(qosLimitsFound) != len(supportedQoSComputeResources) { | ||||||
|  | 			isGuaranteed = false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if len(requests) == 0 && len(limits) == 0 { | ||||||
|  | 		return api.PodQOSBestEffort | ||||||
|  | 	} | ||||||
|  | 	// Check is requests match limits for all resources. | ||||||
|  | 	if isGuaranteed { | ||||||
|  | 		for name, req := range requests { | ||||||
|  | 			if lim, exists := limits[name]; !exists || lim.Cmp(req) != 0 { | ||||||
|  | 				isGuaranteed = false | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if isGuaranteed && | ||||||
|  | 		len(requests) == len(limits) { | ||||||
|  | 		return api.PodQOSGuaranteed | ||||||
|  | 	} | ||||||
|  | 	return api.PodQOSBurstable | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Klaus Ma
					Klaus Ma