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。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
可选:为 MetalLB Operator 创建所需的命名空间:
注意您可以选择在这个阶段创建命名空间,或者在启动 MetalLB Operator 安装时创建命名空间。在 Installed Namespace 列表中,您可以创建项目。
-
进行 Administration
Namespaces,点 Create Namespace。 -
在 Name 字段中输入
metallb-system
,然后点 Create。
-
进行 Administration
安装 MetalLB Operator:
-
在 OpenShift Container Platform Web 控制台中,点击 Operators
OperatorHub。 在 Filter by keyword 字段中输入
metallb
以查找 MetalLB Operator,然后点 Install。您还可以根据基础架构功能过滤选项。例如,如果您希望 Operator 在断开连接的环境中工作,请选择 Disconnected。
-
在 Install Operator 页面中 ,选择集群上的特定命名空间。选择在上一节中创建的命名空间,或选择创建
metallb-system
项目,然后点 Install。
-
在 OpenShift Container Platform Web 控制台中,点击 Operators
验证
验证 MetalLB Operator 是否已成功安装:
-
进入到 Operators
Installed Operators 页面。 确保 metallb-system 项目中列出的 MetalLB Operator 的 Status 为 Succeeded。
注意在安装过程中,Operator 可能会显示 Failed 状态。如果安装后安装成功并显示 Succeeded 信息,您可以忽略 Failed 信息。
如果 Operator 安装不成功,您可以进一步排除故障:
-
导航到 Operators
Installed Operators 页面,检查 Operator Subscriptions 和 Install Plans 选项卡中的 Status 项中是否有任何错误。 -
进入到 Workloads
Pods 页面,在 metallb-system
项目中检查 pod 的日志。
-
导航到 Operators
26.2.2. 使用 CLI 从 OperatorHub 安装
您可以使用 CLI 从 OperatorHub 安装 Operator,而不必使用 OpenShift Container Platform Web 控制台。使用 oc
命令来创建或更新一个订阅
对象。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
确认 MetalLB Operator 可用:
$ oc get packagemanifests -n openshift-marketplace metallb-operator
输出示例
NAME CATALOG AGE metallb-operator Red Hat Operators 9h
创建
metallb-system
命名空间:$ cat << EOF | oc apply -f - apiVersion: v1 kind: Namespace metadata: name: metallb-system EOF
可选: 要确保 BGP 和 BFD 指标出现在 Prometheus 中,您可以使用以下命令标记命名空间:
$ oc label ns metallb-system "openshift.io/cluster-monitoring=true"
在命名空间中创建一个 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
确认 Operator 组已安装在命名空间中:
$ oc get operatorgroup -n metallb-system
输出示例
NAME AGE metallb-operator 14m
订阅 MetalLB Operator。
运行以下命令以获取 OpenShift Container Platform 的主版本和次版本。您可以使用这些值来设置下一步中的
channel
值。$ OC_VERSION=$(oc version -o yaml | grep openshiftVersion | \ grep -o '[0-9]*[.][0-9]*' | head -1)
要为 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
确认安装计划位于命名空间中:
$ oc get installplan -n metallb-system
输出示例
NAME CSV APPROVAL APPROVED install-wzg94 metallb-operator.4.10.0-nnnnnnnnnnnn Automatic true
要验证是否已安装 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。
流程
创建 MetalLB 自定义资源的单一实例:
$ cat << EOF | oc apply -f - apiVersion: metallb.io/v1beta1 kind: MetalLB metadata: name: metallb namespace: metallb-system EOF
验证
确认 MetalLB 控制器的部署和 MetalLB speaker 的守护进程集正在运行。
检查控制器的部署是否正在运行:
$ oc get deployment -n metallb-system controller
输出示例
NAME READY UP-TO-DATE AVAILABLE AGE controller 1/1 1 1 11m
检查 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。如需有关关联性规则、污点和容限的更多信息,请参阅其他资源。
其他资源
- 如需有关节点选择器的更多信息,请参阅使用节点选择器将 pod 放置到特定的节点上。
- 如需有关污点和容限的更多信息,请参阅了解污点和容限。