26.2. 安装 MetalLB Operator


作为集群管理员,您可以添加 MetallB Operator,以便 Operator 可以管理集群中的 MetalLB 实例的生命周期。

安装过程使用 metallb-system 命名空间。您可以安装 Operator 并在不同的命名空间中配置自定义资源。Operator 在安装 Operator 的同一命名空间中启动 MetalLB。

MetalLB 和 IP 故障转移不兼容。如果您为集群配置了 IP 故障切换,请在安装 Operator 前执行删除 IP 故障切换的步骤。

26.2.1. 使用 Web 控制台从 OperatorHub 安装 MetalLB Operator

作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台安装 MetalLB Operator。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 可选:为 MetalLB Operator 创建所需的命名空间:

    注意

    您可以选择在这个阶段创建命名空间,或者在启动 MetalLB Operator 安装时创建命名空间。在 Installed Namespace 列表中,您可以创建项目。

    1. 进行 Administration Namespaces,点 Create Namespace
    2. Name 字段中输入 metallb-system,然后点 Create
  3. 安装 MetalLB Operator:

    1. 在 OpenShift Container Platform Web 控制台中,点击 Operators OperatorHub
    2. Filter by keyword 字段中输入 metallb 以查找 MetalLB Operator,然后点 Install

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

    3. Install Operator 页面中 ,选择集群上的特定命名空间。选择在上一节中创建的命名空间,或选择创建 metallb-system 项目,然后点 Install

验证

验证 MetalLB Operator 是否已成功安装:

  1. 进入到 Operators Installed Operators 页面。
  2. 确保 metallb-system 项目中列出的 MetalLB OperatorStatusSucceeded

    注意

    在安装过程中,Operator 可能会显示 Failed 状态。如果安装后安装成功并显示 Succeeded 信息,您可以忽略 Failed 信息。

  3. 如果 Operator 安装不成功,您可以进一步排除故障:

    1. 导航到 Operators Installed Operators 页面,检查 Operator SubscriptionsInstall Plans 选项卡中的 Status 项中是否有任何错误。
    2. 进入到 Workloads Pods 页面,在 metallb-system 项目中检查 pod 的日志。

26.2.2. 使用 CLI 从 OperatorHub 安装

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

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 确认 MetalLB Operator 可用:

    $ oc get packagemanifests -n openshift-marketplace metallb-operator

    输出示例

    NAME               CATALOG                AGE
    metallb-operator   Red Hat Operators      9h

  2. 创建 metallb-system 命名空间:

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Namespace
    metadata:
      name: metallb-system
    EOF
  3. 可选: 要确保 BGP 和 BFD 指标出现在 Prometheus 中,您可以使用以下命令标记命名空间:

    $ oc label ns metallb-system "openshift.io/cluster-monitoring=true"
  4. 在命名空间中创建一个 Operator 组自定义资源:

    $ cat << EOF | oc apply -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: metallb-operator
      namespace: metallb-system
    spec:
      targetNamespaces:
      - metallb-system
    EOF
  5. 确认 Operator 组已安装在命名空间中:

    $ oc get operatorgroup -n metallb-system

    输出示例

    NAME               AGE
    metallb-operator   14m

  6. 订阅 MetalLB Operator。

    1. 运行以下命令以获取 OpenShift Container Platform 的主版本和次版本。您可以使用这些值来设置下一步中的 channel 值。

      $ OC_VERSION=$(oc version -o yaml | grep openshiftVersion | \
          grep -o '[0-9]*[.][0-9]*' | head -1)
    2. 要为 Operator 创建订阅自定义资源,请输入以下命令:

      $ cat << EOF| oc apply -f -
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: metallb-operator-sub
        namespace: metallb-system
      spec:
        channel: "${OC_VERSION}"
        name: metallb-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
      EOF
  7. 确认安装计划位于命名空间中:

    $ oc get installplan -n metallb-system

    输出示例

    NAME            CSV                                                 APPROVAL    APPROVED
    install-wzg94   metallb-operator.4.10.0-nnnnnnnnnnnn   Automatic   true

  8. 要验证是否已安装 Operator,请输入以下命令:

    $ oc get clusterserviceversion -n metallb-system \
      -o custom-columns=Name:.metadata.name,Phase:.status.phase

    输出示例

    Name                                                Phase
    metallb-operator.4.10.0-nnnnnnnnnnnn   Succeeded

26.2.3. 在集群中启动 MetalLB

安装 Operator 后,您需要配置 MetalLB 自定义资源的单一实例。配置自定义资源后,Operator 会在集群中启动 MetalLB。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。
  • 安装 MetalLB Operator。

流程

  1. 创建 MetalLB 自定义资源的单一实例:

    $ cat << EOF | oc apply -f -
    apiVersion: metallb.io/v1beta1
    kind: MetalLB
    metadata:
      name: metallb
      namespace: metallb-system
    EOF

验证

确认 MetalLB 控制器的部署和 MetalLB speaker 的守护进程集正在运行。

  1. 检查控制器的部署是否正在运行:

    $ oc get deployment -n metallb-system controller

    输出示例

    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    controller   1/1     1            1           11m

  2. 检查 speaker 的守护进程集是否正在运行:

    $ oc get daemonset -n metallb-system speaker

    输出示例

    NAME      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    speaker   6         6         6       6            6           kubernetes.io/os=linux   18m

    示例输出显示 6 个 speaker Pod。集群中的 speaker pod 数量可能与示例输出不同。确保输出指示集群中每个节点有一个容器集。

26.2.3.1. 将 speaker pod 限制到特定的节点

默认情况下,当使用 MetalLB Operator 启动 MetalLB 时,Operator 会在集群中的每个节点上启动 speaker pod 的实例。只有具有 speaker pod 的节点可以公告负载均衡器 IP 地址。您可以使用节点选择器配置 MetalLB 自定义资源,以指定运行 speaker pod 的节点。

speaker Pod 限制到特定的节点的最常见原因是,确保只有具有特定网络上网络接口的节点公告负载均衡器 IP 地址。只有具有正在运行的 speaker pod 的节点才会公告为负载均衡器 IP 地址的目的地。

如果将 speaker 的 pod 限制到特定的节点,并为服务的外部流量策略指定 local,则必须确保该服务的应用程序 pod 部署到同一节点上。

将 speaker pod 限制为 worker 节点的配置示例

apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
  name: metallb
  namespace: metallb-system
spec:
  nodeSelector:  <.>
    node-role.kubernetes.io/worker: ""
  speakerTolerations:   <.>
  - key: "Example"
    operator: "Exists"
    effect: "NoExecute"

<.> 示例配置指定将 speaker pod 分配给 worker 节点,但您可以指定分配给节点或任何有效的节点选择器的标签。<.> 在这个示例配置中,附加此容限的 pod 会容限使用 operator 的,与 key 的值和 effect 值匹配的污点。

使用 spec.nodeSelector 字段应用清单后,您可以检查 Operator 使用 oc get daemonset -n metallb-system speaker 命令部署的 pod 数量。同样,您可以使用 oc get nodes -l node-role.kubernetes.io/worker= 等命令显示与标签匹配的节点。

您可以选择允许节点使用关联性规则控制哪些 speaker pod 应该或不应该调度到节点上。您还可以通过应用容限列表来限制这些 pod。如需有关关联性规则、污点和容限的更多信息,请参阅其他资源。

其他资源

26.2.4. 后续步骤

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.