Изменение ограниченных полей шаблонов в kubernetes и openshift - PullRequest
0 голосов
/ 06 марта 2020

Я использую игровую площадку openshift. Я развернул пример приложения и экспортировал yaml для модуля. При попытке изменить некоторые поля я наткнулся на это сообщение Forbidden: unsafe sysctl "kernel.msgmax" is not allowed

Поиск по ссылке https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/#listing -all-sysctl-parameters описывает, как некоторые параметры помечены как небезопасные и не могут можно изменить, но безопасные могут

Но даже ошибка безопасного sysctls выдает

spec: Forbidden: pod updates may not change fields other than spec.containers[*].image, spec.initContainers[*].image, spec.activeDeadlineSeconds or spec.tolerations
  1. Является ли игровая среда, которая ограничивает изменения параметров ядра? Нужно ли мне иметь собственную установку minikube, чтобы можно было изменять параметры небезопасного sysctl?
  2. Помимо альтернатив minikube / kubelet, предоставленных для редактирования / включения небезопасных sysctl, есть ли другой способ? Что было бы хорошим способом настроить параметры ядра для модуля?

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Безопасные sysctls, выдающие эту ошибку, ожидаемое поведение. Что вам нужно сделать, это удалить модуль перед применением отредактированного yaml к кластеру. Эту ошибку также можно избежать, если использовать развертывание вместо модуля напрямую.

0 голосов
/ 06 марта 2020

Пожалуйста, внимательно прочитайте этот раздел документации. Там все четко объяснено.

Что касается настройки Небезопасных Sysctls , вам необходимо дополнительно включить их на уровне узла:

Все safe sysctls включены по умолчанию.

Все unsafe sysctl отключены по умолчанию и должны быть разрешены вручную администратором кластера для каждого узла. Блоки с отключенными небезопасными sysctl будут запланированы, но не будут запускаться.

С учетом вышеизложенного предупреждения администратор кластера может разрешить определенные небезопасные sysctl для очень особых ситуаций, таких как высокая настройка производительности или приложений в реальном времени. Небезопасные sysctl включаются для каждого узла отдельно с флагом кублета; например:

kubelet --allowed-unsafe-sysctls \
  'kernel.msg*,net.core.somaxconn' ...

Для Minikube это можно сделать с помощью флага extra-config:

minikube start --extra-config="kubelet.allowed-unsafe-sysctls=kernel.msg*,net.core.somaxconn"...

Только sysctls могут быть включены таким образом.

Что касается ...

Но даже ошибка безопасного sysctls выдает

spec: Forbidden: pod updates may not change fields other than spec.containers[*].image, spec.initContainers[*].image, spec.activeDeadlineSeconds or spec.tolerations

Это совершенно другое сообщение об ошибке и это не имеет никакого отношения к ограничениям, связанным с изменением sysctl в вашем определении Pod. Обратите внимание, что вы не можете изменить большинство ваших Pod спецификаций через kubectl edit, за исключением нескольких исключений, перечисленных в сообщении выше. В частности, вы не можете изменить их без воссоздания Pod, поэтому в этом случае вместо редактирования вы можете просто запустить:

kubectl get pod pod-name -o yaml > my-pod.yaml

Затем вы можете отредактировать необходимые поля Pod spe c и заново развернуть их it:

kubectl apply -f my-pod.yaml

В качестве альтернативы вы можете отредактировать ваш Deployment, как @Arghya Sadhu уже предложил в своем ответе. Deployment controller воссоздает эти Pods для вас с обновленной спецификацией.


Является ли игровая среда, которая ограничивает изменения параметров ядра? Нужно ли мне иметь собственную установку мини-куба, чтобы можно было изменять небезопасные параметры sysctl?

Не совсем. Вы можете включить их на каждом узле, который является частью вашего кластера, переконфигурировав kubelets . Что касается изменения конфигурации kubelet , это может быть сделано по-разному в зависимости от вашей установки kubernetes . В случае, если он был создан с kubeadm , вам просто нужно отредактировать следующий файл:

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

, затем запустить:

sudo systemctl daemon-reload

и перезапустить kubelet, выполнив:

sudo systemctl restart kubelet.service

Помимо альтернатив minikube / kubelet, предоставленных для редактирования / включения небезопасных sysctl, есть ли другой способ? Что было бы хорошим способом настроить параметры ядра для модуля?

Ответ выше.

Надеюсь, это прояснило ваши сомнения по поводу установки safe и небезопасных sysctls в Kubernetes Cluster .

...