k8s 中的 Priority 和 PriorityClass 对象之间的差异



我知道 k8s 中的优先级类是什么,但经过大量搜索后找不到有关优先级对象的任何内容。

所以问题是我已经在我的 k8s 集群中创建了一个 PriorityClass 对象并将其值设置为 -100000,并创建了一个具有此 priorityClass 的 pod。现在当我做 kubectl 描述 Pod 时,我得到了两个不同的字段

Priority:           0
PriorityClassName:  imagebuild-priority

我的准入控制器抛出以下错误

Error from server (Forbidden): error when creating "/tmp/tmp.4tJSpSU0dy/app.yml": 
pods "pod-name" is forbidden: the integer value of priority (0) must not be provided in pod spec; 
priority admission controller computed -1000000 from the given PriorityClass name

在某处,它将优先级设置为 0,而 PriorityClass 试图将其设置为 -10000。

PriorityClass 对象具有全局默认值:假

命令运行

kubectl create -f app.yml

亚姆尔文件

---
apiVersion: v1
kind: Pod
metadata:
name: image-builder-serviceacc
spec:
securityContext:
runAsUser: 0
serviceAccountName: {{ serviceaccount }}
automountServiceAccountToken: false
containers:
- name: container
image: ....
imagePullPolicy: Always
env:
- name: PATH
value: "$PATH:/bin:/busybox/"
command: [ "sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
initContainers:
- name: init-container
image: ....
imagePullPolicy: Always
env:
- name: PATH
value: "$PATH:/bin:/busybox/"
command: [ "sh", "-c", "--" ]
args: [ "ls" ]
restartPolicy: Always

变异控制将附加优先级类

根据文档:

PriorityClass 还有两个可选字段:globalDefault 和 description。全局默认字段指示此优先级类的值应用于没有优先级类名称的 Pod。系统中只能存在一个将 globalDefault 设置为 true 的 PriorityClass。如果没有设置了全局默认的 PriorityClass,则没有 priorityClassName 的 Pod 的优先级为零。

此错误表示您有冲突

the integer value of priority (0) must not be provided in pod spec; 
priority admission controller computed -1000000 from the given PriorityClass name

您可以通过两种方式修复它:

您应该在全局默认:真之间进行选择:

优先级类:

apiVersion: scheduling.k8s.io/v1beta1
kind: PriorityClass
metadata:
name: high-priority-minus
value: -2000000
globalDefault: True
description: "This priority class should be used for XYZ service pods only."

荚:

apiVersion: v1
kind: Pod
metadata:
name: nginx5
labels:
env: test
spec:
containers:
- name: nginx5
image: nginx
imagePullPolicy: IfNotPresent
priorityClassName: high-priority-minus 

优先级类名可以在这里使用,但你不需要

或者使用全局默认: 假 :

您需要在 Pod 中选择1 个选项、优先级类名或优先级,如消息错误中所述。

优先级类:

apiVersion: scheduling.k8s.io/v1beta1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for XYZ service pods only."

荚:

apiVersion: v1
kind: Pod
metadata:
name: nginx7
labels:
env: test
spec:
containers:
- name: nginx7
image: nginx
imagePullPolicy: IfNotPresent
priorityClassName: high-priority

最新更新