4

我们可以使用 nfs 卷插件来维护 kubernetes 集群之间的高可用性和灾难恢复吗?

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

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

云任何机构,请建议我如何解决错误?(或者)

是否有任何替代卷插件可以在 kubernetes 集群中实现 HA-DR?

4

3 回答 3

16

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

您可能希望将 mongo 容器启动为root,以便您可以 chown使用目录,或者如果图像禁止它(因为某些图像已经有一个USER mongo子句禁止容器将权限升级到root),那么两件事之一: 用一个securityContext节取代用户containers:或使用一个initContainer:抢先将目标文件夹更改为 mongo UID:

方法#1:

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

(这可能需要更改集群的配置以允许这样的事情出现在 a 中PodSpec

方法 #2(这是我用于 Elasticsearch 图像的方法):

initContainers:
- name: chmod-er
  image: busybox:latest
  command:
  - /bin/chown
  - -R
  - "1000"  # or whatever the mongo UID is, use string "1000" not 1000 due to yaml
  - /data/db
  volumeMounts:
  - name: mongo-data  # or whatever
    mountPath: /data/db
containers:
- name: mongo  # then run your container as before
于 2018-07-06T04:27:45.553 回答
2

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

如果您将卷安装在 /data/db 下方的某个位置,您将收到相同的错误。

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

于 2021-04-14T08:15:22.833 回答
0

通过添加command:["mongod"]部署清单,它将覆盖默认入口点脚本并阻止执行 chown。

...
    spec:
      containers:
      - name: mongodb
        image: mongo:4.4.0-bionic
        command: ["mongod"]
...
于 2021-08-18T13:58:59.723 回答