kubernetes - Kubernetes 更改挂载卷的权限
问题描述
我在 Openstack 上管理 Kubernetes 的部署。
我的用户 pod 挂载了一个PersistentVolume
使用 Openstack Cinder 作为主文件夹动态创建的。
奇怪的是,如果我创建一个文件权限为 600 的(空)文件:
bash-4.2$ ls -l
total 16
-rw------- 1 jovyan users 0 Jul 16 17:55 id_rsa
然后我杀死容器并重新启动它,卷再次安装,但权限现在具有rw
组权限:
bash-4.2$ ls -l
total 16
-rw-rw---- 1 jovyan users 0 Jul 16 17:55 id_rsa
关于如何进一步调试的任何建议?
有关 Kubernetes 配置的详细信息
- 音量
AccessMode
是ReadWriteOnce
,volumeMode: Filesystem
- 卷文件系统是
ext4
:/dev/sdf: Linux rev 1.0 ext4 filesystem data, UUID=c627887b-0ff0-4310-b91d-37fe5ca9564d (needs journal recovery) (extents) (64bit) (large files) (huge files)
检查 Openstack
我首先认为这是一个 Openstack 问题,但如果我从 Openstack 实例中分离卷,然后使用 Openstack 命令再次附加它,并使用终端将其挂载到节点上,权限就可以了。所以我认为这是 Kubernetes 以某种方式弄乱了权限。
Yaml 资源
我将 pod、PV 和 PVC 的 YAML 文件粘贴到 gist 上,请参阅https://gist.github.com/zonca/21b81f735d0cc9a06cb85ae0fa0285e5
我还添加了kubectl describe
这些资源的输出。它是Jupyterhub
0.9.0 Helm 包的部署。
解决方案
发生这种情况是因为您已将 pod 配置为fsGroup
. 它在以下指定securityContext
:
---
securityContext:
fsGroup: 100
---
每当fsGroup
指定字段时,容器的所有进程也是补充组 ID 的一部分。卷的所有者和在该卷中创建的任何文件将是组 ID。
Kubernetes API 文档是这样解释的:
fsGroup
是一个特殊的补充组,适用于一个 pod 中的所有容器。某些卷类型允许 Kubelet 将该卷的所有权更改为由 pod 拥有:
- 拥有 GID 将是 FSGroup
- setgid 位已设置(在卷中创建的新文件将归 FSGroup 所有)
- 权限位与 rw-rw 进行或运算---- 如果未设置,Kubelet 将不会修改任何卷的所有权和权限。
推荐阅读
- c# - 如何将字符串转换为 ConsoleKeyInfo?
- spring-boot - 使用 Gradle 5.1“实现平台”而不是 Spring 依赖管理插件
- node.js - 在 NodeJs 中创建路由
- c++ - 从 Excel 复制后将 .txt 或 .csv 导入 C++ 时丢失十进制值
- java - 从我的应用程序中单击 Google Navigation 通知的“退出”按钮
- c# - 如何在 C# 中使用构造函数将 JSON 对象反序列化为自身?
- mongodb - Mongodb 和 Odoo 数据库使用 Odoo API
- sql-server - 将所有关系聚合到一张表中 SQL Server
- angularjs - 离子重新排序列表项在 iOS 12 中不起作用
- sql - 将一个表中的 ID 与另一个表的名称和空值匹配 - mimer sql