簡體   English   中英

WSL2 Kubernetes - 如何使用指定用戶/組權限安裝本地文件夾

[英]WSL2 Kubernetes - How to mount local folder with specifying user/group rights

我正在使用 WSL2 Debian 和 Docker 桌面,我想將我的卷數據保存在本地文件夾中(最好是指向 OneDrive 的路徑)。

這很好用,但有一個例外,一切都歸root:root所有。 如何在卷中指定user/group權限?

任何地方都有這方面的文檔嗎?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dummy-service
  labels:
    app: dummy-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: dummy-service
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: dummy-service
    spec:
      containers:
        - name: dotnet
          image: alpine
          imagePullPolicy: Always
          resources:
            requests:
              cpu: "100m"
              memory: "40Mi"
            limits:
              memory: "64Mi"
          ports:
            - containerPort: 5000
          volumeMounts:
            - mountPath: "/app/wwwroot"
              name: dummy-volume
          readinessProbe:
            httpGet:
              path: /heartbeat
              port: 5000
              scheme: HTTP
            initialDelaySeconds: 5
            timeoutSeconds: 1
            periodSeconds: 15
          livenessProbe:
            httpGet:
              path: /heartbeat
              port: 5000
              scheme: HTTP
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 15
            successThreshold: 1
            timeoutSeconds: 1
      volumes:
        - name: dummy-volume
          persistentVolumeClaim:
            claimName: dummy-pvc
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: dummy-sc
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: dummy-pv
spec:
  capacity:
    storage: 512Mi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: dummy-sc
  local:
    path: /run/desktop/mnt/host/c/Users/Markus/OneDrive/Workspace/Volume/Web
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - docker-desktop
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dummy-pvc
spec:
  storageClassName: dummy-sc
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 512Mi

對於這個問題,我可以想到三種可能的解決方案:

  1. 您可以使用Init Containers 這樣,以非 root 用戶身份運行的 pod 中的容器可以對掛載的卷具有權限。 請參見下面的示例:

initContainers:
- name: set-permissions
  image: <image_name>
  # Give user id 555 permissions for the mounted volume
  command:
  - chown
  - -R
  - 555:555
  - /var/lib/data
  volumeMounts:
  - name: data
    mountPath: /var/lib/data

  1. 讓非 root 用戶訪問它想要讀取和寫入數據的文件夾的另一種方法是按照以下步驟操作:
  • 在 Dockerfile 中創建用戶組並分配組 ID。

  • 使用用戶 ID 創建用戶並添加到 Dockerfile 中的組。

  • 遞歸更改用戶進程想要讀取/寫入的文件夾的所有權。

  • 將以下行添加到 Deployment 的 Pod 規范中:


spec:
  securityContext:
    runAsUser: 1099
    runAsGroup: 1099
    fsGroup: 1099

文檔中所述

  • runAsUser :指定對於 Pod 中的任何容器,所有進程都以用戶 ID 1099運行。

  • runAsGroup :為 Pod 的任何容器中的所有進程指定主組 ID 1099 如果省略此字段,則容器的主要組 ID 將為root(0) 當指定runAsGroup時,創建的任何文件也將歸用戶1099和組1099所有。

  • fsGroup :指定任何附加卷的所有者將是組 ID 1099的所有者。

  1. 為 Pod 配置卷權限和所有權更改策略(我知道它不適合您的用例,但我會將此選項留給其他社區成員)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM