3.2. 在命名空间中安装 Operator


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

3.2.1. 先决条件

  • 集群管理员必须在 OpenShift Container Platform 用户帐户中添加某些权限,以便允许将自助服务 Operator 安装到命名空间。详情请参阅允许非集群管理员安装 Operator

3.2.2. 关于使用 OperatorHub 安装 Operator

OperatorHub 是一个发现 Operator 的用户界面,它与 Operator Lifecycle Manager(OLM)一起工作,后者在集群中安装和管理 Operator。

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

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

安装模式
选择要在其中安装 Operator 的特定命名空间。
更新频道
如果某个 Operator 可通过多个频道获得,则可任选您想要订阅的频道。例如,要通过 stable 频道部署(如果可用),则从列表中选择这个选项。
批准策略

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

如果选择自动更新某个已安装的 Operator,则当所选频道中有该 Operator 的新版本时,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需人为干预。

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

3.2.3. 使用 Web 控制台,从 OperatorHub 安装

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

先决条件

  • 使用具有 Operator 安装权限的账户访问 OpenShift Container Platform 集群。

流程

  1. 在 Web 控制台中导航至 Operators OperatorHub 页面。
  2. 找到您需要的 Operator(滚动页面会在 Filter by keyword 框中输入查找关键字)。例如,输入 advanced 来查找 Advanced Cluster Management for Kubernetes Operator。

    您还可以根据基础架构功能过滤选项。例如,如果您希望 Operator 在断开连接的环境中工作,请选择 Disconnected

  3. 选择要显示更多信息的 Operator。

    注意

    选择 Community Operator 会警告红帽没有认证社区 Operator ; 您必须确认该警告方可继续。

  4. 阅读 Operator 信息并单击 Install
  5. Install Operator 页面中,配置 Operator 安装:

    1. 如果要安装 Operator 的特定版本,请从列表中选择 Update channelVersion。您可以在可能具有的任何频道中浏览 Operator 的不同版本,查看该频道和版本的元数据,然后选择您要安装的确切版本。

      注意

      版本选择默认为所选频道的最新版本。如果选择了频道的最新版本,则默认启用 Automatic 批准策略。如果没有为所选频道安装最新版本,则需要手动批准。

      使用手动批准安装 Operator 会导致命名空间中安装的所有 Operator 并使用 Manual 批准策略和所有 Operator 一起更新。如果要独立更新 Operator,将 Operator 安装到单独的命名空间中。

    2. 选择要在其中安装 Operator 的特定单一命名空间。该 Operator 仅限在该单一命名空间中监视和使用。
    3. 对于启用了令牌身份验证的云供应商上的集群:

      • 如果集群在 web 控制台中使用 AWS 安全令牌服务(STS Mode ),在角色 ARN 字段中输入服务帐户的 AWS IAM 角色的 Amazon Resource Name ( ARN )。要创建角色的 ARN,请按照 准备 AWS 帐户 中所述的步骤进行操作。
      • 如果集群使用 Microsoft Entra Workload ID (Web 控制台中的Workload Identity / Federated Identity Mode ),请在适当的项中添加客户端 ID、租户 ID 和订阅 ID。
      • 如果集群使用 Google Cloud Platform Workload Identity (GCP Workload Identity / Federated Identity Mode ),请在适当的字段中添加项目号、池 ID、供应商 ID 和服务帐户电子邮件。
    4. 对于 更新批准,请选择 AutomaticManual 批准策略。

      重要

      如果 Web 控制台显示集群使用 AWS STS、Microsoft Entra Workload ID 或 GCP Workload Identity,您必须将 Update approval 设置为 Manual

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

  6. Install 使 Operator 可供 OpenShift Container Platform 集群上的所选命名空间使用:

    1. 如果选择了手动批准策略,订阅的升级状态将保持在 Upgrading 状态,直至您审核并批准安装计划。

      Install Plan 页面批准后,订阅的升级状态将变为 Up to date

    2. 如果选择了 Automatic 批准策略,升级状态会在不用人工参与的情况下变为 Up to date

验证

  • 在订阅的升级状态变为 Up to date 后,选择 Operators Installed Operators 来验证已安装 Operator 的集群服务版本(CSV)是否最终出现了。状态 最终会在相关命名空间中变为 Succeeded

    注意

    对于 All namespaces…​ 安装模式,状态会在 openshift-operators 命名空间中解析为 Succeeded,但如果检查其他命名空间,则状态为 Copied

    如果没有:

    • 检查 openshift-operators 项目(如果选择了 A specific namespace…​ 安装模式)中的 openshift-operators 项目中的 pod 的日志,这会在 Workloads Pods 页面中报告问题以便进一步排除故障。
  • 安装 Operator 时,元数据会指示安装了哪个频道和版本。

    注意

    此目录上下文中仍可使用 ChannelVersion 下拉菜单查看其他版本元数据。

3.2.4. 使用 CLI 从 OperatorHub 安装

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

对于 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

    例 3.1. 输出示例

    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

    例 3.2. 输出示例

    # ...
    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 3
      Default Channel:  stable-3.8 4
    1
    指明支持哪些安装模式。
    2 3
    频道名称示例。
    4
    在没有指定频道时默认选择的频道。
    提示

    您可以运行以下命令来以 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> 2

      1 2
      对于 SingleNamespace 安装模式,对于 metadata.namespacespec.targetNamespaces 字段使用相同的 <namespace> 值。
    2. 创建 OperatorGroup 对象:

      $ oc apply -f operatorgroup.yaml
  4. 创建一个 Subscription 对象来订阅一个命名空间到 Operator:

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

      注意

      如果要订阅 Operator 的特定版本,请将 startCSV 字段设置为所需的版本,并将 installPlanApproval 字段设置为 Manual,以防止 Operator 在目录中有更新的版本时自动升级。详情请参阅以下 "Example Subscription object with a specific starting Operator version"。

      例 3.3. 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
      目录源的命名空间。将 openshift-marketplace 用于默认的 OperatorHub 目录源。
      6
      env 参数定义必须存在于由 OLM 创建的 pod 中所有容器中的环境变量列表。
      7
      envFrom 参数定义要在容器中填充环境变量的源列表。
      8
      volumes 参数定义了由 OLM 创建的、在 pod 上必须存在的卷列表。
      9
      volumeMounts 参数定义由 OLM 创建的 pod 中必须存在的卷挂载列表。如果 volumeMount 引用不存在的 ,OLM 无法部署 Operator。
      10
      tolerations 参数为 OLM 创建的 pod 定义容限列表。
      11
      resources 参数为 OLM 创建的 pod 中所有容器定义资源限制。
      12
      nodeSelector 参数为 OLM 创建的 pod 定义 NodeSelector

      例 3.4. 带有特定启动 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 Workload ID 或 Google Cloud Platform Workload Identity,按照以下步骤配置您的 Subscription 对象:

      1. 确保 Subscription 对象被设置为手动更新批准:

        例 3.5. 带有手动更新批准的 Subscription 对象示例

        kind: Subscription
        # ...
        spec:
          installPlanApproval: Manual 1
        1
        不建议使用具有自动批准更新的订阅,因为在更新前可能会进行权限更改。具有手动批准更新的订阅可确保管理员有机会验证后续版本的权限,执行任何必要的步骤,然后进行更新。
      2. Subscription 对象的 config 部分包括相关的云供应商相关字段:

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

          例 3.6. 使用 AWS STS 变量的 Subscription 对象示例

          kind: Subscription
          # ...
          spec:
            config:
              env:
              - name: ROLEARN
                value: "<role_arn>" 1
          1
          包含角色 ARN 详情。
        • 如果集群处于 Workload ID 模式,请包含以下字段:

          例 3.7. 带有 Workload 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 Workload Identity 模式,请包括以下字段:

          例 3.8. 带有 GCP Workload Identity 变量的 Subscription 对象示例

          kind: Subscription
          # ...
          spec:
           config:
             env:
             - name: AUDIENCE
               value: "<audience_url>" 1
             - name: SERVICE_ACCOUNT_EMAIL
               value: "<service_account_email>" 2

          其中:

          <audience>

          当管理员设置 GCP Workload Identity 时,在 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>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.