2016-02-04 11 views
5

Sto giocando con kubernetes e google container engine (GKE).Il contenitore Docker con utente non root distribuito in Google Container Engine non può scrivere sul disco persistente montato GCE

ho schierato un contenitore da questa immagine jupyter/all-spark-notebook

Questo è il mio controller di replica:

{ 
    "apiVersion": "v1", 
    "kind": "ReplicationController", 
    "metadata": { 
    "name": "datalab-notebook" 
    }, 
    "spec": { 
    "replicas": 1, 
    "selector": { 
     "app": "datalab-notebook" 
    }, 
    "template": { 
     "metadata": { 
     "name": "datalab-notebook", 
     "labels": { 
      "environment": "TEST", 
      "app": "datalab-notebook" 
     } 
     }, 
     "spec": { 
     "containers": [{ 
      "name": "datalab-notebook-container", 
      "image": "jupyter/all-spark-notebook", 
      "env": [], 
      "ports": [{ 
      "containerPort": 8888, 
      "name": "datalab-port" 
      }], 
      "volumeMounts": [{ 
      "name": "datalab-notebook-persistent-storage", 
      "mountPath": "/home/jovyan/work" 
      }] 
     }], 
     "volumes": [{ 
      "name": "datalab-notebook-persistent-storage", 
      "gcePersistentDisk": { 
      "pdName": "datalab-notebook-disk", 
      "fsType": "ext4" 
      } 
     }] 
     } 
    } 

    } 
} 

Come potete vedere ho montato un disco persistente Google Compute Engine. Il mio problema è che il contenitore utilizza un utente non root e il disco montato è di proprietà di root. quindi il mio contenitore non può scrivere sul disco.

  • Esiste un modo per montare GCE dischi persistenti e farli lettura/scrittura per i contenitori senza utenti non-root?
  • Un'altra domanda generale: è sicuro eseguire il contenitore con utente root in Google Container Engine?

Grazie in anticipo per il vostro input

+1

Cosa definiresti sicuro? Perché GKE ti offre ogni VM che viene eseguita come parte del cluster di kubernetes, almeno fino a quel momento, non è sicuro che sia ancora così, ma credo di sì. Quindi un contenitore utente root equivale a eseguire root sul tuo host, quindi se l'applicazione funziona correttamente con root normalmente, allora dovresti stare bene –

risposta

2

Ho incontrato lo stesso problema. La soluzione che ho usato era di eseguire df -h sul computer host su cui era in esecuzione il contenitore. Da lì sono stato in grado di trovare il punto di collegamento della memoria persistente. Dovrebbe assomigliare a /var/lib/kubelet/plugins/kubernetes.io/gce-pd/mounts/<pd-name>. Sarà anche uno di quelli che ha un file system che inizia con /dev che non è montato su root.

Una volta scoperto che è possibile eseguire sudo chmod -R 0777 /var/lib/kubelet/plugins/kubernetes.io/gce-pd/mounts/<pd-name> dalla casella host, e ora almeno il contenitore può utilizzare la directory, anche se i file saranno ancora di proprietà di root.

+0

Il lavoro intorno ha funzionato per me. Grazie a @funkymonkeymonk ma penso che dobbiamo configurare questo tipo di modifica dei permessi nel file di configurazione di kubernetes – med

+1

Sono nella stessa barca. Penso che ci sia bisogno di una soluzione migliore, ma fino a quando ciò accadrà questo lavoro è abbastanza facile da automatizzare nel provisioning. – funkymonkeymonk

+0

C'è qualche PR che possiamo tenere traccia di questo lavoro? Mi piacerebbe metterlo su una lista di controllo al lavoro. – funkymonkeymonk

11

È possibile utilizzare il campo FSGroup del contesto di protezione del baccello di rendere scrivibile GCE PD dagli utenti non-root.

In questo esempio, il volume GCE saranno di proprietà del gruppo 1234 e il processo di container avrà 1234 nella sua lista dei gruppi supplementari:

apiVersion: v1 
kind: Pod 
metadata: 
    name: test-pd 
spec: 
    securityContext: 
    fsGroup: 1234 
    containers: 
    - image: gcr.io/google_containers/test-webserver 
    name: test-container 
    volumeMounts: 
    - mountPath: /test-pd 
     name: test-volume 
    volumes: 
    - name: test-volume 
    # This GCE PD must already exist. 
    gcePersistentDisk: 
     pdName: my-data-disk 
     fsType: ext4 
+1

Grazie per il tuo contributo, ho provato questa soluzione, ma sembra che fsGroup non sia supportato ancora in GKE. Anche se non è presente nella documentazione, l'ho trovato solo qui https://github.com/kubernetes/kubernetes/blob/master/docs/proposals/volumes.md – med

+0

@med Farò qualche ricerca su questo per voi. –

+0

Grazie a @PaulMorie – med

Problemi correlati