chown:更改“ / data / db”的所有权:不允许操作

时间:2018-07-05 21:23:32

标签: kubernetes kubernetes-security

我们可以使用nfs容量插件在kubernetes集群中维护高可用性和灾难恢复吗?

我正在使用MongoDB运行pod。得到错误

  

chown:更改'/ data / db'的所有权:不允许操作。

阴云密布,请建议我如何解决错误? (或)

在kubernetes集群中是否建议使用任何替代的卷插件来实现HA-DR?

2 个答案:

答案 0 :(得分:10)

  

chown:更改'/ data / db'的所有权:不允许操作。

您可能希望以root的身份启动mongo容器,以便可以 chown的目录,或者如果该图像禁止该目录(因为某些图像已经有一个USER mongo子句,该子句禁止容器将特权升级到root),然后执行以下两项操作之一:用securityContext中的containers:节取代用户或使用initContainer:以抢先将目标文件夹更改为mongo UID:

方法1:

containers:
- name: mongo
  image: mongo:something
  securityContext:
    runAsUser: 0

(这可能需要更改群集的配置,以使此类内容出现在PodSpec中)

方法2(这是我与Elasticsearch图像一起使用的方法):

initContainers:
- name: chmod-er
  image: busybox:latest
  command:
  - /bin/chown
  - -R
  - 1000  # or whatever the mongo UID is
  - /data/db
  volumeMounts:
  - name: mongo-data  # or whatever
    mountPath: /data/db
containers:
- name: mongo  # then run your container as before

答案 1 :(得分:1)

/data/db 是一个挂载点,即使您没有在那里显式挂载卷。数据被持久化到特定于 pod 的覆盖层。 Kubernetes 将所有卷挂载为 0755 root.root,无论目录的初始权限是什么。 当然,mongo 不能 chown。

如果您将卷挂载到 /data/db 下面的某个位置,您将得到同样的错误。

如果您将上述卷挂载到 /data,数据将不会存储在 NFS 上,因为 /data/db 的挂载点将写入覆盖层。但是您不会再遇到那个错误了。