禁用Kubernetes的透明大页面

chi*_*gis 6 redis docker kubernetes

我通过Kubernetes部署Redis容器并收到以下警告:

警告您在内核中启用了透明大页面(THP)支持.这将导致Redis的延迟和内存使用问题.要解决此问题,请以root身份运行命令'echo never>/sys/kernel/mm/transparent_hugepage/enabled',并将其添加到/etc/rc.local中,以便在重新启动后保留设置.禁用THP后必须重新启动Redis

是否可以通过Kubernetes禁用THP?也许通过init-containers?

Jan*_*art 13

是的,使用init-containers,它非常简单:

apiVersion: v1
kind: Pod
metadata:
  name: thp-test
spec:
  restartPolicy: Never
  terminationGracePeriodSeconds: 1
  volumes:
    - name: host-sys
      hostPath:
        path: /sys
  initContainers:
    - name: disable-thp
      image: busybox
      volumeMounts:
        - name: host-sys
          mountPath: /host-sys
      command: ["sh", "-c", "echo never >/host-sys/kernel/mm/transparent_hugepage/enabled"]
  containers:
    - name: busybox
      image: busybox
      command: ["cat", "/sys/kernel/mm/transparent_hugepage/enabled"]
Run Code Online (Sandbox Code Playgroud)

演示(注意这是系统范围的设置):

$ ssh THATNODE cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
$ kubectl create -f thp-test.yaml
pod "thp-test" created
$ kubectl logs thp-test
always madvise [never]
$ kubectl delete pod thp-test
pod "thp-test" deleted
$ ssh THATNODE cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
Run Code Online (Sandbox Code Playgroud)

  • 对其他正在运行的容器有影响吗? (2认同)