В Куберне sysctl
были сгруппированы в safe
и unsafe
.
В дополнение к правильному пространству имен, sysctl safe должен быть правильно изолирован между модулями на одном узле. Это означает, что установка safe sysctl для одного модуля
- не должна иметь никакого влияния на другие модули на узле
- не должна позволять вредить узлу работоспособность
- не должна позволять получать ресурсы ЦП или памяти вне пределов ресурсов модуля.
На сегодняшний день большинство пространств имен sysctl не являются обязательно считается безопасным . В наборе safe поддерживаются следующие sysctl:
kernel.shm_rmid_forced
, net.ipv4.ip_local_port_range
, net.ipv4.tcp_syncookies
.
По умолчанию все safe sysctls
включены по умолчанию. Все unsafe sysctls
отключены и должны быть разрешены вручную администратором кластера на каждом узле.
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 k8s документации.
Что касается Настройка Sysctls для Pod :
Количество sysctl в пространстве имен в современных Linux ядрах. Это означает, что они могут быть установлены независимо для каждого модуля на узле. С помощью модуля pod securityContext в Kubernetes можно настроить только sysctl с пространством имен.
Известно, что следующие sysctl являются пространством имен. Этот список может измениться в будущих версиях ядра Linux. - kernel.shm*
, - kernel.msg*
, - kernel.sem
, - fs.mqueue.*
, - Параметры в net.*
, которые можно установить в пространстве имен сети контейнера. Однако существуют исключения (например, net.netfilter.nf_conntrack_max
и net.netfilter.nf_conntrack_expect_max
могут быть установлены в пространстве имен сети контейнера, но они не имеют пространства имен).
Sysctl без пространства имен называются уровень узла sysctls , Если вам нужно установить их, вы должны вручную настроить их в операционной системе каждого узла или с помощью DaemonSet с привилегированными контейнерами.
Используйте pod securityContext для настройки sysctls в пространстве имен. SecurityContext применяется ко всем контейнерам в одном модуле.
В этом примере используется модуль pod securityContext для установки безопасного sysctl kernel.shm_rmid_forced
и двух небезопасных sysctl net.core.somaxconn
и kernel.msgmax
. В спецификации нет различия между safe и unsafe * sysctls.
apiVersion: v1
kind: Pod
metadata:
name: sysctl-example
spec:
securityContext:
sysctls:
- name: kernel.shm_rmid_forced
value: "0"
- name: net.core.somaxconn
value: "1024"
- name: kernel.msgmax
value: "65536"
...
Возможно, вам будет интересно прочитать следующие вопросы по StackOverflow Плюсы и минусы отключения отметок времени TCP и Какие преимущества дает отметка времени TCP? .