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

  1. 选择所需的命名空间:

    1. Administration > Namespaces
    2. Namespaces 页面中,点所需的命名空间。此时会出现 Namespace 详情页面
  2. fsGroupChangePolicy 标签添加到命名空间:

    1. Namespace 详情页面的 Labels 旁边,点 Edit
    2. Edit labels 对话框中,添加标签 storage.openshift.io/fsgroup-change-policy 并将其设置为 either :

      • OnRootMismatch :指定只有在权限和根目录的所有权与卷预期权限不匹配时才会更改权限和所有权,这有助于避免 pod 超时问题。
      • 始终: (默认)指定在挂载卷时始终更改卷的权限和所有权。
    3. 点击 Save

验证

在之前编辑的命名空间中启动一个 pod,并观察参数 spec.securityContext.fsGroupChangePolicy 包含您为命名空间设置的值。

显示 fsGroupChangePolicy 设置的 pod YAML 文件示例

securityContext:
  seLinuxOptions:
    level: 's0:c27,c24'
  runAsNonRoot: true
  fsGroup: 1000750000
  fsGroupChangePolicy: OnRootMismatch 
1

  ...
Copy to Clipboard Toggle word wrap

1
这个值继承自命名空间。

3.6.2. 在 pod 级别更改 fsGroup

您可以在新的或现有部署中设置 fsGroupChangePolicy 参数,然后它管理的 pod 将具有此参数值。您可以对 statefulset 执行此操作。您不能编辑现有的 pod 来设置 fsGroupChangePolicy ;但是,您可以在创建新 pod 时设置此参数。

这个流程描述了如何在现有部署中设置 fsGroupChangePolicy 参数。

先决条件

  • 访问 Red Hat OpenShift Service on AWS 经典架构控制台。

流程

要在现有部署中设置 fsGroupChangePolicy 参数:

  1. Workloads > Deployments
  2. Deployment 页面上,单击所需的部署。
  3. Deployment 详情页面上,点 YAML 选项卡。
  4. 使用以下示例文件编辑 spec.template.spec.securityContext 下部署的 YAML 文件:

    部署 YAML 文件设置 fsGroupChangePolicy示例

    ...
    spec:
    replicas: 3
    selector:
    matchLabels:
    app: my-app
    template:
    metadata:
    creationTimestamp: null
    labels:
    app: my-app
    spec:
    containers:
    - name: container
    image: 'image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest'
    ports:
    - containerPort: 8080
    protocol: TCP
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    imagePullPolicy: Always
    restartPolicy: Always
    terminationGracePeriodSeconds: 30
    dnsPolicy: ClusterFirst
    securityContext:
      fsGroupChangePolicy: OnRootMismatch 
    1
    
    ...
    Copy to Clipboard Toggle word wrap

    1
    OnRootMismatch 指定跳过递归权限更改,这有助于避免 pod 超时问题。默认值为 Always,它会在挂载卷时始终更改卷的权限和所有权。
  5. 点击 Save
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat