kubernetes - Kubernetes fsGroup 未更改 PersistentVolume 上的文件所有权
问题描述
在主机上,挂载目录 ( /opt/testpod
) 中的所有内容都归 uid=0 gid=0 所有。我需要这些文件由容器决定的任何东西拥有,即不同的gid,以便能够在那里写入。我正在测试的资源:
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv
labels:
name: pv
spec:
storageClassName: manual
capacity:
storage: 10Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/opt/testpod"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
spec:
storageClassName: manual
selector:
matchLabels:
name: pv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
---
apiVersion: v1
kind: Pod
metadata:
name: testpod
spec:
nodeSelector:
foo: bar
securityContext:
runAsUser: 500
runAsGroup: 500
fsGroup: 500
volumes:
- name: vol
persistentVolumeClaim:
claimName: pvc
containers:
- name: testpod
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
volumeMounts:
- name: vol
mountPath: /data
pod 运行后,我kubectl exec
进入它并ls -la /data
显示仍然由 gid=0 拥有的所有内容。根据一些 Kuber 文档,fsGroup
应该在 pod start 上 chown 一切,但它没有发生。请问我做错了什么?
解决方案
hostpath
PV 类型不支持安全上下文。 您必须是要写入的卷的 root。在这个github 问题和这个关于hostPath的文档中有很好的描述:
在底层主机上创建的目录只能由 root 写入。您要么需要在 特权容器中以 root 身份运行进程, 要么修改主机上的文件权限以便能够写入
hostPath
卷
您可能还想查看这个github 请求,该请求描述了为什么更改主机目录的权限是危险的。
人们描述它似乎有效的解决方法是授予您的用户 sudo 权限,但这实际上使得以非 root 用户身份运行容器的想法毫无用处。
安全上下文似乎与 emptyDir 卷一起工作得很好(在 k8s 文档中描述得很好)
推荐阅读
- ruby - 我想建立话语,但我遇到了这个错误。当我在window powershell中运行'bundle exec rails s -b 0.0.0.0'时,它告诉我这个
- asp.net-mvc - 如何使用 linq 和 lambda 处理不同的服务器和不同的连接 Asp.net Web API
- vtk - 如何在不删除点或线的情况下选择性地渲染 VTK PolyData
- c++-cli - C++/CLI ref 参数重载
- python - 如何计算分割结果的 AvgD、RMSD、VOE 和 VD 评估指标?
- google-fabric - Fabric 出现了什么问题?
- c# - 如何正确使用 PUT 进行更新?
- javascript - Google Maps API 从不同的脚本更新标记
- kotlin - 当主线程退出时协程会发生什么?
- agda - 使用函数编码属性的缺点是什么?