802.3adプロトコルを使用してeno1, eno2, eno3, eno4
という名前の4つのハードウェアイーサネットポートを結合するように、Ubuntu 18.04サーバーでネットプランを構成する際に問題が発生します。 netplan man page を参照し、次の構成ファイル/etc/netplan/50-cloud-init.yaml
をまとめました。
network:
version: 2
renderer: networkd
ethernets:
eports:
match:
name: eno*
bonds:
bond0:
interfaces: [eports]
addresses: [192.168.1.101/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
コマンドSudo netplan --debug apply
を実行すると、次の情報を受け取ります。
** (generate:6473): DEBUG: 00:39:14.911: Processing input file //etc/netplan/50-cloud-init.yaml..
** (generate:6473): DEBUG: 00:39:14.911: starting new processing pass
** (generate:6473): DEBUG: 00:39:14.911: eports: setting default backend to 1
** (generate:6473): DEBUG: 00:39:14.911: bond0: setting default backend to 1
** (generate:6473): DEBUG: 00:39:14.912: Generating output files..
** (generate:6473): DEBUG: 00:39:14.912: NetworkManager: definition eports is not for us (backend 1)
** (generate:6473): DEBUG: 00:39:14.912: NetworkManager: definition bond0 is not for us (backend 1)
DEBUG:netplan generated networkd configuration exists, restarting networkd
DEBUG:no netplan generated NM configuration exists
DEBUG:device eno2 operstate is up, not replugging
DEBUG:netplan triggering .link rules for eno2
DEBUG:device lo operstate is unknown, not replugging
DEBUG:netplan triggering .link rules for lo
DEBUG:replug eno3: unbinding 0000:03:00.0 from /sys/bus/pci/drivers/igb
DEBUG:replug eno3: rebinding 0000:03:00.0 to /sys/bus/pci/drivers/igb
DEBUG:replug eno1: unbinding 0000:01:00.0 from /sys/bus/pci/drivers/igb
DEBUG:replug eno1: rebinding 0000:01:00.0 to /sys/bus/pci/drivers/igb
DEBUG:Cannot replug bond0: cannot read link /sys/class/net/bond0/device: [Errno 2] No such file or directory: '/sys/class/net/bond0/device'
DEBUG:netplan triggering .link rules for bond0
DEBUG:replug eno4: unbinding 0000:04:00.0 from /sys/bus/pci/drivers/igb
DEBUG:replug eno4: rebinding 0000:04:00.0 to /sys/bus/pci/drivers/igb
声明をどうするかわからない
Cannot replug bond0: cannot read link /sys/class/net/bond0/device: [Errno 2] No such file or directory: '/sys/class/net/bond0/device'
ディレクトリ/sys/class/net/bond0
はnetplan apply
コマンドによって生成されたためです。
ifconfig
出力を確認しましたが、bond0
にアドレスが設定されていないことを除いて、ネットワークデバイスが正しく構成されているようです。
bond0: flags=5123<UP,BROADCAST,MASTER,MULTICAST> mtu 1500
ether XX:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet)
RX packets 112768 bytes 7785014 (7.7 MB)
RX errors 0 dropped 54 overruns 0 frame 0
TX packets 18854 bytes 2337896 (2.3 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eno1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether XX:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet)
RX packets 290 bytes 19322 (19.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55 bytes 6820 (6.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xdf400000-df47ffff
eno2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether XX:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet)
RX packets 73991 bytes 29824155 (29.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20848 bytes 2110417 (2.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xdf300000-df37ffff
eno3: flags=6147<UP,BROADCAST,SLAVE,MULTICAST> mtu 1500
ether XX:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xdf200000-df27ffff
eno4: flags=6147<UP,BROADCAST,SLAVE,MULTICAST> mtu 1500
ether XX:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xdf100000-df17ffff
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<Host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2923 bytes 184477 (184.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2923 bytes 184477 (184.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ether XX:XX:XX:XX:XX:XX
ステートメントは、各インターフェイスのMACアドレスの代わりにあります。元の出力では、すべてのアドレスは同じです。
システムを正常に構成するために何が欠けていますか?
掘り下げた後、Ubuntu 18.04はcloud-init
というユーティリティを使用して、ブートシーケンス中にネットワーク構成と初期化を処理することを発見しました。ファイル/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg
およびその他の.cfg
ファイルは、cloud-init
設定の再構成に使用されます。私の設定ファイルの設定は次のとおりです。
network:
version: 2
ethernets:
eports:
match:
name: eno*
optional: true
bonds:
bond0:
interfaces: [eports]
addresses: [192.168.1.101/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
optional: true
パラメーターは、起動時にシステムが有効なネットワーク接続を待機するのを防ぎます。これにより、マシンが起動するまで2分間待機する手間が省けます。構成ファイルを更新した後、次のコマンドを実行して構成を更新します。
cloud-init clean -reboot
または、次を実行すると、マシンを再起動せずにデバッグ情報を取得できます。ただし、初期ブート段階で変更をコミットするには再起動が必要です。
cloud-init clean
cloud-init init
cloud-init status
Netplan.ioサイトは、cloud-initがnetplanによって構成されたいくつかのユーティリティの1つであることを示しているようです。ネットプランの問題は、後でボンディングする物理インターフェイスを指定するときにdhcp4 = falseを指定する必要があることです。そうしないと、アドレスが結合される前にDHCPによって個々のインターフェースに接続される場合があります。したがって、ボンディング時には、既存のIPロジックとの競合があります。
DHCPプロセスが発生する前にインターフェイスを結合することにより、cloud-init(ブートシーケンスの早い方?)の回避策が機能する可能性があります。または、clean/initシーケンスを使用してDHCPアドレスをリセットし、DHCPプロセスを再適用する前に結合します。ただし、これは、メンテナがブートロジック/シーケンスに少しでも変更を加えると、回避策が機能しなくなる可能性があることを意味します。