跳到主要内容

Kubernetes 内核参数

Kubernetes 上的 HivePlus 允许用户使用 sysctl 接口配置 ContainerWorker Pod 的内核参数。理想情况下,我们希望通过利用 ContainerWorker Pod 的 securityContext 直接设置内核参数,但 MR3 的 Kubernetes 客户端尚不支持设置 securityContext。作为变通方案,MR3 创建一个init container,在启动 ContainerWorker 之前执行 sysctl 命令来配置内核参数。

在 init container 中使用 sysctl

为了使用 sysctl 接口,用户应在 kubernetes/conf/mr3-site.xml 中使用配置键 mr3.k8s.pod.worker.security.context.sysctls 指定 ContainerWorker Pod 的内核参数。例如,我们可以为 net.core.somaxconnnet.ipv4.ip_local_port_range 指定新值,如下所示:

vi kubernetes/conf/mr3-site.xml
<property>
<name>mr3.k8s.pod.worker.security.context.sysctls</name>
<value>net.core.somaxconn=16384,net.ipv4.ip_local_port_range='1024 65535'</value>
</property>

此外,用户应使用配置键 mr3.k8s.pod.worker.init.container.image 为 init container 指定 Docker 镜像。通常,一个小型 Docker 镜像(如 busybox)就可以,只要它包含命令 /bin/shsysctl

vi kubernetes/conf/mr3-site.xml
<property>
<name>mr3.k8s.pod.worker.init.container.image</name>
<value>busybox</value>
</property>

如果 mr3.k8s.pod.worker.security.context.sysctls 设置为空,则不会创建 init container。

用户可以检查 ContainerWorker Pod 内的内核参数。

kubectl exec -n hivemr3 -it mr3worker-a576-21 -- sysctl net.core.somaxconnnet.core.somaxconn = 16384

设置 PodSecurityPolicy

管理员用户应使用合适的集群级 PodSecurityPolicy 资源,以便:1) ContainerWorker Pod 可以创建特权容器(因为 init container 以特权模式运行);2) 可以覆盖使用 mr3.k8s.pod.worker.security.context.sysctls 指定的内核参数。