×

您可以使用 Run Once Duration Override 运算符来指定 run-once Pod 的最大活动时间限制。通过在命名空间上启用 run-once 时长覆盖,在该命名空间中创建或更新的所有未来的 run-once Pod 的 `activeDeadlineSeconds` 字段都将设置为 Run Once Duration Override 运算符指定的值。

如果 run-once Pod 和 Run Once Duration Override 运算符都设置了 `activeDeadlineSeconds` 值,则使用两者中较小的值。

安装 Run Once Duration Override 运算符

您可以使用 Web 控制台安装 Run Once Duration Override 运算符。

先决条件
  • 您可以使用 `cluster-admin` 权限访问集群。

  • 您可以访问 OpenShift Container Platform Web 控制台。

步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

  2. 为 Run Once Duration Override 运算符创建所需的命名空间。

    1. 导航到 **管理** → **命名空间** 并单击 **创建命名空间**。

    2. 在 **名称** 字段中输入 `openshift-run-once-duration-override-operator` 并单击 **创建**。

  3. 安装 Run Once Duration Override 运算符。

    1. 导航到 **运算符** → **OperatorHub**。

    2. 在过滤器框中输入 **Run Once Duration Override Operator**。

    3. 选择 **Run Once Duration Override Operator** 并单击 **安装**。

    4. 在 **安装运算符** 页面上

      1. **更新通道** 设置为 **稳定**,这将安装 Run Once Duration Override 运算符的最新稳定版本。

      2. 选择 **集群上的特定命名空间**。

      3. 从 **已安装命名空间** 下的下拉菜单中选择 **openshift-run-once-duration-override-operator**。

      4. 选择 **更新批准** 策略。

        • **自动** 策略允许运算符生命周期管理器 (OLM) 在有新版本可用时自动更新运算符。

        • **手动** 策略需要具有相应凭据的用户批准运算符更新。

      5. 单击 **安装**。

  4. 创建RunOnceDurationOverride实例。

    1. 在**操作符** → **已安装的操作符**页面,点击**Run Once Duration Override 操作符**。

    2. 选择**Run Once Duration Override**选项卡,然后点击**创建 RunOnceDurationOverride**。

    3. 根据需要编辑设置。

      runOnceDurationOverride部分,您可以根据需要更新spec.activeDeadlineSeconds的值。预设值为3600秒,即1小时。

    4. 点击**创建**。

验证
  1. 登录OpenShift CLI。

  2. 验证所有Pod是否已创建并正常运行。

    $ oc get pods -n openshift-run-once-duration-override-operator
    示例输出
    NAME                                                   READY   STATUS    RESTARTS   AGE
    run-once-duration-override-operator-7b88c676f6-lcxgc   1/1     Running   0          7m46s
    runoncedurationoverride-62blp                          1/1     Running   0          41s
    runoncedurationoverride-h8h8b                          1/1     Running   0          41s
    runoncedurationoverride-tdsqk                          1/1     Running   0          41s

在命名空间上启用运行一次持续时间覆盖

要将Run Once Duration Override操作符的运行一次持续时间覆盖应用于运行一次Pod,必须在每个适用的命名空间中启用它。

先决条件
  • Run Once Duration Override 操作符已安装。

步骤
  1. 登录OpenShift CLI。

  2. 添加标签以将运行一次持续时间覆盖启用到您的命名空间

    $ oc label namespace <namespace> \ (1)
        runoncedurationoverrides.admission.runoncedurationoverride.openshift.io/enabled=true
    1 指定要启用运行一次持续时间覆盖的命名空间。

在启用此命名空间的运行一次持续时间覆盖后,在此命名空间中创建的未来运行一次Pod的activeDeadlineSeconds字段将设置为Run Once Duration Override操作符中的覆盖值。此命名空间中现有的Pod在下次更新时也将设置其activeDeadlineSeconds值。

验证
  1. 在您已启用运行一次持续时间覆盖的命名空间中创建一个测试运行一次Pod

    apiVersion: v1
    kind: Pod
    metadata:
      name: example
      namespace: <namespace>                 (1)
    spec:
      restartPolicy: Never                   (2)
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: busybox
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
          image: busybox:1.25
          command:
            - /bin/sh
            - -ec
            - |
              while sleep 5; do date; done
    1 <namespace>替换为您的命名空间名称。
    2 要成为运行一次Pod,restartPolicy必须为NeverOnFailure
  2. 验证Pod是否已设置其activeDeadlineSeconds字段

    $ oc get pods -n <namespace> -o yaml | grep activeDeadlineSeconds
    示例输出
        activeDeadlineSeconds: 3600

更新运行一次活动截止时间覆盖值

您可以自定义Run Once Duration Override操作符应用于运行一次Pod的覆盖值。预设值为3600秒,即1小时。

先决条件
  • 您可以使用 `cluster-admin` 权限访问集群。

  • 您已安装Run Once Duration Override操作符。

步骤
  1. 登录OpenShift CLI。

  2. 编辑RunOnceDurationOverride资源

    $ oc edit runoncedurationoverride cluster
  3. 更新activeDeadlineSeconds字段

    apiVersion: operator.openshift.io/v1
    kind: RunOnceDurationOverride
    metadata:
    # ...
    spec:
      runOnceDurationOverride:
        spec:
          activeDeadlineSeconds: 1800 (1)
    # ...
    1 activeDeadlineSeconds字段设置为所需的秒数值。
  4. 保存文件以应用更改。

在已启用运行一次持续时间覆盖的命名空间中创建的任何未来运行一次Pod都将将其activeDeadlineSeconds字段设置为此新值。这些命名空间中现有的运行一次Pod将在更新时收到此新值。