qui*_*tin 4 permissions kubernetes
我用来ConfigMap公开一个 php 文件,该文件旨在跨 pod 共享并可由www-data(Apache) 用户写入。
配置映射表
apiVersion: v1
kind: ConfigMap
metadata:
name: magento-config
data:
env.php: |
<?php
return array ( ...
Run Code Online (Sandbox Code Playgroud)
部署
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
Run Code Online (Sandbox Code Playgroud)
root该文件看起来只能写入
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
Run Code Online (Sandbox Code Playgroud)
有什么办法可以改变这个吗?我注意到VolumeMount有一个readOnly属性默认为false. 事实上,该卷是可写的,但只能通过root.
我尝试在 Apache 中设置APACHE_RUN_USER为root,但它要求我重新编译(当前使用 apt 构建)哈哈,这感觉像是错误的方向。ConfigMap如果可能的话,我想弄清楚如何正确使用。
小智 6
更新:
因此,您必须使用 Kubernetes < 1.13 之前的版本,该版本仍然允许该数据卷行为。我会告诉你,在 1.13+ 及更高版本中,你将无法进行这样的读写挂载。然而,有一个解决方法,它可能是“Kubernetes”的做事方式(尽管我很难理解为什么它更好)。
解决办法:
在您的 POD/部署中,创建一个安装两个卷的 init 容器。第一个卷是您的 configmap(file),第二个卷是一个 emptyDir 容器。我们将把第一个 (configmap) 卷视为您的源,而将后者视为您的目的地。然后,您在新的初始化容器中所需要做的就是将源卷的内容复制到目标卷。
然后在你的普通应用程序容器部分,从上面挂载目标容器,然后你就拥有完整的读/写能力,而不必处理 Kubernetes 的 API 更改。这也应该能够承受他们计划在未来进行的大部分 API 更改。
| 归档时间: |
|
| 查看次数: |
18685 次 |
| 最近记录: |