0

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

所以问题是我在我的 k8s 集群中创建了一个 PriorityClass 对象并将其值设置为 -100000 并创建了一个具有此 priorityClass 的 pod。现在当我做 kubectl describe 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

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

PriorityClass 对象具有 globalDefault: False

命令运行

kubectl create -f app.yml

yaml 文件

---
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

4

1 回答 1

0

根据文档

PriorityClass 还有两个可选字段:globalDefault 和 description。globalDefault 字段表示此 PriorityClass 的值应该用于没有 priorityClassName 的 Pod。系统中只能存在一个 globalDefault 设置为 true的 PriorityClass。如果没有设置 globalDefault 的 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

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

您应该在globalDefault: true之间进行选择:

优先级:

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 

priorityClassName可以在这里使用,但你不需要

或使用globalDefault: false

您需要在您的 pod 中选择1 个选项, priorityClassName 或优先级,如您的消息错误中所述。

优先级:

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
于 2019-09-05T09:03:27.737 回答