Kubernetes,无法通过DNS挂载NFS共享

时间:2018-03-14 09:59:27

标签: docker kubernetes rpc nfs persistent-volumes

我试图通过DNS查找在我的容器中挂载一个NFS共享(在k8s群集之外),我的配置如下

apiVersion: v1
kind: Pod
metadata:
  name: service-a
spec:
  containers:
  - name: service-a
    image: dockerregistry:5000/centOSservice-a
    command: ["/bin/bash"]
    args: ["/etc/init.d/jboss","start"]
    volumeMounts:
      - name: service-a-vol
        mountPath: /myservice/por/data
  volumes:
    - name: service-a-vol
      nfs:
        server: nfs.service.domain
        path: "/myservice/data"
  restartPolicy: OnFailure 

nfs.service.domin的nslookup可以从我的容器中正常工作。这是通过StubDomain获得的。但是,在创建容器时,无法解析nfs服务器。错误:

Warning  FailedMount  <invalid>  kubelet, worker-node-1  MountVolume.SetUp failed for volume "service-a-vol" : mount failed: exit status 32
Mounting command: systemd-run
Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/44aabfb8-2767-11e8-bcf9-fa163ece9426/volumes/kubernetes.io~nfs/service-a-vol --scope -- mount -t nfs nfs.service.domain:/myservice/data /var/lib/kubelet/pods/44aabfb8-2767-11e8-bcf9-fa163ece9426/volumes/kubernetes.io~nfs/service-a-vol
Output: Running scope as unit run-27293.scope.
mount.nfs: Failed to resolve server nfs.service.domain: Name or service not known
mount.nfs: Operation already in progress

如果我将server: nfs.service.domain修改为server: 10.10.1.11,这样可以正常使用!总结一下

  1. 服务的DNS解析正常
  2. 通过DNS解析安装
  3. 通过特定IP地址挂载
  4. 我尝试过Headless Service而不是StubDomain,但存在同样的问题
  5. 任何帮助非常感谢

    Update 1 :如果我在worker / master节点10.10.1.11 nfs.service.domain的/ etc / hosts文件中添加一个条目,那么server: nfs.service.domain之上的配置就可以了。这显然不是一个理想的解决方法......

1 个答案:

答案 0 :(得分:1)

正如@Giorgio Cerruti所指出的那样,this github ticket中引用了这一点,目前这是不可能的,因为节点需要能够解析DNS条目而且它不能解析kube-dns。两种可能的解决方案是:

  1. 更新每个kubernetes节点的/etc/hosts以解析NFS端点(根据上面的更新)。这是一个原始的解决方案。
  2. 对此NFS服务和同一域(如NFS)中的任何其他远程服务都有效的更强大的修复方法是将远程DNS服务器添加到kubernetes节点resolv.conf

    someolddomain.org service.domain xx.xxx.xx nameserver 10.10.0.12 nameserver 192.168.20.22 nameserver 8.8.4.4