J'utilise ConfigMap
Pour exposer un fichier PHP destiné à être partagé à travers des gousses et écrities par le www-data
(Apache) utilisateur.
Configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: magento-config
data:
env.php: |
<?php
return array ( ...
Déploiement
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: Apache-deployment
spec:
...
spec:
containers:
- name: Apache
image: Apache:2.4
...
volumeMounts:
- name: magento-configs
mountPath: /var/www/html/etc
imagePullPolicy: Always
volumes:
- name: magento-configs
configMap:
name: magento-config
Le fichier apparaît inscriptible uniquement par root
si
root@Apache-deployment-79c8548cdc-r6qhs:/# realpath /var/www/html/etc/env.php
/var/www/html/etc/..2018_04_23_16_21_10.435323593/env.php
root@Apache-deployment-79c8548cdc-r6qhs:/# ls -l /var/www/html/etc/..2018_04_23_16_21_10.435323593/env.php
-rw-r--r-- 1 root root 909 Apr 23 16:21
Est-ce qu'il y a une façon de changer ceci-ci? J'ai remarqué VolumeMount
a une propriété readOnly
qui par défaut à false
. En effet, le volume est écritable, mais seulement par root
.
J'ai essayé de définir Apache_RUN_USER
à root
à Apache, mais cela veut que je recompile (en utilisant actuellement la construction d'APT) lol, ce qui ressemble à la mauvaise direction. Je voudrais juste comprendre comment utiliser ConfigMap
correctement si possible.
Mise à jour :
Vous devez donc utiliser une version antérieure de Kubettes <1.13 qui est toujours autorisée pour ce comportement de volume de données. Je vais vous dire qu'en 1.13+ et plus tard, vous ne pourrez pas avoir de montures en lecture-écriture comme celle-là. Cependant, il y a un travail autour, ce qui pourrait être la façon de faire des choses de "Kubettes" (même si j'ai du mal à comprendre pourquoi c'est mieux).
le travail autour de :
Dans votre pod/déploiement, créez un conteneur init qui monte deux volumes. Le premier volume étant votre fichier configmap (fichier) et le second étant un conteneur ELTLEDIR. Nous examinerons le premier volume (configmap) comme source et plus tard comme destination. Ensuite, tout ce que vous avez à faire dans votre nouveau conteneur init est de copier le contenu du volume source sur le volume de destination.
Ensuite, dans votre section de conteneur d'applications normale, montez le conteneur de destination de ce qui précède, puis vous disposez de capacités de lecture/écriture complètes sans avoir à gérer les changements d'API de Kubete. Cela devrait également résister à une grande partie des changements d'API qu'ils envisagent de faire à l'avenir.
Ok, j'ai trouvé quelque chose fonctionnel (mais pas idéal). J'ai d'abord découvert que je peux monter le fichier directement à partir du ConfigMap
avec le paramètre subPath
:
containers:
- name: Apache
image: Apache:2.4
...
volumeMounts:
- name: magento-configs
mountPath: /var/www/html/app/env/etc.php
subPath: etc.php
imagePullPolicy: Always
volumes:
- name: magento-configs
configMap:
name: magento-config
J'ai ensuite découvert la modification de la propriété du fichier à l'intérieur de la pod fonctionne et une fois changé www-data
peut écrire dans le fichier. Donc je me suis installé sur un Crochet de cycle de vie post-démarrage qui change de propriété lorsque la pod commence
containers:
- name: Apache
image: Apache:2.4
lifecycle:
postStart:
exec:
command: ["chown", "www-data:www-data", "/var/www/html/app/etc/env.php"]
Idéalement, la propriété du fichier serait quelque chose que nous pourrions configurer sur le paramètre volumeMount
.