【问题标题】:Is it possible to set GID/UID for Filestore in GKE?是否可以在 GKE 中为 Filestore 设置 GID/UID?
【发布时间】:2020-03-13 16:23:21
【问题描述】:

我想在 GKE 中使用基于此官方文档的 PVC 和 PV 的 FileStore:https://cloud.google.com/filestore/docs/accessing-fileshares

我的应用程序没有以 root 身份运行,所以我想设置使用哪个 GID/UID 将卷挂载到容器中。

我知道一些使用 InitContainer 或单独的 NFS 中间件的替代方案,但希望避免使用另一个移动部件。

【问题讨论】:

  • 你见过这个吗? serverfault.com/questions/906083/…
  • 谢谢,@HelloWorld,但我想避免在每次部署中执行chown,而且,已经使用securityContext,但文件存储挂载始终挂载为root,而主进程运行为非特权用户因此问题

标签: google-kubernetes-engine google-cloud-filestore


【解决方案1】:

Kuberentes 目前不提供使用 pod 规范设置卷挂载权限/所有者的功能。所有字段及其描述都可以在kubernetes api reference 中找到。

您可以在 Internet 上找到最常用的方法是使用 initContiners。真的没有其他更好的方法可以做到这一点。

您还提到您希望避免在每次部署中执行 chown。您可以像以下示例一样在 bash 中使用 if 语句来避免它,以便仅在必要时执行 chown:

---
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  volumes:
    - name: my-pv-storage
      persistentVolumeClaim:
        claimName: my-pv-claim
  initContainers:
    - name: init-myservice
      image: busybox:1.28
      command: ['sh', '-c', 'OWNER=`stat -c "%U:%G" /mnt/data` && if [ $OWNER == "root:root" ]; then chown -R 1000:3000 /mnt/data; fi']
      volumeMounts:
        - mountPath: "/mnt/data"
          name: my-pv-storage
  containers:
    - name: my-pv-container
      image: my-image
      volumeMounts:
        - mountPath: "/mnt/data"
          name: my-pv-storage
      securityContext:
        runAsUser: 1000
        runAsGroup: 3000

告诉我它很有用。

【讨论】:

  • 非常有用,谢谢!尽管如此,我还是想避免任何“检查”,因为我们在这里谈论数百万个文件。在我之前在 Azure 中使用 azure 磁盘的设置中,可以在 StorageClass 级别定义挂载选项以避免所有这些
  • 是的,使用挂载选项解决您的问题仅适用于某些文件系统,但不幸的是 nfsv3 不支持您需要的选项。
  • 另外请注意,我的代码只检查顶级目录所有者,因此无论您拥有多少文件都不会花费很长时间。只要您不每次部署都更改 uid,它应该可以正常工作。
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2016-06-17
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多