$ cat << EOF | oc apply -f -
apiVersion: v1
kind: Namespace
metadata:
name: metallb-system
EOF
作为集群管理员,您可以添加 MetalLB Operator,以便 Operator 可以管理集群上 MetalLB 实例的生命周期。
MetalLB 和 IP 故障转移不兼容。如果您已为集群配置了 IP 故障转移,请在安装 Operator 之前执行以下步骤以移除 IP 故障转移。
作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台安装 MetalLB Operator。
以具有cluster-admin
权限的用户身份登录。
在 OpenShift Container Platform Web 控制台中,导航到**Operators** → **OperatorHub**。
在**按关键词筛选**框中输入关键词,或滚动查找所需的 Operator。例如,输入metallb
以查找 MetalLB Operator。
您还可以按**基础架构功能**筛选选项。例如,如果您想查看在脱机环境(也称为受限网络环境)中工作的 Operators,请选择**脱机**。
在**安装 Operator**页面上,接受默认值并点击**安装**。
确认安装成功
导航到**Operators** → **已安装的 Operators**页面。
检查 Operator 是否已安装在openshift-operators
命名空间中,并且其状态为Succeeded
。
如果 Operator 未成功安装,请检查 Operator 的状态并查看日志
导航到**Operators** → **已安装的 Operators**页面,并检查Status
列中是否存在任何错误或故障。
导航到**工作负载** → **Pod**页面,并检查openshift-operators
项目中报告问题的任何 Pod 的日志。
您可以使用 CLI 从 OperatorHub 安装 Operator,而不是使用 OpenShift Container Platform Web 控制台。您可以使用 OpenShift CLI(oc
)安装 MetalLB Operator。
建议使用 CLI 时,将 Operator 安装在metallb-system
命名空间中。
在裸机硬件上安装的集群。
安装 OpenShift CLI(oc
)。
以具有cluster-admin
权限的用户身份登录。
通过输入以下命令创建 MetalLB Operator 的命名空间
$ cat << EOF | oc apply -f -
apiVersion: v1
kind: Namespace
metadata:
name: metallb-system
EOF
在命名空间中创建 Operator 组自定义资源 (CR)
$ cat << EOF | oc apply -f -
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: metallb-operator
namespace: metallb-system
EOF
确认 Operator 组已安装在命名空间中
$ oc get operatorgroup -n metallb-system
NAME AGE
metallb-operator 14m
创建Subscription
CR
定义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 值。 |
要创建Subscription
CR,请运行以下命令
$ oc create -f metallb-sub.yaml
可选:为了确保 BGP 和 BFD 指标显示在 Prometheus 中,您可以像以下命令一样标记命名空间
$ oc label ns metallb-system "openshift.io/cluster-monitoring=true"
验证步骤假设 MetalLB Operator 已安装在metallb-system
命名空间中。
确认安装计划在命名空间中
$ oc get installplan -n metallb-system
NAME CSV APPROVAL APPROVED
install-wzg94 metallb-operator.4.17.0-nnnnnnnnnnnn Automatic true
Operator 的安装可能需要几秒钟。 |
要验证 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
安装 Operator 后,您需要配置单个 MetalLB 自定义资源实例。配置自定义资源后,Operator 将在您的集群上启动 MetalLB。
安装 OpenShift CLI(oc
)。
以具有cluster-admin
权限的用户身份登录。
安装 MetalLB Operator。
此步骤假设 MetalLB Operator 已安装在metallb-system
命名空间中。如果您使用 Web 控制台安装,请将命名空间替换为openshift-operators
。
创建单个 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 的数量可能与示例输出不同。确保输出指示集群中每个节点一个 Pod。
使用MetalLB
自定义资源启动 MetalLB 实例时,您可以在MetalLB
自定义资源中配置部署规范,以管理controller
或speaker
Pod 如何在您的集群中部署和运行。使用这些部署规范来管理以下任务
选择 MetalLB Pod 部署的节点。
使用 Pod 优先级和 Pod 亲和性管理调度。
为 MetalLB Pod 分配 CPU 限制。
为 MetalLB Pod 分配容器运行时类。
为 MetalLB Pod 分配元数据。
默认情况下,当您使用 MetalLB Operator 启动 MetalLB 时,Operator 会在集群中的每个节点上启动一个speaker
Pod 实例。只有具有speaker
Pod 的节点才能发布负载均衡器 IP 地址。您可以使用节点选择器配置MetalLB
自定义资源,以指定哪些节点运行speaker
Pod。
将speaker
Pod 限制到特定节点的最常见原因是确保只有具有特定网络上的网络接口的节点才能发布负载均衡器 IP 地址。只有具有正在运行的speaker
Pod 的节点才会被宣传为负载均衡器 IP 地址的目标。
如果您将speaker
Pod 限制到特定节点并将服务的外部流量策略指定为local
,则必须确保服务的应用程序 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
自定义资源为controller
和speaker
Pod分配Pod优先级和Pod亲和性规则。Pod优先级指示Pod在节点上的相对重要性,并基于此优先级调度Pod。为您的controller
或speaker
Pod设置高优先级,以确保其在节点上优先于其他Pod进行调度。
Pod亲和性管理Pod之间的关系。为controller
或speaker
Pod分配Pod亲和性,以控制调度程序在Pod关系上下文中将Pod放置在哪个节点上。例如,您可以使用Pod亲和性规则来确保某些Pod位于相同的节点或节点上,这有助于改善网络通信并减少这些组件之间的延迟。
您已以具有cluster-admin
权限的用户身份登录。
您已安装MetalLB Operator。
您已在集群上启动MetalLB Operator。
创建一个PriorityClass
自定义资源,例如myPriorityClass.yaml
,来配置优先级级别。此示例定义了一个名为high-priority
,值为1000000
的PriorityClass
。与具有较低优先级类的Pod相比,分配此优先级类的Pod在调度期间被认为具有更高的优先级。
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
应用PriorityClass
自定义资源配置。
$ oc apply -f myPriorityClass.yaml
创建一个MetalLB
自定义资源,例如MetalLBPodConfig.yaml
,以指定priorityClassName
和podAffinity
值。
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之间的网络通信、延迟和资源使用。 |
应用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
自定义资源为controller
和speaker
Pod分配Pod CPU限制。为controller
或speaker
Pod定义CPU限制有助于您管理节点上的计算资源。这确保节点上的所有Pod都拥有管理工作负载和集群维护所需的计算资源。
您已以具有cluster-admin
权限的用户身份登录。
您已安装MetalLB Operator。
创建一个MetalLB
自定义资源文件,例如CPULimits.yaml
,以指定controller
和speaker
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"
应用MetalLB
自定义资源配置。
$ oc apply -f CPULimits.yaml
要查看Pod的计算资源,请运行以下命令,将<pod_name>
替换为您的目标Pod:
$ oc describe pod <pod_name>