跳至主要内容

Harvester 網路最佳實踐

更換乙太網路網卡​

您可能出於各種原因想要更換 Harvester 叢集中裸機節點的乙太網路網卡,包括以下原因:

  • 故障或損壞

  • 硬體容量不足

  • 缺少功能

您可以按照以下步驟操作,並在每個節點中逐步執行。

更換前檢查​

  1. 驗證已安裝的 Harvester 版本是否支援新網卡。

  2. 在非生產環境中測試新網卡。

  3. 在 Harvester UI 的 Virtual Machines(虛擬機器)畫面上,驗證所有 VM 的狀態是 Running(執行中)或 Stopped(已停止)。

  4. 在嵌入式 Longhorn 儀表板上,驗證所有 Longhorn 磁碟區的狀態是 Healthy(健康)。

  5. (選填)在 Harvester Support 畫面上,產生支援套件以供比較之用。

收集資訊​

在採取任何行動之前,收集當前的網路資訊和狀態非常重要。

  • Harvester 網路配置:預設情況下,Harvester 會為管理網路建立一個名為 mgmt-bo 的綁定介面,並為每個叢集網路建立一個新的綁定介面。Harvester 將網路配置詳細資訊儲存在檔案 /oem/90_custom.yaml 中。

    範例:一個名為 ens3 的網卡已添加到 mgmt-bo 綁定介面。

    - path: /etc/sysconfig/network/ifcfg-mgmt-bo
    permissions: 384
    owner: 0
    group: 0
    content: |+
    STARTMODE='onboot'
    BONDING_MASTER='yes'
    BOOTPROTO='none'
    POST_UP_SCRIPT="wicked:setup_bond.sh"
    BONDING_SLAVE_0='ens3'
    BONDING_MODULE_OPTS='miimon=100 mode=active-backup '
    DHCLIENT_SET_DEFAULT_ROUTE='no'
    encoding: ""
    ownerstring: ""

    - path: /etc/sysconfig/network/ifcfg-ens3
    permissions: 384
    owner: 0
    group: 0
    content: |
    STARTMODE='hotplug'
    BOOTPROTO='none'
    encoding: ""
    ownerstring: ""
  • 實體網卡:您可以使用命令 ip link 來擷取相關資訊,包括每個網卡的狀態和對應的主介面(如適用)。

    範例:

    $ ip link | grep master -1

    2: ens3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master mgmt-bo state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:03:3a:e4 brd ff:ff:ff:ff:ff:ff
    --

    4: mgmt-bo: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master mgmt-br state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:03:3a:e4 brd ff:ff:ff:ff:ff:ff

  • PCI 裝置:您可以使用命令 lspci 來擷取裝置列表,這使您可以快速識別網路網卡。要擷取每個裝置的詳細資訊,請使用命令 lspci -v。

    範例(lspci):

    $ lspci
    00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03)

    範例(lspci -v):

    $ lspci -v
    00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03)
    Subsystem: Red Hat, Inc. QEMU Virtual Machine
    Physical Slot: 3
    Flags: bus master, fast devsel, latency 0, IRQ 11
    Memory at fc080000 (32-bit, non-prefetchable) [size=128K]
    I/O ports at c000 [size=64]
    Expansion ROM at fc000000 [disabled] [size=512K]
    Kernel driver in use: e1000
    Kernel modules: e1000
  • Linux 核心日誌:您可以使用命令 dmesg 來顯示核心訊息,其中包含大多數所需的資訊。如果您將訊息儲存到 kernel.log,您可以檢查驅動程式和連結狀態。

    Harvester 將子網卡放入綁定介面中。在以下範例中,叢集中建立了一個名為 data-bo 的額外綁定介面。

    $ grep "(slave" kernel.log  (or: dmesg | grep "(slave")

    Jan 08 00:35:00 localhost kernel: mgmt-bo: (slave eno5): Enslaving as a backup interface with an up link
    Jan 08 00:35:00 localhost kernel: mgmt-bo: (slave ens4f0): Enslaving as a backup interface with an up link
    Jan 08 00:37:34 localhost kernel: data-bo: (slave eno6): Enslaving as a backup interface with an up link
    Jan 08 00:37:35 localhost kernel: data-bo: (slave ens4f1): Enslaving as a backup interface with an up link

    網卡已重新命名。

    $ grep "renamed" kernel.log

    Jan 08 00:34:48 localhost kernel: tg3 0000:02:00.0 eno1: renamed from eth2 // eth2 / eno1 未被 Harvester 使用
    Jan 08 00:34:48 localhost kernel: tg3 0000:02:00.3 eno4: renamed from eth6 // eth6 / eno4 未被 Harvester 使用
    Jan 08 00:34:48 localhost kernel: tg3 0000:02:00.2 eno3: renamed from eth5 // eth5 / eno3 未被 Harvester 使用
    Jan 08 00:34:48 localhost kernel: tg3 0000:02:00.1 eno2: renamed from eth3 // eth3 / eno2 未被 Harvester 使用
    Jan 08 00:34:49 localhost kernel: i40e 0000:5d:00.0 eno5: renamed from eth0
    Jan 08 00:34:49 localhost kernel: i40e 0000:af:00.0 ens4f0: renamed from eth4
    Jan 08 00:34:49 localhost kernel: i40e 0000:5d:00.1 eno6: renamed from eth1
    Jan 08 00:34:49 localhost kernel: i40e 0000:af:00.1 ens4f1: renamed from eth2

    eno5(0000:5d:00.0) 的網卡驅動程式是 (intel) i40e 10Gbps Full Duplex。

    $ grep "0000:5d:00.0" kernel.log

    Jan 08 00:34:47 localhost kernel: i40e 0000:5d:00.0: fw 8.71.63306 api 1.11 nvm 10.54.7 [8086:1572] [103c:22fc]
    Jan 08 00:34:47 localhost kernel: i40e 0000:5d:00.0: MAC address: 48:df:37:24:c2:00
    Jan 08 00:34:47 localhost kernel: i40e 0000:5d:00.0: FW LLDP is enabled
    Jan 08 00:34:47 localhost kernel: i40e 0000:5d:00.0 eth0: NIC Link is Up, 10 Gbps Full Duplex, Flow Control: None
    Jan 08 00:34:47 localhost kernel: i40e 0000:5d:00.0: PCI-Express: Speed 8.0GT/s Width x8
    Jan 08 00:34:47 localhost kernel: i40e 0000:5d:00.0: Features: PF-id[0] VFs: 64 VSIs: 66 QP: 112 RSS FD_ATR FD_SB NTUPLE DCB VxLAN Geneve PTP VEPA
    Jan 08 00:34:49 localhost kernel: i40e 0000:5d:00.0 eno5: renamed from eth0

    偵測到已啟用的網卡。

    $ grep "is Up" kernel.log

    Jan 08 00:34:47 localhost kernel: i40e 0000:5d:00.0 eth0: NIC Link is Up, 10 Gbps Full Duplex, Flow Control: None
    Jan 08 00:34:48 localhost kernel: i40e 0000:5d:00.1 eth1: NIC Link is Up, 10 Gbps Full Duplex, Flow Control: None
    Jan 08 00:34:48 localhost kernel: i40e 0000:af:00.0 eth4: NIC Link is Up, 10 Gbps Full Duplex, Flow Control: None
    Jan 08 00:34:49 localhost kernel: i40e 0000:af:00.1 eth2: NIC Link is Up, 10 Gbps Full Duplex, Flow Control: None

啟用維護模式​

  1. (選填)停止無法或不得遷移的 VM。

  2. 在目標節點上啟用維護模式,以自動將所有 VM 遷移到其他節點。

  • 等待一切就緒,然後重複更換前檢查章節中的步驟。

  • 在以下情況下手動停止 VM:

    • VM 遷移失敗。

    • VM 具有阻止其遷移到其他節點的選擇器。

    • VM 具有阻止其遷移到其他節點的特殊硬體(例如,PCI 直通或 vGPU)。

(選填)更新網路配置​

Harvester 上的每個叢集網路下都有一個或多個網路配置。每個 Network Config 都由一個 VlanConfig CRD 物件支援。

important

如果新網卡將被放置在不同的實體插槽中或將具有不同的上行鏈路參數,則必須更新 Network Config。

  1. 檢查節點。

    當 Harvester 叢集節點屬於某個 Network Config 時,Node 物件會有一個鍵為 network.harvesterhci.io/vlanconfig 的標籤。

    範例:

    apiVersion: v1
    kind: Node
    metadata:
    labels:
    ...
    network.harvesterhci.io/vlanconfig: vlan123
  2. 從 Network Config 中移除此節點。

    當新網卡被放置在不同的插槽中時,您必須更改 Network Config 以排除此節點。如果 Network Config 物件僅從 nodeSelector 選擇此節點,您可以刪除 VlanConfig。

    範例:

    apiVersion: network.harvesterhci.io/v1beta1
    kind: VlanConfig
    spec:
    clusterNetwork: data
    nodeSelector:
    kubernetes.io/hostname: node123 // 選擇一個或多個節點
    uplink:
    bondOptions:
    miimon: 100
    mode: 802.3ad
    linkAttributes:
    mtu: 1500
    txQLen: -1
    nics:
    - enp0s1
    - enp0s2

    當 VM 仍在受影響的節點上執行時,網路 webhook 會傳回錯誤。

  3. 檢查 Node 物件。

    根據情況,標籤 network.harvesterhci.io/vlanconfig 會更改或被移除。

  4. 檢查 VlanStatus 物件。

    根據情況,VlanStatus 物件的 ready 條件狀態會更改為 "True",或者物件會被刪除。

    範例:

    apiVersion: network.harvesterhci.io/v1beta1
    kind: VlanStatus
    metadata:
    ...
    status:
    clusterNetwork: data
    conditions:
    - lastUpdateTime: "2024-02-03T18:32:41Z"
    status: "True"
    type: ready
    linkMonitor: public
    localAreas:
    - cidr: 10.190.186.0/24
    vlanID: 2013
    node: node123
    vlanConfig: vlan123

(選填)排空節點​

您可能會發現,即使在完成先前概述的程序後,某些 Longhorn 副本仍在節點上保持活動狀態。

  1. 排空節點。(這在 Harvester 中是選填的。)

    • 場景 1:所有磁碟區的 numReplicas 值為 3,這意味著每個 Longhorn 磁碟區有三個活動副本。

      Longhorn 引擎識別到它無法再與已排空節點上的副本通訊,然後將該副本標記為失敗。所有副本對 Longhorn 來說都沒有特殊意義,因此只要它能與至少一個副本通訊,它就能正常運作。

    • 場景 2:某些 Longhorn 磁碟區的活動副本少於三個,或者您使用 Harvester UI 或 Longhorn UI 手動附加了磁碟區。

      您必須手動分離副本或將它們移動到其他節點,然後使用命令 kubectl drain --ignore-daemonsets <node name> 排空節點。選項 --ignore-daemonsets 是必需的,因為 Longhorn 部署了 daemonsets,例如 Longhorn Manager、Longhorn CSI 外掛程式和 Longhorn Engine image。

      在節點上執行的副本會停止並標記為 Failed。在節點上執行的 Longhorn Engine 程序會隨著 pod 遷移到其他節點。節點完全排空後,該節點上應該不會有任何副本和引擎程序在執行。

  2. 補充副本。

    節點關閉後,Longhorn 不會在其他節點上開始重建副本,直到達到 replica-replenishment-wait-interval(預設值:600 秒)。如果節點在等待間隔值達到之前重新上線,Longhorn 會重用副本。否則,Longhorn 會在另一個節點上重建副本。

    在系統維護期間,您可以使用嵌入式 Longhorn UI 修改 replica-replenishment-wait-interval 值,以啟用更快的副本重建。

    Harvester v1.3.0 使用 Longhorn v1.6.0,而 Harvester v1.2.1 使用 Longhorn v1.4.3。

更換網卡​

  1. 關閉節點。

  2. 更換網卡。

  3. 重新啟動節點。

  4. 收集當前網路配置和狀態的資訊。

如果您觀察到任何異常,請產生支援套件以供故障排除之用。

(選填)再次更新網路配置​

important

如果新網卡將被放置在不同的實體插槽中,則必須更新 Network Config。

  1. 將節點添加到 Network Config。

    您必須建立新的 Network Config 或更改 Network Config 以包含此節點。

  2. 檢查 Node 物件。

    標籤 network.harvesterhci.io/vlanconfig 反映所使用的特定 Network Config。

  3. 檢查 VlanStatus 物件。

    VlanStatus 物件的 ready 條件狀態會更改為 "True"。

停用維護模式​

  1. 等待節點移回叢集。

  2. 停用維護模式。

  3. (選填)啟動您手動停止的 VM。

  4. (選填)手動遷移 VM 到此節點。

故障排除​

Harvester 使用多個網路相關的 pod 和 CRD。在故障排除時,檢查 pod 日誌和 CRD 物件的狀態。

Pod:

$ kubectl get pods -n harvester-system
NAME READY STATUS RESTARTS AGE
harvester-network-controller-cnf22 1/1 Running 2 (60m ago) 3d22h // 網路控制器代理 daemonSet,部署在每個節點中
harvester-network-controller-manager-859c4bd874-xcllf 1/1 Running 2 (60m ago) 3d22h // 網路控制器
harvester-network-webhook-56b877d5d5-z42dp 1/1 Running 2 (60m ago) 3d22h

CRD:

clusternetworks.network.harvesterhci.io
linkmonitors.network.harvesterhci.io
vlanconfigs.network.harvesterhci.io
vlanstatuses.network.harvesterhci.io