【问题标题】:Persistent Volume Claim for Azure Disk with specific user permissions具有特定用户权限的 Azure 磁盘的持久卷声明
【发布时间】:2019-04-26 00:52:26
【问题描述】:

我正在尝试创建一个动态 Azure 磁盘卷以在具有特定权限要求的 pod 中使用。

容器runs under the user id 472,所以我需要找到一种方法来为该用户(至少)安装具有 rw 权限的卷。

定义了以下StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
provisioner: kubernetes.io/azure-disk
reclaimPolicy: Delete
volumeBindingMode: Immediate
metadata:
  name: foo-storage
mountOptions:
  - rw
parameters:
  cachingmode: None
  kind: Managed
  storageaccounttype: Standard_LRS

还有这个PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: foo-storage
  namespace: foo
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: foo-storage
  resources:
    requests:
      storage: 1Gi

我可以在 pod 中运行以下命令:

containers:
  - image: ubuntu
    name: foo
    imagePullPolicy: IfNotPresent
    command:
      - ls
      - -l
      - /var/lib/foo
    volumeMounts:
      - name: foo-persistent-storage
        mountPath: /var/lib/foo
volumes:
  - name: foo-persistent-storage
    persistentVolumeClaim:
      claimName: foo-storage

pod 将正确安装和启动,但会显示 kubectl logs <the-pod>

total 24
drwxr-xr-x 3 root root  4096 Nov 23 11:42 .
drwxr-xr-x 1 root root  4096 Nov 13 12:32 ..
drwx------ 2 root root 16384 Nov 23 11:42 lost+found

即当前目录挂载为 root 所拥有,并且对所有其他用户是只读的。

我尝试将mountOptions 部分添加到StorageClass,但无论我尝试什么(uid=472user=472 等)我都会在启动时遇到安装错误,例如

mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/plugins/kubernetes.io/azure-disk/mounts/m1019941199 --scope -- mount -t ext4 -o group=472,rw,user=472,defaults /dev/disk/azure/scsi1/lun0 /var/lib/kubelet/plugins/kubernetes.io/azure-disk/mounts/m1019941199
Output: Running scope as unit run-r7165038756bf43e49db934e8968cca8b.scope.
mount: wrong fs type, bad option, bad superblock on /dev/sdc,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

我也尝试从man mount 获取一些信息,但没有找到任何有用的信息。

如何配置此存储类、持久卷声明和卷挂载,以便运行容器进程的非 root 用户可以在挂载路径中写入(并创建子目录)?

【问题讨论】:

  • 当我添加 - uid=2000 - gid=3000 时,GKE 会抛出类似的错误。 “fs 类型错误、选项错误、/dev/sdb 上的超级块错误、缺少代码页或帮助程序或其他错误。”

标签: kubernetes persistent-volumes azure-aks persistent-volume-claims


【解决方案1】:

您需要像下面这样定义您的 pod 规范的 securityContext,以便它匹配新运行的用户和组 ID:

securityContext:
  runAsUser: 472
  fsGroup: 472

稳定的 Grafana Helm Chart 也是如此。请参阅此处配置下的securityContexthttps://github.com/helm/charts/tree/master/stable/grafana#configuration

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多