Kubernetes NFS dauerhafte volumes permission denied
Ich habe eine Anwendung läuft über einen POD in Kubernetes.
Ich möchte zum speichern der Ausgabe-Datei protokolliert, die auf einem permanenten Speicher Volumen.
Damit zu tun, dass ich erstellt ein volume über NFS und Band es, um die Hülse durch das zugehörige volume Anspruch.
Wenn ich versuche zu schreiben oder ihm beitreten die freigegebenen Ordner habe ich ein "permission denied" - Nachricht, da der NFS ist anscheinend schreibgeschützt.
Folgenden ist die json-Datei, die ich verwendet, um das volume zu erstellen:
{
"kind": "PersistentVolume",
"apiVersion": "v1",
"metadata": {
"name": "task-pv-test"
},
"spec": {
"capacity": {
"storage": "10Gi"
},
"nfs": {
"server": <IPAddress>,
"path": "/export"
},
"accessModes": [
"ReadWriteMany"
],
"persistentVolumeReclaimPolicy": "Delete",
"storageClassName": "standard"
}
}
Folgenden ist die POD-Konfigurationsdatei
kind: Pod
apiVersion: v1
metadata:
name: volume-test
spec:
volumes:
- name: task-pv-test-storage
persistentVolumeClaim:
claimName: task-pv-test-claim
containers:
- name: volume-test
image: <ImageName>
volumeMounts:
- mountPath: /home
name: task-pv-test-storage
readOnly: false
Gibt es einen Weg, um Berechtigungen zu ändern?
UPDATE
Hier sind die PVC-und NFS-config:
PVC:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: task-pv-test-claim
spec:
storageClassName: standard
accessModes:
- ReadWriteMany
resources:
requests:
storage: 3Gi
NFS-CONFIG
{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "nfs-client-provisioner-557b575fbc-hkzfp",
"generateName": "nfs-client-provisioner-557b575fbc-",
"namespace": "default",
"selfLink": "/api/v1/namespaces/default/pods/nfs-client-provisioner-557b575fbc-hkzfp",
"uid": "918b1220-423a-11e8-8c62-8aaf7effe4a0",
"resourceVersion": "27228",
"creationTimestamp": "2018-04-17T12:26:35Z",
"labels": {
"app": "nfs-client-provisioner",
"pod-template-hash": "1136131967"
},
"ownerReferences": [
{
"apiVersion": "extensions/v1beta1",
"kind": "ReplicaSet",
"name": "nfs-client-provisioner-557b575fbc",
"uid": "3239b14a-4222-11e8-8c62-8aaf7effe4a0",
"controller": true,
"blockOwnerDeletion": true
}
]
},
"spec": {
"volumes": [
{
"name": "nfs-client-root",
"nfs": {
"server": <IPAddress>,
"path": "/Kubernetes"
}
},
{
"name": "nfs-client-provisioner-token-fdd2c",
"secret": {
"secretName": "nfs-client-provisioner-token-fdd2c",
"defaultMode": 420
}
}
],
"containers": [
{
"name": "nfs-client-provisioner",
"image": "quay.io/external_storage/nfs-client-provisioner:latest",
"env": [
{
"name": "PROVISIONER_NAME",
"value": "<IPAddress>/Kubernetes"
},
{
"name": "NFS_SERVER",
"value": <IPAddress>
},
{
"name": "NFS_PATH",
"value": "/Kubernetes"
}
],
"resources": {},
"volumeMounts": [
{
"name": "nfs-client-root",
"mountPath": "/persistentvolumes"
},
{
"name": "nfs-client-provisioner-token-fdd2c",
"readOnly": true,
"mountPath": "/var/run/secrets/kubernetes.io/serviceaccount"
}
],
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "Always"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"serviceAccountName": "nfs-client-provisioner",
"serviceAccount": "nfs-client-provisioner",
"nodeName": "det-vkube-s02",
"securityContext": {},
"schedulerName": "default-scheduler",
"tolerations": [
{
"key": "node.kubernetes.io/not-ready",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 300
},
{
"key": "node.kubernetes.io/unreachable",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 300
}
]
},
"status": {
"phase": "Running",
"hostIP": <IPAddress>,
"podIP": "<IPAddress>,
"startTime": "2018-04-17T12:26:35Z",
"qosClass": "BestEffort"
}
}
Habe ich gerade entfernt einige status-Informationen aus der nfs-config um es kürzer zu machen
Hast du die Lösung gefunden? gleiche Problem bei mir auch..
Einstellung der SecurityContext mit der richtigen Gruppen-ID, die in der pod-Konfiguration-Datei für mich gearbeitet
InformationsquelleAutor fragae | 2018-05-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die richtige
securityContext
für die pod-Konfiguration können Sie sicherstellen, dass das volume mit der richtigen Berechtigungen.Beispiel:
Im obigen Beispiel kann der Speicher montiert werden, an
/data/demo
mit 2000 Gruppen-id, die vonfsGroup
. Sie müssen herausfinden, die Gruppen-id des Benutzers, den Sie verwenden. Für das ausführen der container und geben Sieid
und suchengid
.Laufen die container und erhalten die Ergebnisse
id
Typ:docker run --rm -it example-image id
Lesen Sie mehr über pod Sicherheitskontext hier: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
Versuchte es auch mit NFS und es hat nicht funktioniert mit fsGroup. Wahrscheinlich, weil dieses Thema github.com/kubernetes/examples/issues/260
InformationsquelleAutor MrBlaise
Dank 白栋天 für die Tipp.
Zum Beispiel, wenn der pod securityContext gesetzt ist:
würden Sie ssh, um die NFS-host und führen Sie
Wenn Sie nicht wissen, die user:Gruppe oder viele Hülsen montieren, können Sie es ausführen
InformationsquelleAutor AlaskaJoslin
Ein einfacher Weg ist, um auf den nfs-storage, und chmod 777, oder chown mit der Benutzer-id in Ihrem Volumen-container
die Benutzer-id wird durch den BENUTZER bestimmt, die es in den Ende dockerfile, default ist 0(root), wenn u nicht wissen, die Benutzer-id (die bekommen Sie, indem Sie ausführen, "id" container"), dann verwenden Sie einfach chmod +R 777
Ich bin mir nicht sicher, warum jemand downvoted. Diese Frage ist spezifisch für NFS und anscheinend wie oben erwähnt das NFS-host muss die Berechtigungen, die festlegen, wie Kubernetes nicht verwaltet die NFS-host-Berechtigungen.
InformationsquelleAutor 白栋天
Ich bin ein wenig verwirrt aus, wie Sie versuchen, Dinge zu erledigen, in jedem Fall, wenn ich bin zu verstehen Sie richtig versuchen dieses Beispiel:
Und dann vielleicht ein init-container, tun Sie etwas:
oder ist es die volumeMounts Sie verpassen:
Mein letzten Kommentar wäre zur Kenntnis zu nehmen, auf den Container, ich glaube, du bist nur erlaubt, zu schreiben, in
/tmp
oder war es nur für die CoreOS? Ich würde schauen, dass bis.InformationsquelleAutor Naim Salameh
Haben Sie überprüft die Berechtigungen des Verzeichnisses ? Stellen Sie sicher, dass lese-Zugriff steht allen zur Verfügung.
InformationsquelleAutor sairam546