#kubernetes #kubectl #kubernetes-pod #pod-priority
#kubernetes #kubectl #kubernetes-pod #pod-приоритет
Вопрос:
Я пытаюсь использовать PriorityClass.
Я создаю два модуля, первый из которых имеет приоритет, критичный для системного узла, а второй — для узла кластера.
Оба модуля должны запускаться на узле, помеченном nodeName: k8s-minion1, но на таком узле всего 2 процессора, в то время как оба модуля запрашивают 1,5 процессора. Затем я ожидаю, что второй модуль будет запущен, а первый находится в состоянии ожидания. Вместо этого всегда выполняется первый модуль, независимо от того, какой classpriority я применяю ко второму модулю.
Я даже пытался пометить узел после применения моего манифеста, но это ничего не меняет.
Вот мой манифест :
apiVersion: v1
kind: Pod
metadata:
name: firstpod
spec:
containers:
- name: container
image: nginx
resources:
requests:
cpu: 1.5
nodeSelector:
nodeName: k8s-minion1
priorityClassName: cluster-node-critical
---
apiVersion: v1
kind: Pod
metadata:
name: secondpod
spec:
containers:
- name: container
image: nginx
resources:
requests:
cpu: 1.5
priorityClassName: system-node-critical
nodeSelector:
nodeName: k8s-minion1
Стоит отметить, что я получаю сообщение об ошибке, "unknown object : priorityclass"
когда я это делаю kubectl get priorityclass
, и когда я экспортирую свой запущенный модуль в yml с помощью kubectl get pod secondpod -o yaml
, я не могу найти ни одного classpriority:
поля.
Вот информация о моей версии:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:55:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0 coreos.0", GitCommit:"6bb2e725fc2876cd94b3900fc57a1c98ca87a08b", GitTreeState:"clean", BuildDate:"2018-04-02T16:49:31Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Есть идеи, почему это не работает?
Заранее спасибо,
Абдельгани
Комментарии:
1. Какая у вас версия kube? Возможно, вы используете более старую версию, которая его не поддерживает.
2. Спасибо @Faheem за ваш ответ. Я только что добавил информацию о своей версии
Ответ №1:
Классы приоритетов впервые появились в k8s 1.8 в качестве альфа-функции. Он перешел на бета-версию в 1.11
Вы используете версию 1.10, и это означает, что эта функция находится в альфа-версии.
Альфа-функции по умолчанию не включены, поэтому вам нужно будет включить их.
К сожалению, версия k8s 1.10 больше не поддерживается, поэтому я бы посоветовал обновить хотя бы до 1.14, где функция PriorityClass стала стабильной.
Комментарии:
1. Спасибо за ваш ответ, но разве я не должен получать уведомление от kubernetes, когда это происходит?
2. Вот фрагмент кода, отвечающий за проверку этого конкретного поля. Как вы можете видеть, его проверка пропускается, если функция отключена, но это поле существует, и k8s знает об этом. Это просто игнорирование @Abdelghani
3. Спасибо @HelloWorld. Я не знаком с кодом K8s Go, но, если я его хорошо понимаю, анализатор проверяет функцию priorityclass только в том случае, если она поддерживается. В противном случае он ничего не делает (без предупреждающего сообщения). Знаете ли вы, предназначено ли такое поведение и есть ли для этого особая причина?
4. Я уже упоминал, что в версии 1.10 эта функция находится на стадии альфа-тестирования, так что не удивляйтесь, если она работает не так, как вы ожидаете. @Abdelghani