使用modprobe的GKE节点



是否有一种方法可以在启动/升级节点或在GKE中自动加载任何内核模块(在我的情况下为" modprobe nfsd"(?我们正在kubernetes群集上运行NFS服务器吊舱,并且在每个GKE升级之后都死了

既尝试cos and ubuntu images,''似乎都没有默认加载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

我遇到了同样的问题,现有答案是正确的,我想在Kubernetes群集中使用nfs POD的工作示例将其扩展,该群集具有可加载所需模块的功能和库。

它有两个重要部分:

  • 特权模式
  • 已安装的/lib/modules目录在容器中使用它

nfs-server.yaml

kind: Pod
apiVersion: v1
metadata:
  name: nfs-server-pod
spec:
  containers:
    - name: nfs-server-container
      image: erichough/nfs-server
      securityContext:
        privileged: true
      env:
      - name: NFS_EXPORT_0
        value: "/test *(rw,no_subtree_check,insecure,fsid=0)"
      volumeMounts:
      - mountPath: /lib/modules # mounting modules into container
        name: lib-modules
        readOnly: true # make sure it's readonly
      - mountPath: /test
        name: export-dir
  volumes:
  - hostPath: # using hostpath to get modules from the host
      path: /lib/modules
      type: Directory
    name: lib-modules
  - name: export-dir
    emptyDir: {}

也有帮助的参考 - 自动加载所需的内核模块。

默认情况下,您无法从容器内部加载模块,因为不包括内核组件是容器的主要原因之一,便于轻便且便携。您需要从主机操作系统中加载模块,以使其在容器中可用。这意味着您可以简单地启动一个脚本,该脚本可以在每个GKE升级后都可以使用所需的内核模块。

但是,存在一种有点骇人听闻的方法,可以从码头容器内部加载内核模块。这一切都归结为启动具有升级特权并访问某些主机目录的容器。如果您真的想在容器内安装内核模块,则应该尝试一下。

最新更新