我正在使用WSL2 Debian和Docker Desktop,我想将卷数据保存在本地文件夹中(最好是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
对于这个问题,我可以想出三种可能的解决方案:
- 您可以使用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
- 让非root用户访问其想要读取和写入数据的文件夹的另一种方法是遵循以下步骤:
在Dockerfile中创建用户组并分配组ID。
创建用户ID为的用户,并将其添加到Dockerfile中的组中。
递归地更改用户进程想要读取/写入的文件夹的所有权。
在部署的Pod规范中添加以下行:
spec:
securityContext:
runAsUser: 1099
runAsGroup: 1099
fsGroup: 1099
如文件所述:
runAsUser
:指定对于Pod中的任何Containers,所有进程都使用用户ID1099
运行。runAsGroup
:为Pod的任何容器中的所有进程指定1099
的主组ID。如果省略此字段,则容器的主要组ID将为root(0)
。当指定了runAsGroup
时,创建的任何文件也将归用户1099
和组1099
所有。fsGroup
:指定连接的任何卷的所有者将是组ID1099
的所有者。
- 为Pods配置卷权限和所有权更改策略(我知道它不适合您的用例,但我会将此选项留给其他社区成员(