带有modprobe的GKE节点

时间:2019-07-08 09:10:14

标签: kubernetes google-kubernetes-engine

在启动/升级节点或在GKE中后,是否可以自动加载任何内核模块(在我的情况下为“ modprobe nfsd”)?我们正在kubernetes集群上运行一个NFS服务器Pod,它在每次GKE升级后都会消失

尝试了cos和ubuntu图像,它们似乎都没有默认加载nfsd。

也尝试过类似的方法,但似乎并没有达到预期的效果:

kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: nfsd-modprobe
  labels:
    app: nfsd-modprobe
spec:
  template:
    metadata:
      labels:
        app: nfsd-modprobe
    spec:
      hostPID: true
      containers:
        - name: nfsd-modprobe
          image: gcr.io/google-containers/startup-script:v1
          imagePullPolicy: Always
          securityContext:
            privileged: true
          env:
          - name: STARTUP_SCRIPT
            value: |
              #! /bin/bash

              modprobe nfs
              modprobe nfsd
              while true; do sleep 1; done

1 个答案:

答案 0 :(得分:0)

默认情况下,您不能从容器内部加载模块,因为排除内核组件是容器轻巧且可移植的主要原因之一。您需要从主机OS加载模块,以使其在容器中可用。这意味着您只需启动一个脚本,即可在每次GKE升级后启用所需的内核模块。

但是,有一个somewhat hacky way可以从docker容器内部加载内核模块。一切归结为以升级的特权和对某些主机目录的访问权来启动容器。如果您确实想在容器内挂载内核模块,则应尝试使用该程序。