2017-07-27 67 views
1

我有一個kubernetes集羣正在網絡外運行,並在同一網絡中的另一臺機器上安裝了NFS服務器。我能ssh到任何節點的集羣中,並從服務器安裝運行sudo mount -t nfs 10.17.10.190:/export/test /mnt但每當我的測試莢嘗試使用一個NFS持久卷一個指向該服務器失敗此消息:Kubernetes窗格無法從外部nfs掛載

Events: 
    FirstSeen LastSeen Count From   SubObjectPath Type  Reason  Message 
    --------- -------- ----- ----   ------------- -------- ------  ------- 
    19s  19s  1 default-scheduler   Normal  Scheduled Successfully assigned nfs-web-58z83 to wal-vm-newt02 
    19s  3s  6 kubelet, wal-vm-newt02   Warning  
FailedMount MountVolume.SetUp failed for volume "kubernetes.io/nfs/bad55e9c-7303-11e7-9c2f-005056b40350-test-nfs" (spec.Name: "test-nfs") pod "bad55e9c-7303-11e7-9c2f-005056b40350" (UID: "bad55e9c-7303-11e7-9c2f-005056b40350") with: mount failed: exit status 32 
Mounting command: mount 
Mounting arguments: 10.17.10.190:/exports/test /var/lib/kubelet/pods/bad55e9c-7303-11e7-9c2f-005056b40350/volumes/kubernetes.io~nfs/test-nfs nfs [] 
Output: mount.nfs: access denied by server while mounting 10.17.10.190:/exports/test 

有誰知道我可以如何解決這個問題,並讓它可以從外部NFS服務器上掛載?

集羣的節點正在10.17.10.185 - 10.17.10.189上運行,並且所有的集羣都以ips開頭並以10.0.x.x開頭。羣集上的所有節點和NFS服務器都運行Ubuntu。 NFS服務器上10.17.10.190運行這個/etc/exports

/export   10.17.10.185/255.0.0.0(rw,sync,no_subtree_check) 

我建立一個持久的量和持續的音量要求,他們都創造成功顯示運行kubectl get pv,pvc輸出:

NAME   CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM    STORAGECLASS REASON AGE 
pv/test-nfs 1Mi  RWX   Retain   Bound  staging/test-nfs       15m 

NAME   STATUS VOLUME  CAPACITY ACCESSMODES STORAGECLASS AGE 
pvc/test-nfs Bound  test-nfs 1Mi  RWX       15m 

他們創建像這樣:

apiVersion: v1 
kind: PersistentVolume 
metadata: 
    name: test-nfs 
spec: 
    capacity: 
    storage: 1Mi 
    accessModes: 
    - ReadWriteMany 
    nfs: 
    # FIXME: use the right IP 
    server: 10.17.10.190 
    path: "/exports/test" 
--- 
kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: test-nfs 
spec: 
    accessModes: 
    - ReadWriteMany 
    resources: 
    requests: 
     storage: 1Mi 

我的測試盒使用這種配置:

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: nfs-web 
spec: 
    replicas: 1 
    selector: 
    role: web-frontend 
    template: 
    metadata: 
     labels: 
     role: web-frontend 
    spec: 
     containers: 
     - name: web 
     image: nginx 
     ports: 
      - name: web 
      containerPort: 80 
     volumeMounts: 
      # name must match the volume name below 
      - name: test-nfs 
       mountPath: "/usr/share/nginx/html" 
     volumes: 
     - name: test-nfs 
     persistentVolumeClaim: 
      claimName: test-nfs 

回答

1

這可能是因爲您的pod /容器中使用的uid在NFS服務器上沒有足夠的權限。

您可以像@Giorgio所說的那樣運行AsUser,或者嘗試編輯您的命名空間的uid-range註釋並修復一個值(例如:666)。像這樣,你的命名空間 中的每個容器都將與uid 666一起運行。

不要忘記chown 666正確的你的NFS目錄。

+0

修正了uid工作的值,我不確定爲什麼它不能與標準用戶一起工作,對於我的用戶的實際uid而言,一定是奇怪的。 –

+0

@ColinMaxfield:你能否解釋一下如何修復pod和NFS共享的UID? – n3o

+0

@ n3o我剛剛通過使用runAsUser設置了我選擇的特定用戶標識來進行Nicolas建議,然後我使用chown更改了NFS目錄的所有權以匹配相同的用戶標識。 –

1

你必須設置一個的SecurityContext特權:真。看看這link

+0

嗯,我試着用'特權:真正'運行容器,它仍然表現相同的方式。我也嘗試過'runAsUser:65534'(nfs的無人使用者)​​,它顯示了同樣的錯誤。 –

相關問題