1/* 2Copyright 2017 The Kubernetes Authors. 3 4Licensed under the Apache License, Version 2.0 (the "License"); 5you may not use this file except in compliance with the License. 6You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10Unless required by applicable law or agreed to in writing, software 11distributed under the License is distributed on an "AS IS" BASIS, 12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13See the License for the specific language governing permissions and 14limitations under the License. 15*/ 16 17package scheduling 18 19import ( 20 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 21 "k8s.io/kubernetes/pkg/apis/core" 22) 23 24const ( 25 // DefaultPriorityWhenNoDefaultClassExists is used to set priority of pods 26 // that do not specify any priority class and there is no priority class 27 // marked as default. 28 DefaultPriorityWhenNoDefaultClassExists = 0 29 // HighestUserDefinablePriority is the highest priority for user defined priority classes. Priority values larger than 1 billion are reserved for Kubernetes system use. 30 HighestUserDefinablePriority = int32(1000000000) 31 // SystemCriticalPriority is the beginning of the range of priority values for critical system components. 32 SystemCriticalPriority = 2 * HighestUserDefinablePriority 33 // SystemPriorityClassPrefix is the prefix reserved for system priority class names. Other priority 34 // classes are not allowed to start with this prefix. 35 // NOTE: In order to avoid conflict of names with user-defined priority classes, all the names must 36 // start with SystemPriorityClassPrefix. 37 SystemPriorityClassPrefix = "system-" 38 // SystemClusterCritical is the system priority class name that represents cluster-critical. 39 SystemClusterCritical = SystemPriorityClassPrefix + "cluster-critical" 40 // SystemNodeCritical is the system priority class name that represents node-critical. 41 SystemNodeCritical = SystemPriorityClassPrefix + "node-critical" 42) 43 44// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 45 46// PriorityClass defines the mapping from a priority class name to the priority 47// integer value. The value can be any valid integer. 48type PriorityClass struct { 49 metav1.TypeMeta 50 // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata. 51 // +optional 52 metav1.ObjectMeta 53 54 // The value of this priority class. This is the actual priority that pods 55 // receive when they have the name of this class in their pod spec. 56 Value int32 57 58 // globalDefault specifies whether this PriorityClass should be considered as 59 // the default priority for pods that do not have any priority class. 60 // Only one PriorityClass can be marked as `globalDefault`. However, if more than 61 // one PriorityClasses exists with their `globalDefault` field set to true, 62 // the smallest value of such global default PriorityClasses will be used as the default priority. 63 // +optional 64 GlobalDefault bool 65 66 // Description is an arbitrary string that usually provides guidelines on 67 // when this priority class should be used. 68 // +optional 69 Description string 70 71 // PreemptionPolicy it the Policy for preempting pods with lower priority. 72 // This field is beta-level. 73 // +optional 74 PreemptionPolicy *core.PreemptionPolicy 75} 76 77// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 78 79// PriorityClassList is a collection of priority classes. 80type PriorityClassList struct { 81 metav1.TypeMeta 82 // Standard list metadata. 83 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 84 // +optional 85 metav1.ListMeta 86 87 // Items is the list of PriorityClasses. 88 Items []PriorityClass 89} 90