3.6. 使用 fsGroup 减少 pod 超时
如果存储卷包含多个文件(如一百万或更多),您可能会遇到 pod 超时的问题。
这是因为,默认情况下,Red Hat OpenShift Service on AWS 经典架构会递归更改每个卷内容的所有权和权限,以便在挂载卷时与 pod 的 securityContext 中指定的 fsGroup 匹配。对于有多个文件的卷,检查和更改所有权和权限可能会非常耗时,从而会减慢 pod 启动的速度。您可以使用 securityContext 中的 fsGroupChangePolicy 字段来控制 Red Hat OpenShift Service on AWS 经典架构检查和管理卷的所有权和权限的方式。
fsGroupChangePolicy 定义在 pod 中公开卷之前更改卷的所有权和权限的行为。此字段仅适用于支持 fsGroup- 控制的所有权和权限。此字段有两个可能的值:
-
OnRootMismatch:仅当 root 目录的权限和所有权与卷的预期权限不匹配时才会更改权限和所有权。这有助于缩短更改卷的所有权和权限所需的时间,以减少 pod 超时。 -
当卷被挂载时,始终始终更改卷的权限和所有权:(默认)
fsGroupChangePolicy 字段对临时卷类型没有影响,如 secret、configMap 和 emptydir。
您可以在命名空间或 pod 级别设置 fsGroupChangePolicy。
3.6.1. 在命名空间级别更改 fsGroup 复制链接链接已复制到粘贴板!
在命名空间级别上为 fsGroupChangePolicy 应用所需的设置后,该命名空间中的所有 pod 都继承该设置。但是,如果需要,您可以覆盖单个 pod 的继承 fsGroupChangePolicy 设置。在 pod 级别设置 fsGroupChangePolicy 将覆盖该 pod 的命名空间级别设置继承。
先决条件
- 使用管理员特权登录到正在运行的 Red Hat OpenShift Service on AWS 经典架构集群。
- 访问 Red Hat OpenShift Service on AWS 经典架构控制台。
流程
为每个命名空间设置 fsGroupChangePolicy :
选择所需的命名空间:
- 点 Administration > Namespaces。
- 在 Namespaces 页面中,点所需的命名空间。此时会出现 Namespace 详情页面。
将
fsGroupChangePolicy标签添加到命名空间:- 在 Namespace 详情页面的 Labels 旁边,点 Edit。
在 Edit labels 对话框中,添加标签
storage.openshift.io/fsgroup-change-policy并将其设置为 either :-
OnRootMismatch:指定只有在权限和根目录的所有权与卷预期权限不匹配时才会更改权限和所有权,这有助于避免 pod 超时问题。 -
始终: (默认)指定在挂载卷时始终更改卷的权限和所有权。
-
- 点击 Save。
验证
在之前编辑的命名空间中启动一个 pod,并观察参数 spec.securityContext.fsGroupChangePolicy 包含您为命名空间设置的值。
显示 fsGroupChangePolicy 设置的 pod YAML 文件示例
- 1
- 这个值继承自命名空间。
3.6.2. 在 pod 级别更改 fsGroup 复制链接链接已复制到粘贴板!
您可以在新的或现有部署中设置 fsGroupChangePolicy 参数,然后它管理的 pod 将具有此参数值。您可以对 statefulset 执行此操作。您不能编辑现有的 pod 来设置 fsGroupChangePolicy ;但是,您可以在创建新 pod 时设置此参数。
这个流程描述了如何在现有部署中设置 fsGroupChangePolicy 参数。
先决条件
- 访问 Red Hat OpenShift Service on AWS 经典架构控制台。
流程
要在现有部署中设置 fsGroupChangePolicy 参数:
- 点 Workloads > Deployments。
- 在 Deployment 页面上,单击所需的部署。
- 在 Deployment 详情页面上,点 YAML 选项卡。
使用以下示例文件编辑
spec.template.spec.securityContext下部署的 YAML 文件:部署 YAML 文件设置
fsGroupChangePolicy示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
OnRootMismatch指定跳过递归权限更改,这有助于避免 pod 超时问题。默认值为Always,它会在挂载卷时始终更改卷的权限和所有权。
- 点击 Save。