×

如果集群管理员已将 Operator 安装权限委托给您的帐户,您可以以自助服务的方式将 Operator 安装到您的命名空间并订阅它。

先决条件

  • 集群管理员必须向您的 OpenShift Container Platform 用户帐户添加某些权限,以允许将 Operator 自助安装到命名空间。有关详细信息,请参阅 允许非集群管理员安装 Operator

关于使用 OperatorHub 安装 Operator

OperatorHub 是用于发现 Operator 的用户界面;它与 Operator Lifecycle Manager (OLM) 配合使用,后者在集群上安装和管理 Operator。

作为具有适当权限的用户,您可以使用 OpenShift Container Platform Web 控制台或 CLI 从 OperatorHub 安装 Operator。

在安装过程中,您必须确定 Operator 的以下初始设置

安装模式

选择要在其中安装 Operator 的特定命名空间。

更新通道

如果 Operator 可通过多个通道获得,您可以选择要订阅的通道。例如,如果可用,请选择从 **稳定** 通道进行部署。

审批策略

您可以选择自动或手动更新。

如果您为已安装的 Operator 选择自动更新,则当所选通道中提供该 Operator 的新版本时,Operator Lifecycle Manager (OLM) 会自动升级正在运行的 Operator 实例,无需人工干预。

如果您选择手动更新,则当有较新版本的 Operator 可用时,OLM 会创建更新请求。然后,作为集群管理员,您必须手动批准该更新请求才能将 Operator 更新到新版本。

使用 Web 控制台从 OperatorHub 安装

您可以使用 OpenShift Container Platform Web 控制台从 OperatorHub 安装并订阅 Operator。

先决条件
  • 使用具有 Operator 安装权限的帐户访问 OpenShift Container Platform 集群。

步骤
  1. 在 Web 控制台中导航到 **Operators → OperatorHub** 页面。

  2. 滚动或在 **按关键字筛选** 框中键入关键字以查找所需的 Operator。例如,键入 advanced 以查找 Kubernetes 的高级集群管理 Operator。

    您还可以按 **基础架构功能** 筛选选项。例如,如果您想查看在脱机环境(也称为受限网络环境)中工作的 Operator,请选择 **脱机**。

  3. 选择 Operator 以显示其他信息。

    选择社区 Operator 会发出警告,说明 Red Hat 不认证社区 Operator;您必须在继续之前确认警告。

  4. 阅读有关 Operator 的信息,然后单击 **安装**。

  5. 在 **安装 Operator** 页面上,配置您的 Operator 安装

    1. 如果要安装特定版本的 Operator,请从列表中选择 **更新通道** 和 **版本**。您可以浏览 Operator 在任何通道中的各个版本,查看该通道和版本的元数据,并选择要安装的确切版本。

      版本选择默认选择所选通道的最新版本。如果选择通道的最新版本,则默认启用自动审批策略。否则,如果未安装所选通道的最新版本,则需要手动审批。

      使用手动审批安装 Operator 会导致命名空间中安装的所有 Operator 都使用手动审批策略,并且所有 Operator 都会一起更新。如果您想独立更新 Operator,请将 Operator 安装到单独的命名空间。

    2. 选择一个特定的、单个命名空间来安装 Operator。Operator 仅会在该单个命名空间中进行监控并可用。

    3. 对于启用了令牌身份验证的云提供商上的集群

      • 如果集群使用 AWS 安全令牌服务(Web 控制台中的STS 模式),请在角色 ARN字段中输入您的服务帐户的 AWS IAM 角色的 Amazon 资源名称 (ARN)。要创建角色的 ARN,请按照准备 AWS 帐户中描述的步骤操作。

      • 如果集群使用 Microsoft Entra 工作负载 ID(Web 控制台中的工作负载身份/联合身份模式),请在相应的字段中添加客户端 ID、租户 ID 和订阅 ID。

      • 如果集群使用 Google Cloud Platform 工作负载身份(Web 控制台中的GCP 工作负载身份/联合身份模式),请在相应的字段中添加项目编号、池 ID、提供商 ID 和服务帐户电子邮件。

    4. 对于更新审批,请选择自动手动审批策略。

      如果 Web 控制台显示集群使用 AWS STS、Microsoft Entra 工作负载 ID 或 GCP 工作负载身份,则必须将更新审批设置为手动

      不建议使用自动更新审批的订阅,因为在更新之前可能需要进行权限更改。使用手动更新审批的订阅可确保管理员有机会验证更高版本的权限,采取任何必要的步骤,然后进行更新。

  6. 单击安装,使 Operator 可用于此 OpenShift Container Platform 集群上的所选命名空间。

    1. 如果您选择了手动审批策略,则订阅的升级状态将保持为升级中,直到您查看并批准安装计划。

      安装计划页面上批准后,订阅升级状态将变为最新

    2. 如果您选择了自动审批策略,则升级状态应在无需干预的情况下变为最新

验证
  • 在订阅的升级状态为最新后,选择OperatorsInstalled Operators 以验证已安装 Operator 的集群服务版本 (CSV) 最终是否显示。相关命名空间中的状态最终应变为成功

    对于所有命名空间…安装模式,状态在openshift-operators命名空间中变为成功,但如果您在其他命名空间中检查,则状态为已复制

    如果未显示

    • 工作负载Pod页面上检查openshift-operators项目(或如果选择了特定命名空间…安装模式,则检查其他相关命名空间)中报告问题的任何 Pod 的日志,以进行进一步的故障排除。

  • 安装 Operator 后,元数据会指示已安装的通道和版本。

    通道版本下拉菜单仍可用于在此目录上下文中查看其他版本元数据。

使用 CLI 从 OperatorHub 安装

您可以使用 CLI 从 OperatorHub 安装 Operator,而不是使用 OpenShift Container Platform Web 控制台。使用oc命令创建或更新Subscription对象。

对于SingleNamespace安装模式,您还必须确保相关命名空间中存在相应的 Operator 组。Operator 组(由OperatorGroup对象定义)会选择目标命名空间,以便为与 Operator 组位于同一命名空间中的所有 Operator 生成所需的 RBAC 访问权限。

在大多数情况下,此过程的 Web 控制台方法更可取,因为它会在后台自动执行任务,例如在选择SingleNamespace模式时自动处理OperatorGroupSubscription对象的创建。

先决条件
  • 使用具有 Operator 安装权限的帐户访问 OpenShift Container Platform 集群。

  • 您已安装 OpenShift CLI (oc)。

步骤
  1. 查看 OperatorHub 中集群可用的 Operator 列表。

    $ oc get packagemanifests -n openshift-marketplace
    示例输出
    NAME                               CATALOG               AGE
    3scale-operator                    Red Hat Operators     91m
    advanced-cluster-management        Red Hat Operators     91m
    amq7-cert-manager                  Red Hat Operators     91m
    # ...
    couchbase-enterprise-certified     Certified Operators   91m
    crunchy-postgres-operator          Certified Operators   91m
    mongodb-enterprise                 Certified Operators   91m
    # ...
    etcd                               Community Operators   91m
    jaeger                             Community Operators   91m
    kubefed                            Community Operators   91m
    # ...

    注意您所需 Operator 的目录。

  2. 检查您所需的 Operator 以验证其支持的安装模式和可用的通道。

    $ oc describe packagemanifests <operator_name> -n openshift-marketplace
    示例输出
    # ...
    Kind:         PackageManifest
    # ...
          Install Modes: (1)
            Supported:  true
            Type:       OwnNamespace
            Supported:  true
            Type:       SingleNamespace
            Supported:  false
            Type:       MultiNamespace
            Supported:  true
            Type:       AllNamespaces
    # ...
        Entries:
          Name:       example-operator.v3.7.11
          Version:    3.7.11
          Name:       example-operator.v3.7.10
          Version:    3.7.10
        Name:         stable-3.7 (2)
    # ...
       Entries:
          Name:         example-operator.v3.8.5
          Version:      3.8.5
          Name:         example-operator.v3.8.4
          Version:      3.8.4
        Name:           stable-3.8 (2)
      Default Channel:  stable-3.8 (3)
    
    1 指示支持哪些安装模式。
    2 示例通道名称。
    3 如果没有指定通道,则默认选择的通道。

    您可以通过运行以下命令以 YAML 格式打印 Operator 的版本和通道信息。

    $ oc get packagemanifests <operator_name> -n <catalog_namespace> -o yaml
    • 如果在命名空间中安装了多个目录,请运行以下命令以查找来自特定目录的 Operator 的可用版本和通道。

      $ oc get packagemanifest \
         --selector=catalog=<catalogsource_name> \
         --field-selector metadata.name=<operator_name> \
         -n <catalog_namespace> -o yaml

      如果您未指定 Operator 的目录,如果满足以下条件,则运行oc get packagemanifestoc describe packagemanifest命令可能会返回来自意外目录的包。

      • 在同一命名空间中安装了多个目录。

      • 这些目录包含相同的 Operator 或名称相同的 Operator。

  3. 如果您要安装的 Operator 支持AllNamespaces安装模式,并且您选择使用此模式,请跳过此步骤,因为openshift-operators命名空间默认已设置相应的 Operator 组,名为global-operators

    如果您要安装的 Operator 支持SingleNamespace安装模式,并且您选择使用此模式,则必须确保相关命名空间中存在相应的 Operator 组。如果不存在,您可以按照以下步骤创建一个。

    每个命名空间只能有一个 Operator 组。有关更多信息,请参阅“Operator 组”。

    1. SingleNamespace安装模式创建一个OperatorGroup对象 YAML 文件,例如operatorgroup.yaml

      SingleNamespace安装模式的示例OperatorGroup对象。
      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: <operatorgroup_name>
        namespace: <namespace> (1)
      spec:
        targetNamespaces:
        - <namespace> (1)
      1 对于SingleNamespace安装模式,请同时为metadata.namespacespec.targetNamespaces字段使用相同的<namespace>值。
    2. 创建OperatorGroup对象。

      $ oc apply -f operatorgroup.yaml
  4. 创建一个Subscription对象以使命名空间订阅 Operator。

    1. Subscription对象创建一个 YAML 文件,例如subscription.yaml

      如果您想订阅 Operator 的特定版本,请将startingCSV字段设置为所需的版本,并将installPlanApproval字段设置为Manual,以防止 Operator 在目录中存在更高版本时自动升级。有关详细信息,请参阅以下“具有特定起始 Operator 版本的示例Subscription对象”。

      示例Subscription对象。
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: <subscription_name>
        namespace: <namespace_per_install_mode> (1)
      spec:
        channel: <channel_name> (2)
        name: <operator_name> (3)
        source: <catalog_name> (4)
        sourceNamespace: <catalog_source_namespace> (5)
        config:
          env: (6)
          - name: ARGS
            value: "-v=10"
          envFrom: (7)
          - secretRef:
              name: license-secret
          volumes: (8)
          - name: <volume_name>
            configMap:
              name: <configmap_name>
          volumeMounts: (9)
          - mountPath: <directory_name>
            name: <volume_name>
          tolerations: (10)
          - operator: "Exists"
          resources: (11)
            requests:
              memory: "64Mi"
              cpu: "250m"
            limits:
              memory: "128Mi"
              cpu: "500m"
          nodeSelector: (12)
            foo: bar
      1 对于默认的AllNamespaces安装模式用法,请指定openshift-operators命名空间。或者,如果您已创建自定义全局命名空间,则可以指定它。对于SingleNamespace安装模式用法,请指定相关的单个命名空间。
      2 要订阅的通道的名称。
      3 要订阅的 Operator 的名称。
      4 提供 Operator 的目录源的名称。
      5 目录源的命名空间。对于默认的 OperatorHub 目录源,请使用openshift-marketplace
      6 env 参数定义了由 OLM 创建的 Pod 中所有容器都必须存在的环境变量列表。
      7 envFrom 参数定义了填充容器中环境变量的来源列表。
      8 volumes 参数定义了由 OLM 创建的 Pod 上必须存在的卷列表。
      9 volumeMounts 参数定义了由 OLM 创建的 Pod 中所有容器都必须存在的卷挂载列表。如果 volumeMount 引用了一个不存在的 volume,OLM 将无法部署 Operator。
      10 tolerations 参数定义了由 OLM 创建的 Pod 的容忍度列表。
      11 resources 参数定义了由 OLM 创建的 Pod 中所有容器的资源限制。
      12 nodeSelector 参数定义了由 OLM 创建的 Pod 的节点选择器。
      具有特定起始 Operator 版本的示例 Subscription 对象
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: example-operator
        namespace: example-operator
      spec:
        channel: stable-3.7
        installPlanApproval: Manual (1)
        name: example-operator
        source: custom-operators
        sourceNamespace: openshift-marketplace
        startingCSV: example-operator.v3.7.10 (2)
      1 如果您的指定版本被目录中的更高版本取代,请将批准策略设置为 Manual。此计划可防止自动升级到更高版本,并在起始 CSV 完成安装之前需要手动批准。
      2 设置 Operator CSV 的特定版本。
    2. 对于启用了令牌身份验证的云提供商集群(例如 Amazon Web Services (AWS) 安全令牌服务 (STS)、Microsoft Entra 工作负载 ID 或 Google Cloud Platform 工作负载身份),请按照以下步骤配置您的 Subscription 对象

      1. 确保 Subscription 对象设置为手动更新审批

        具有手动更新审批的示例 Subscription 对象
        kind: Subscription
        # ...
        spec:
          installPlanApproval: Manual (1)
        1 不建议使用自动更新审批的订阅,因为在更新之前可能需要进行权限更改。使用手动更新审批的订阅可确保管理员有机会验证更高版本的权限,采取任何必要的步骤,然后进行更新。
      2. Subscription 对象的 config 部分中包含相关的特定于云提供商的字段

        • 如果集群处于 AWS STS 模式,请包含以下字段

          包含 AWS STS 变量的示例 Subscription 对象
          kind: Subscription
          # ...
          spec:
            config:
              env:
              - name: ROLEARN
                value: "<role_arn>" (1)
          1 包含角色 ARN 详情。
        • 如果集群处于工作负载 ID 模式,请包含以下字段

          包含工作负载 ID 变量的示例 Subscription 对象
          kind: Subscription
          # ...
          spec:
           config:
             env:
             - name: CLIENTID
               value: "<client_id>" (1)
             - name: TENANTID
               value: "<tenant_id>" (2)
             - name: SUBSCRIPTIONID
               value: "<subscription_id>" (3)
          1 包含客户端 ID。
          2 包含租户 ID。
          3 包含订阅 ID。
        • 如果集群处于 GCP 工作负载身份模式,请包含以下字段

          包含 GCP 工作负载身份变量的示例 Subscription 对象
          kind: Subscription
          # ...
          spec:
           config:
             env:
             - name: AUDIENCE
               value: "<audience_url>" (1)
             - name: SERVICE_ACCOUNT_EMAIL
               value: "<service_account_email>" (2)

          其中

          <audience>

          由管理员在 GCP 中创建,当他们设置 GCP 工作负载身份时,AUDIENCE 值必须是以下格式的预格式化 URL

          //iam.googleapis.com/projects/<project_number>/locations/global/workloadIdentityPools/<pool_id>/providers/<provider_id>
          <service_account_email>

          SERVICE_ACCOUNT_EMAIL 值是在 Operator 操作期间模拟的 GCP 服务帐户电子邮件,例如

          <service_account_name>@<project_id>.iam.gserviceaccount.com
    3. 运行以下命令创建 Subscription 对象

      $ oc apply -f subscription.yaml
  5. 如果您将 installPlanApproval 字段设置为 Manual,请手动批准挂起的安装计划以完成 Operator 安装。有关更多信息,请参阅“手动批准挂起的 Operator 更新”。

此时,OLM 现在已经知道所选择的 Operator。目标命名空间中应该会出现 Operator 的集群服务版本 (CSV),并且应该可以创建 Operator 提供的 API。

验证
  1. 运行以下命令检查已安装 Operator 的 Subscription 对象的状态

    $ oc describe subscription <subscription_name> -n <namespace>
  2. 如果您为 SingleNamespace 安装模式创建了 Operator 组,请运行以下命令检查 OperatorGroup 对象的状态

    $ oc describe operatorgroup <operatorgroup_name> -n <namespace>
其他资源