.. _install_metallb:
=====================
安装MetalLB
=====================
前提条件
===========
在安装MetalLB之前,需要检查:
- Kubernetes 1.13.0 或更高版本,并且还没有部署网络负载均衡功能
- `Kubernetes网络插件MetalLB兼容性列表 `_
- 保留部分IPv4地址给MetalLB处理
- 当使用BGP操作模式,需要有一些能够处理BGP通讯的路由器
- 当使用L2操作模式(两层交换机模式),Kubernetes节点必须允许端口 ``7946`` 流量(TCP和UDP,也可以配置其他端口)
MetalLB的早期版本采用 ``configmap`` 配置,但是从版本 ``v0.13.0`` 开始,只能通过 ``CRs`` 进行配置。在 ``quay.io/metallb/configmaptocrs`` 提供了一个将旧有的 ``configmap`` 转换到 ``CRs`` 的工具镜像。
FRR模式
-----------
MetalLB 实现了 FRR 模式,该模式使用 FRR 容器作为处理 BGP 会话的后端。 它提供了本机 BGP 实现所不具备的功能,例如将 BGP 会话与 BFD 会话配对,以及公布 IPV6 地址。
尽管与本机 BGP 实施相比,FRR 模式的实战测试较少,但 FRR 模式目前被那些需要 BFD 或 IPV6 的用户使用,并且它是随 OpenShift 分发的 MetalLB 版本中唯一受支持的方法。 长期计划是使其成为 MetalLB 中唯一可用的 BGP 实现。
.. note::
这个有点高深,BGP协议实现有待进一步学习,看看有没有结合 :ref:`cisco` 的实践
准备工作
===============
如果使用 ``IPVS`` 模式的 ``kube-proxy`` ,从 Kubernetes v1.14.2 开始,必须激活严格的 ARP 模式。注意,如果使用 ``kube-router`` 作为 ``service-proxy`` 则不需要这个步骤,因为已经默认激活了 ``strict ARP``
- 通过编辑当前集群的 ``kube-proxy`` 配置实现:
.. literalinclude:: install_metallb/enable_strict_arp_mode
:language: bash
:caption: 通过编辑 ``kube-proxy`` 配置激活 ``strict ARP``
设置:
.. literalinclude:: install_metallb/edit_configmap_enable_strict_arp_mode
:language: bash
:caption: 设置 ``ipvs`` 模式中 ``strictARP: true``
:emphasize-lines: 5
.. note::
参考 `KubeProxyIPVSConfiguration `_ :
``strictARP`` 配置 ``arp_ignore`` 和 ``arp_announce`` 来避免从 ``kube-ipvs0`` 网络接口响应ARP请求
.. note::
:ref:`metallb_with_kind` 配置前,检查 :ref:`kind` 集群上述配置,发现默认是 ``strictARP: false`` ,我修订为 ``strictARP: true``
- 可以使用以下shell脚本自动完成上述 ``strictARP: true`` 配置:
.. literalinclude:: install_metallb/enable_strict_arp_mode_script
:language: bash
:caption: 脚本方式完成 ``kube-proxy`` 配置激活 ``strict ARP``
使用Manifest方式安装MetalLB
===============================
- 执行以下 ``manifest`` 完成MetalLB安装:
.. literalinclude:: install_metallb/install_metallb_by_manifest
:language: bash
:caption: 使用Manifest方式安装MetalLB
输出显示:
.. literalinclude:: install_metallb/install_metallb_by_manifest_output
:language: bash
:caption: 使用Manifest方式安装MetalLB的输出信息
.. note::
使用 FRR 模式请参考原文
上述操作在集群中的 ``metallb-system`` namespace 部署了MetalLB,在 manifest 中的组件包括:
- ``metallb-system/controller`` deployment: 这是用于处理IP地址分配的集群范围控制器
- ``metallb-system/speaker`` daemonset: 该组件负责选择可以到达服务的协议
- 用于 ``controller`` 和 ``speaker`` 的系统服务账号,归属于RBAC的功能组件
安装 manifest 并不包括配置文件,此时MetalLB组件依然能够启动,但是始终是 ``idle`` 状态,直到 ``开始部署资源`` (配置MetalLB)
此外有2个一体化(all-in-one)的manifests用于集成 :ref:`prometheus` ,这2个manifest假设 prometheus operator 是部署在 ``monitoring`` namespace 并且使用了 ``prometheus-k8s`` 服务账号。
参考
======
- `MetalLB installation `_