#kubernetes #kubernetes-pvc
#kubernetes #kubernetes-pvc
Вопрос:
Я запускаю модуль (используется пользователем, не являющимся Root), которому необходимо записать данные на том. Том поступает из PVC.
Определение pod простое
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: test-pvc
containers:
- name: task-pv-container
image: jnlp/jenkins-slave:latest
command: ["/bin/bash"]
args: ["-c", "sleep 500"]
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
Когда я exec
вхожу в модуль и пытаюсь записать в /usr/share/nginx/html
Я получаю
jenkins@task-pv-pod:/usr/share/nginx/html$ touch test
touch: cannot touch ‘test’: Permission denied
Смотрим на разрешения каталога
jenkins@task-pv-pod:~$ ls -ld /usr/share/nginx/html
drwxr-xr-x 3 root root 4096 Mar 29 15:52 /usr/share/nginx/html
Понятно, что ТОЛЬКО пользователь root может записывать в /usr/share/nginx/html
но это не то, что я хочу.
Есть ли способ изменить разрешения для смонтированных томов?
Ответ №1:
Вы можете рассмотреть возможность использования initContainer для монтирования вашего тома и изменения разрешений. initContainer будет запущен до запуска основного контейнера (ов). Обычным шаблоном для такого использования является наличие образа busybox (~ 22 МБ) для монтирования тома и запуска chown или chmod в каталоге. При запуске основного контейнера вашего модуля тома будут иметь правильные права владения / доступа.
В качестве альтернативы вы можете рассмотреть возможность использования initContainer для внедрения соответствующих файлов, как показано в этом примере.
Надеюсь, это поможет!
Ответ №2:
Контекст безопасности определяет настройки привилегий и контроля доступа для модуля или контейнера. Просто попробуйте SecurityContext:
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
securityContext:
fsGroup: $jenkins_uid
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: test-pvc
...
Комментарии:
1. Просто используйте то же самое
fsGroup
дляsecurityContext
подspec
иsecurityContext
под вашим контейнером. Тогда у вас должен быть доступ на запись.