×

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

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

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

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

先决条件
  • 以具有cluster-admin权限的用户身份登录。

步骤
  1. 在 OpenShift Container Platform Web 控制台中,导航到**Operators** → **OperatorHub**。

  2. 在**按关键词筛选**框中输入关键词,或滚动查找所需的 Operator。例如,输入metallb以查找 MetalLB Operator。

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

  3. 在**安装 Operator**页面上,接受默认值并点击**安装**。

验证
  1. 确认安装成功

    1. 导航到**Operators** → **已安装的 Operators**页面。

    2. 检查 Operator 是否已安装在openshift-operators命名空间中,并且其状态为Succeeded

  2. 如果 Operator 未成功安装,请检查 Operator 的状态并查看日志

    1. 导航到**Operators** → **已安装的 Operators**页面,并检查Status列中是否存在任何错误或故障。

    2. 导航到**工作负载** → **Pod**页面,并检查openshift-operators项目中报告问题的任何 Pod 的日志。

使用 CLI 从 OperatorHub 安装

您可以使用 CLI 从 OperatorHub 安装 Operator,而不是使用 OpenShift Container Platform Web 控制台。您可以使用 OpenShift CLI(oc)安装 MetalLB Operator。

建议使用 CLI 时,将 Operator 安装在metallb-system命名空间中。

先决条件
  • 在裸机硬件上安装的集群。

  • 安装 OpenShift CLI(oc)。

  • 以具有cluster-admin权限的用户身份登录。

步骤
  1. 通过输入以下命令创建 MetalLB Operator 的命名空间

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Namespace
    metadata:
      name: metallb-system
    EOF
  2. 在命名空间中创建 Operator 组自定义资源 (CR)

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

    $ oc get operatorgroup -n metallb-system
    示例输出
    NAME               AGE
    metallb-operator   14m
  4. 创建Subscription CR

    1. 定义Subscription CR 并保存 YAML 文件,例如metallb-sub.yaml

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: metallb-operator-sub
        namespace: metallb-system
      spec:
        channel: stable
        name: metallb-operator
        source: redhat-operators (1)
        sourceNamespace: openshift-marketplace
      1 必须指定redhat-operators值。
    2. 要创建Subscription CR,请运行以下命令

      $ oc create -f metallb-sub.yaml
  5. 可选:为了确保 BGP 和 BFD 指标显示在 Prometheus 中,您可以像以下命令一样标记命名空间

    $ oc label ns metallb-system "openshift.io/cluster-monitoring=true"
验证

验证步骤假设 MetalLB Operator 已安装在metallb-system命名空间中。

  1. 确认安装计划在命名空间中

    $ oc get installplan -n metallb-system
    示例输出
    NAME            CSV                                   APPROVAL    APPROVED
    install-wzg94   metallb-operator.4.17.0-nnnnnnnnnnnn   Automatic   true

    Operator 的安装可能需要几秒钟。

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

    $ oc get clusterserviceversion -n metallb-system \
      -o custom-columns=Name:.metadata.name,Phase:.status.phase
    示例输出
    Name                                  Phase
    metallb-operator.4.17.0-nnnnnnnnnnnn   Succeeded

在集群上启动 MetalLB

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

先决条件
  • 安装 OpenShift CLI(oc)。

  • 以具有cluster-admin权限的用户身份登录。

  • 安装 MetalLB Operator。

步骤

此步骤假设 MetalLB Operator 已安装在metallb-system命名空间中。如果您使用 Web 控制台安装,请将命名空间替换为openshift-operators

  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 的数量可能与示例输出不同。确保输出指示集群中每个节点一个 Pod。

MetalLB 的部署规范

使用MetalLB自定义资源启动 MetalLB 实例时,您可以在MetalLB自定义资源中配置部署规范,以管理controllerspeaker Pod 如何在您的集群中部署和运行。使用这些部署规范来管理以下任务

  • 选择 MetalLB Pod 部署的节点。

  • 使用 Pod 优先级和 Pod 亲和性管理调度。

  • 为 MetalLB Pod 分配 CPU 限制。

  • 为 MetalLB Pod 分配容器运行时类。

  • 为 MetalLB Pod 分配元数据。

将 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 到工作节点的示例配置
apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
  name: metallb
  namespace: metallb-system
spec:
  nodeSelector:  (1)
    node-role.kubernetes.io/worker: ""
  speakerTolerations:   (2)
  - key: "Example"
    operator: "Exists"
    effect: "NoExecute"
1 此示例配置指定将 speaker Pod 分配给工作节点,但您可以指定您分配给节点的标签或任何有效的节点选择器。
2 在此示例配置中,附加此容忍性的 Pod 容忍任何与key值和effect值匹配的污点,使用operator

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

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

在 MetalLB 部署中配置 Pod 优先级和 Pod 亲和性

您可以选择通过配置MetalLB自定义资源为controllerspeaker Pod分配Pod优先级和Pod亲和性规则。Pod优先级指示Pod在节点上的相对重要性,并基于此优先级调度Pod。为您的controllerspeaker Pod设置高优先级,以确保其在节点上优先于其他Pod进行调度。

Pod亲和性管理Pod之间的关系。为controllerspeaker Pod分配Pod亲和性,以控制调度程序在Pod关系上下文中将Pod放置在哪个节点上。例如,您可以使用Pod亲和性规则来确保某些Pod位于相同的节点或节点上,这有助于改善网络通信并减少这些组件之间的延迟。

先决条件
  • 您已以具有cluster-admin权限的用户身份登录。

  • 您已安装MetalLB Operator。

  • 您已在集群上启动MetalLB Operator。

步骤
  1. 创建一个PriorityClass自定义资源,例如myPriorityClass.yaml,来配置优先级级别。此示例定义了一个名为high-priority,值为1000000PriorityClass。与具有较低优先级类的Pod相比,分配此优先级类的Pod在调度期间被认为具有更高的优先级。

    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: high-priority
    value: 1000000
  2. 应用PriorityClass自定义资源配置。

    $ oc apply -f myPriorityClass.yaml
  3. 创建一个MetalLB自定义资源,例如MetalLBPodConfig.yaml,以指定priorityClassNamepodAffinity值。

    apiVersion: metallb.io/v1beta1
    kind: MetalLB
    metadata:
      name: metallb
      namespace: metallb-system
    spec:
      logLevel: debug
      controllerConfig:
        priorityClassName: high-priority (1)
        affinity:
          podAffinity: (2)
            requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchLabels:
                 app: metallb
              topologyKey: kubernetes.io/hostname
      speakerConfig:
        priorityClassName: high-priority
        affinity:
          podAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchLabels:
                 app: metallb
              topologyKey: kubernetes.io/hostname
    1 指定MetalLB控制器Pod的优先级类。在本例中,它设置为high-priority
    2 指定您正在配置Pod亲和性规则。这些规则规定了Pod相对于其他Pod或节点的调度方式。此配置指示调度程序将具有标签app: metallb的Pod调度到共享相同主机名的节点上。这有助于将MetalLB相关的Pod共同定位在相同的节点上,从而潜在地优化这些Pod之间的网络通信、延迟和资源使用。
  4. 应用MetalLB自定义资源配置。

    $ oc apply -f MetalLBPodConfig.yaml
验证
  • 要查看您分配给metallb-system命名空间中Pod的优先级类,请运行以下命令:

    $ oc get pods -n metallb-system -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName
    示例输出
    NAME                                                 PRIORITY
    controller-584f5c8cd8-5zbvg                          high-priority
    metallb-operator-controller-manager-9c8d9985-szkqg   <none>
    metallb-operator-webhook-server-c895594d4-shjgx      <none>
    speaker-dddf7                                        high-priority
  • 要验证调度程序是否根据Pod亲和性规则放置Pod,请通过运行以下命令查看Pod节点的元数据:

    $ oc get pod -o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name -n metallb-system

在MetalLB部署中配置Pod CPU限制

您可以选择通过配置MetalLB自定义资源为controllerspeaker Pod分配Pod CPU限制。为controllerspeaker Pod定义CPU限制有助于您管理节点上的计算资源。这确保节点上的所有Pod都拥有管理工作负载和集群维护所需的计算资源。

先决条件
  • 您已以具有cluster-admin权限的用户身份登录。

  • 您已安装MetalLB Operator。

步骤
  1. 创建一个MetalLB自定义资源文件,例如CPULimits.yaml,以指定controllerspeaker Pod的cpu值。

    apiVersion: metallb.io/v1beta1
    kind: MetalLB
    metadata:
      name: metallb
      namespace: metallb-system
    spec:
      logLevel: debug
      controllerConfig:
        resources:
          limits:
            cpu: "200m"
      speakerConfig:
        resources:
          limits:
            cpu: "300m"
  2. 应用MetalLB自定义资源配置。

    $ oc apply -f CPULimits.yaml
验证
  • 要查看Pod的计算资源,请运行以下命令,将<pod_name>替换为您的目标Pod:

    $ oc describe pod <pod_name>