web-dev-qa-db-fra.com

Comment changer l'autorisation du volume mappé dans kubernetes / Docker

Je viens de créer une image en utilisant le fichier Docker et pour changer d'utilisateur, je viens d'utiliser:

USER myuser

Nous utilisons un répertoire pour stocker des données, nous modifions cette autorisation de répertoire en utilisant:

chown -R myuser:myuser /data-dir

Ce fichier Docker est pour etcd, où nous voulons que/data-dir soit utilisé par etcd pour stocker les données. Maintenant, nous mappons le répertoire/data-dir au volume efs à l'aide du fichier kubernetes yml.

Avec le code ci-dessous:

volumeMounts:
        - name: etcdefs
          mountPath: /data-dir
      volumes:
      - name: etcdefs
        persistentVolumeClaim:
          claimName: efs-etcd

Après cela, je m'attends à ce que le répertoire/répertoire de données mappé ait la permission en tant que myuser: myuser mais qu'il crée le répertoire en tant que root: root

Quelqu'un peut-il suggérer ce que je fais mal ici?

8
Sagan Pariyar

C'est à cause de docker. Il monte le volume uniquement avec l'autorisation root et vous pouvez le modifier avec chmod mais uniquement après le démarrage du conteneur.

Vous pouvez en savoir plus à ce sujet ici https://github.com/moby/moby/issues/2259 Ce problème est là depuis longtemps.

Ce que vous pouvez faire dans kubernetes est d'utiliser fsGroup et forcer que le volume soit accessible en écriture par le GID spécifié. C'est une solution de travail et également documentée. Plus d'informations ici https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

Voici un exemple de déploiement:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: Alpine
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: Alpine
    spec:
      securityContext:
        fsGroup: 1000
      containers:
        - name: Alpine
          image: Alpine
          volumeMounts:
              - mountPath: /var/Alpine
                name: Alpine
      volumes:
        - name: Alpine
          awsElasticBlockStore:
            volumeID: vol-1234567890
            fsType: ext4
17
3h4x