aboutsummaryrefslogtreecommitdiffstats
path: root/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet
diff options
context:
space:
mode:
authorHuabingZhao <zhao.huabing@zte.com.cn>2017-08-31 11:59:47 +0800
committerHuabingZhao <zhao.huabing@zte.com.cn>2017-08-31 12:00:09 +0800
commitc0f3b093c704da85252044b3a177dbabab63c49a (patch)
treef6cb5d85315c307bcf4984ac04e76e84b9abeac6 /kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet
parentc1737d2abac61511e00f388538779d67464b8a98 (diff)
add vendor package
Issue-Id: OOM-61 Change-Id: I251336e3b711b14f8ae9a8b0bf6055011a1d9bc8 Signed-off-by: HuabingZhao <zhao.huabing@zte.com.cn>
Diffstat (limited to 'kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet')
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/doc.go25
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go66
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/qos.go140
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/types.go29
4 files changed, 260 insertions, 0 deletions
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/doc.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/doc.go
new file mode 100644
index 0000000..ebc1cc5
--- /dev/null
+++ b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/doc.go
@@ -0,0 +1,25 @@
+/*
+Copyright 2015 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.
+*/
+
+// package qos contains helper functions for quality of service.
+// For each resource (memory, CPU) Kubelet supports three classes of containers.
+// Memory guaranteed containers will receive the highest priority and will get all the resources
+// they need.
+// Burstable containers will be guaranteed their request and can “burst” and use more resources
+// when available.
+// Best-Effort containers, which don’t specify a request, can use resources only if not being used
+// by other pods.
+package qos
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go
new file mode 100644
index 0000000..ad696f3
--- /dev/null
+++ b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go
@@ -0,0 +1,66 @@
+/*
+Copyright 2015 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.
+*/
+
+package qos
+
+import (
+ "k8s.io/kubernetes/pkg/api"
+)
+
+const (
+ PodInfraOOMAdj int = -999
+ KubeletOOMScoreAdj int = -999
+ KubeProxyOOMScoreAdj int = -999
+ guaranteedOOMScoreAdj int = -998
+ besteffortOOMScoreAdj int = 1000
+)
+
+// GetContainerOOMAdjust returns the amount by which the OOM score of all processes in the
+// container should be adjusted.
+// The OOM score of a process is the percentage of memory it consumes
+// multiplied by 10 (barring exceptional cases) + a configurable quantity which is between -1000
+// and 1000. Containers with higher OOM scores are killed if the system runs out of memory.
+// See https://lwn.net/Articles/391222/ for more information.
+func GetContainerOOMScoreAdjust(pod *api.Pod, container *api.Container, memoryCapacity int64) int {
+ switch GetPodQOS(pod) {
+ case Guaranteed:
+ // Guaranteed containers should be the last to get killed.
+ return guaranteedOOMScoreAdj
+ case BestEffort:
+ return besteffortOOMScoreAdj
+ }
+
+ // Burstable containers are a middle tier, between Guaranteed and Best-Effort. Ideally,
+ // we want to protect Burstable containers that consume less memory than requested.
+ // The formula below is a heuristic. A container requesting for 10% of a system's
+ // memory will have an OOM score adjust of 900. If a process in container Y
+ // uses over 10% of memory, its OOM score will be 1000. The idea is that containers
+ // which use more than their request will have an OOM score of 1000 and will be prime
+ // targets for OOM kills.
+ // Note that this is a heuristic, it won't work if a container has many small processes.
+ memoryRequest := container.Resources.Requests.Memory().Value()
+ oomScoreAdjust := 1000 - (1000*memoryRequest)/memoryCapacity
+ // A guaranteed pod using 100% of memory can have an OOM score of 1. Ensure
+ // that burstable pods have a higher OOM score adjustment.
+ if oomScoreAdjust < 2 {
+ return 2
+ }
+ // Give burstable pods a higher chance of survival over besteffort pods.
+ if int(oomScoreAdjust) == besteffortOOMScoreAdj {
+ return int(oomScoreAdjust - 1)
+ }
+ return int(oomScoreAdjust)
+}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/qos.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/qos.go
new file mode 100644
index 0000000..2c0d19d
--- /dev/null
+++ b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/qos.go
@@ -0,0 +1,140 @@
+/*
+Copyright 2015 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.
+*/
+
+package qos
+
+import (
+ "k8s.io/kubernetes/pkg/api"
+ "k8s.io/kubernetes/pkg/api/resource"
+)
+
+// isResourceGuaranteed returns true if the container's resource requirements are Guaranteed.
+func isResourceGuaranteed(container *api.Container, resource api.ResourceName) bool {
+ // A container resource is guaranteed if its request == limit.
+ // If request == limit, the user is very confident of resource consumption.
+ req, hasReq := container.Resources.Requests[resource]
+ limit, hasLimit := container.Resources.Limits[resource]
+ if !hasReq || !hasLimit {
+ return false
+ }
+ return req.Cmp(limit) == 0 && req.Value() != 0
+}
+
+// isResourceBestEffort returns true if the container's resource requirements are best-effort.
+func isResourceBestEffort(container *api.Container, resource api.ResourceName) bool {
+ // A container resource is best-effort if its request is unspecified or 0.
+ // If a request is specified, then the user expects some kind of resource guarantee.
+ req, hasReq := container.Resources.Requests[resource]
+ return !hasReq || req.Value() == 0
+}
+
+// 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) QOSClass {
+ 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 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
+ for name, quantity := range container.Resources.Limits {
+ if quantity.Cmp(zeroQuantity) == 1 {
+ delta := quantity.Copy()
+ if _, exists := limits[name]; !exists {
+ limits[name] = *delta
+ } else {
+ delta.Add(limits[name])
+ limits[name] = *delta
+ }
+ }
+ }
+ if len(container.Resources.Limits) != len(supportedComputeResources) {
+ isGuaranteed = false
+ }
+ }
+ if len(requests) == 0 && len(limits) == 0 {
+ return BestEffort
+ }
+ // 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) &&
+ len(limits) == len(supportedComputeResources) {
+ return Guaranteed
+ }
+ return Burstable
+}
+
+// QOSList is a set of (resource name, QoS class) pairs.
+type QOSList map[api.ResourceName]QOSClass
+
+// GetQOS returns a mapping of resource name to QoS class of a container
+func GetQOS(container *api.Container) QOSList {
+ resourceToQOS := QOSList{}
+ for resource := range allResources(container) {
+ switch {
+ case isResourceGuaranteed(container, resource):
+ resourceToQOS[resource] = Guaranteed
+ case isResourceBestEffort(container, resource):
+ resourceToQOS[resource] = BestEffort
+ default:
+ resourceToQOS[resource] = Burstable
+ }
+ }
+ return resourceToQOS
+}
+
+// supportedComputeResources is the list of supported compute resources
+var supportedComputeResources = []api.ResourceName{
+ api.ResourceCPU,
+ api.ResourceMemory,
+}
+
+// allResources returns a set of all possible resources whose mapped key value is true if present on the container
+func allResources(container *api.Container) map[api.ResourceName]bool {
+ resources := map[api.ResourceName]bool{}
+ for _, resource := range supportedComputeResources {
+ resources[resource] = false
+ }
+ for resource := range container.Resources.Requests {
+ resources[resource] = true
+ }
+ for resource := range container.Resources.Limits {
+ resources[resource] = true
+ }
+ return resources
+}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/types.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/types.go
new file mode 100644
index 0000000..e52dece
--- /dev/null
+++ b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/kubelet/qos/types.go
@@ -0,0 +1,29 @@
+/*
+Copyright 2016 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.
+*/
+
+package qos
+
+// QOSClass defines the supported qos classes of Pods/Containers.
+type QOSClass string
+
+const (
+ // Guaranteed is the Guaranteed qos class.
+ Guaranteed QOSClass = "Guaranteed"
+ // Burstable is the Burstable qos class.
+ Burstable QOSClass = "Burstable"
+ // BestEffort is the BestEffort qos class.
+ BestEffort QOSClass = "BestEffort"
+)