Auf dieser Seite wird der spezielle Kubernetes-Operator für Netzwerkfunktionen beschrieben, der in Google Distributed Cloud connected enthalten ist. Dieser Operator implementiert eine Reihe von CustomResourceDefinitions (CRDs), mit denen Distributed Cloud connected leistungsstarke Arbeitslasten ausführen kann.
Der Operator für Netzwerkfunktionen und die SR-IOV-Funktionalität sind auf Distributed Cloud connected-Servern nicht verfügbar.
Mit dem Operator für Netzwerkfunktionen können Sie Folgendes tun:
- Nach vorhandenen Netzwerkgeräten auf einem Knoten suchen.
- Den IP-Adress- und physischen Linkstatus für jedes Netzwerkgerät auf einem Knoten abfragen.
- Zusätzliche Netzwerkschnittstellen auf einem Knoten bereitstellen.
- Systemfunktionen auf niedriger Ebene auf der physischen Maschine des Knotens konfigurieren, die zur Unterstützung leistungsstarker Arbeitslasten erforderlich sind.
- Die Single-Root-E/A-Virtualisierung (SR-IOV) auf PCI Express-Netzwerkschnittstellen verwenden, um sie in mehrere virtuelle Schnittstellen zu virtualisieren. Anschließend können Sie Ihre Distributed Cloud connected-Arbeitslasten so konfigurieren, dass sie diese virtuellen Netzwerkschnittstellen verwenden.
Die Unterstützung von SR-IOV in Distributed Cloud connected basiert auf den folgenden Open-Source-Projekten:
Vorbereitung
Der Operator für Netzwerkfunktionen ruft die Netzwerkkonfiguration von der Distributed Cloud Edge Network API ab.
Dazu müssen Sie dem Dienstkonto des Operators für Netzwerkfunktionen mit dem folgenden Befehl die Rolle „Edge Network Viewer“ (roles/edgenetwork.viewer) zuweisen:
gcloud projects add-iam-policy-binding PROJECT_ID \ --role roles/edgenetwork.viewer \ --member "serviceAccount:PROJECT_ID.svc.id.goog[nf-operator/nf-angautomator-sa]"
Ersetzen Sie PROJECT_ID durch die ID des Ziel Google Cloud projekts.
Ressourcen des Operators für Netzwerkfunktionen
Der Operator für Netzwerkfunktionen von Distributed Cloud connected implementiert die folgenden Kubernetes-CRDs:
Network. Definiert ein virtuelles Netzwerk, das Pods für die Kommunikation mit internen und externen Ressourcen verwenden können. Sie müssen das entsprechende VLAN mit der Distributed Cloud Edge Network API erstellen, bevor Sie es in dieser Ressource angeben. Eine Anleitung finden Sie unter Netzwerk erstellen.NetworkInterfaceState. Ermöglicht die Ermittlung von Netzwerkschnittstellenstatus und das Abfragen einer Netzwerkschnittstelle nach Linkstatus und IP-Adresse.NodeSystemConfigUpdate. Ermöglicht die Konfiguration von Systemfunktionen auf niedriger Ebene wie Kerneloptionen undKubelet-Flags.SriovNetworkNodePolicy. Wählt eine Gruppe von SR-IOV-virtualisierten Netzwerkschnittstellen aus und instanziiert die Gruppe als Kubernetes-Ressource. Sie können diese Ressource in einerNetworkAttachmentDefinition-Ressource verwenden.SriovNetworkNodeState. Ermöglicht das Abfragen des Bereitstellungsstatus derSriovNetworkNodePolicy-Ressource auf einem Distributed Cloud-Knoten.NetworkAttachmentDefinition. Ermöglicht das Anhängen von Distributed Cloud-Pods an ein oder mehrere logische oder physische Netzwerke auf Ihrem Distributed Cloud connected-Knoten. Sie müssen das entsprechende VLAN mit der Distributed Cloud Edge Network API erstellen, bevor Sie es in dieser Ressource angeben. Eine Anleitung finden Sie unter Netzwerk erstellen.
Mit dem Operator für Netzwerkfunktionen können Sie auch sekundäre Netzwerkschnittstellen definieren, die keine SR-IOV-Virtualisierungsfunktionen verwenden.
Network-Ressource
Die Network-Ressource definiert ein virtuelles Netzwerk im Distributed Cloud connected-Rack, das Pods in Ihrem Distributed Cloud connected-Cluster für die Kommunikation mit internen und externen Ressourcen verwenden können.
Die Network-Ressource bietet die folgenden konfigurierbaren Parameter für die Netzwerkschnittstelle, die als beschreibbare Felder verfügbar sind:
spec.type: gibt die Netzwerktransportschicht für dieses Netzwerk an. Der einzige gültige Wert istL2. Sie müssen auch einen Wert fürnodeInterfaceMatcher.interfaceNameangeben.spec.nodeInterfaceMatcher.interfaceName: der Name der physischen Netzwerkschnittstelle auf dem Zielknoten von Distributed Cloud connected, die mit diesem Netzwerk verwendet werden soll.spec.gateway4: die IP-Adresse des Netzwerk-Gateways für dieses Netzwerk.spec.l2NetworkConfig.prefixLength4: gibt den CIDR-Bereich für dieses Netzwerk an.annotations.networking.gke.io/gdce-vlan-id: gibt die VLAN-ID für dieses Netzwerk an.annotations.networking.gke.io/gdce-vlan-mtu: (optional) gibt den MTU-Wert für dieses Netzwerk an. Wenn dieser Wert nicht angegeben wird, wird der MTU-Wert von der übergeordneten Schnittstelle übernommen.annotations.networking.gke.io/gdce-lb-service-vip-cidr: gibt den Bereich der virtuellen IP-Adressen für den Load-Balancing-Dienst an. Der Wert kann ein CIDR-Block oder ein expliziter Adressbereichswert sein. Diese Annotation ist für Layer 3 obligatorisch und für Layer 2 optional.
Das folgende Beispiel veranschaulicht die Struktur der Ressource:
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: vlan200-network
annotations:
networking.gke.io/gdce-vlan-id: 200
networking.gke.io/gdce-vlan-mtu: 1500
networking.gke.io/gdce-lb-service-vip-cidrs: "10.1.1.0/24"
spec:
type: L2
nodeInterfaceMatcher:
interfaceName: gdcenet0.200
gateway4: 10.53.0.1
Wenn Sie mehrere Bereiche virtueller IP-Adressen für den Load-Balancing-Dienst angeben möchten, verwenden Sie die Annotation networking.gke.io/gdce-lb-service-vip-cidrs. Sie können die Werte für diese Annotation entweder als durch Kommas getrennte Liste oder als JSON-Nutzlast angeben.
Beispiel:
[
{
"name": "test-oam-3",
"addresses": ["10.235.128.133-10.235.128.133"],
"autoAssign": false
}
,
{
"name": "test-oam-4",
"addresses": ["10.235.128.134-10.235.128.134"],
"autoAssign": false
},
{
"name": "test-oam-5",
"addresses": ["10.235.128.135-10.235.128.135"],
"autoAssign": false
}
]
Wenn Sie eine JSON-Nutzlast verwenden, empfehlen wir das komprimierte JSON-Format. Beispiel:
apiVersion: networking.gke.io/v1
kind: Network
metadata:
annotations:
networking.gke.io/gdce-lb-service-vip-cidrs: '[{"name":"test-oam-3","addresses":["10.235.128.133-10.235.128.133"],"autoAssign":false},{"name":"test-oam-4","addresses":["10.235.128.134-10.235.128.134"],"autoAssign":false},{"name":"test-oam-5","addresses":["10.235.128.135-10.235.128.135"],"autoAssign":false}]'
networking.gke.io/gdce-vlan-id: "81"
name: test-network-vlan81
spec:
IPAMMode: Internal
dnsConfig:
nameservers:
- 8.8.8.8
gateway4: 192.168.81.1
l2NetworkConfig:
prefixLength4: 24
nodeInterfaceMatcher:
interfaceName: gdcenet0.81
type: L2
Beachten Sie, dass das Feld autoAssign standardmäßig auf false gesetzt ist, wenn es nicht angegeben wird.
NetworkInterfaceState-Ressource
Die NetworkInterfaceState-Ressource ist eine schreibgeschützte Ressource, mit der Sie physische Netzwerkschnittstellen auf dem Knoten ermitteln und Laufzeitstatistiken zum Netzwerk-Traffic erfassen können, der über diese Schnittstellen fließt.
Distributed Cloud erstellt für jeden Knoten in einem Cluster eine NetworkInterfaceState-Ressource.
Die Standardkonfiguration von Distributed Cloud connected-Maschinen umfasst eine gebundene Netzwerkschnittstelle auf der Rack Select Network Daughter Card (rNDC) mit dem Namen gdcenet0. Diese Schnittstelle bindet die Netzwerkschnittstellen eno1np0 und eno2np1. Jede davon ist mit einem Distributed Cloud ToR-Switch verbunden.
Die NetworkInterfaceState-Ressource bietet die folgenden Kategorien von Netzwerkschnittstelleninformationen, die als schreibgeschützte Statusfelder verfügbar sind.
Allgemeine Informationen:
status.interfaces.ifname: der Name der Zielnetzwerkschnittstelle.status.lastReportTime: die Uhrzeit und das Datum des letzten Statusberichts für die Zielschnittstelle.
Informationen zur IP-Adresskonfiguration:
status.interfaces.interfaceinfo.address: die der Zielschnittstelle zugewiesene IP-Adresse.status.interfaces.interfaceinfo.dns: die IP-Adresse des DNS-Servers, der der Zielschnittstelle zugewiesen ist.status.interfaces.interfaceinfo.gateway: die IP-Adresse des Netzwerk-Gateways, das die Zielschnittstelle bedient.status.interfaces.interfaceinfo.prefixlen: die Länge des IP-Präfixes.
Hardwareinformationen:
status.interfaces.linkinfo.broadcast: die Broadcast-MAC-Adresse der Zielschnittstelle.status.interfaces.linkinfo.businfo: der PCIe-Gerätepfad im Formatbus:slot.function.status.interfaces.linkinfo.flags: die Schnittstellen-Flags, z. B.BROADCAST.status.interfaces.linkinfo.macAddress: die Unicast-MAC-Adresse der Zielschnittstelle.status.interfaces.linkinfo.mtu: der MTU-Wert für die Zielschnittstelle.
Empfangsstatistiken:
status.interfaces.statistics.rx.bytes: die Gesamtzahl der von der Zielschnittstelle empfangenen Byte.status.interfaces.statistics.rx.dropped: die Gesamtzahl der von der Zielschnittstelle verworfenen Pakete.status.interfaces.statistics.rx.errors: die Gesamtzahl der Paketempfangsfehler für die Zielschnittstelle.status.interfaces.statistics.rx.multicast: die Gesamtzahl der von der Zielschnittstelle empfangenen Multicast-Pakete.status.interfaces.statistics.rx.overErrors: die Gesamtzahl der Paketempfangsfehler für die Zielschnittstelle.status.interfaces.statistics.rx.packets: die Gesamtzahl der von der Zielschnittstelle empfangenen Pakete.
Übertragungsstatistiken:
status.interfaces.statistics.tx.bytes: die Gesamtzahl der von der Zielschnittstelle übertragenen Byte.status.interfaces.statistics.tx.carrierErrors: die Gesamtzahl der von der Zielschnittstelle erkannten Carrier-Fehler.status.interfaces.statistics.tx.collisions: die Gesamtzahl der von der Zielschnittstelle erkannten Paketkollisionen.status.interfaces.statistics.tx.dropped: die Gesamtzahl der von der Zielschnittstelle verworfenen Pakete.status.interfaces.statistics.tx.errors: die Gesamtzahl der Übertragungsfehler für die Zielschnittstelle.status.interfaces.statistics.tx.packets: die Gesamtzahl der von der Zielschnittstelle übertragenen Pakete.
Das folgende Beispiel veranschaulicht die Struktur der Ressource:
apiVersion: networking.gke.io/v1
kind: NetworkInterfaceState
metadata:
name: MyNode1
nodeName: MyNode1
status:
interfaces:
- ifname: eno1np0
linkinfo:
businfo: 0000:1a:00.0
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 1098522811
errors: 2
multicast: 190926
packets: 4988200
tx:
bytes: 62157709961
packets: 169847139
- ifname: eno2np1
linkinfo:
businfo: 0000:1a:00.1
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 33061895405
multicast: 110203
packets: 110447356
tx:
bytes: 2370516278
packets: 11324730
- ifname: enp95s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf4
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f4
mtu: 9000
statistics:
rx:
bytes: 37858381
multicast: 205645
packets: 205645
tx:
bytes: 1207334
packets: 6542
- ifname: enp95s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf5
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f5
mtu: 9000
statistics:
rx:
bytes: 37852406
multicast: 205607
packets: 205607
tx:
bytes: 1207872
packets: 6545
- ifname: enp134s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6c
prefixlen: 64
linkinfo:
businfo: 0000:86:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6c
mtu: 9000
statistics:
rx:
bytes: 37988773
multicast: 205584
packets: 205584
tx:
bytes: 1212385
packets: 6546
- ifname: enp134s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6d
prefixlen: 64
linkinfo:
businfo: 0000:86:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6d
mtu: 9000
statistics:
rx:
bytes: 37980702
multicast: 205548
packets: 205548
tx:
bytes: 1212297
packets: 6548
- ifname: gdcenet0
interfaceinfo:
- address: 208.117.254.36
prefixlen: 28
- address: fe80::b816:3ff:fe9e:9c87
prefixlen: 64
linkinfo:
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 34160422968
errors: 2
multicast: 301129
packets: 115435591
tx:
bytes: 64528301111
packets: 181171964
.. <remaining interfaces omitted>
lastReportTime: "2022-03-30T07:35:44Z"
NodeSystemConfigUpdate-Ressource
Mit der NodeSystemConfigUpdate-Ressource können Sie Änderungen an der Betriebssystemkonfiguration des Knotens vornehmen und Kubelet-Flags ändern. Andere Änderungen als sysctl-Änderungen erfordern einen Neustart des Knotens.
Beim Instanziieren dieser Ressource müssen Sie die Zielknoten im Feld nodeSelector angeben. Sie müssen alle Schlüssel/Wert-Paare für jeden Zielknoten im Feld nodeSelector angeben. Wenn Sie in diesem Feld mehr als einen Zielknoten angeben, werden die Zielknoten einzeln aktualisiert.
ACHTUNG: Das Feld nodeName wurde eingestellt. Wenn Sie es verwenden, werden die Zielknoten sofort neu gestartet, einschließlich der lokalen Knoten der Steuerungsebene, was zu einem Stillstand kritischer Arbeitslasten führen kann.
Die NodeSystemConfigUpdate-Ressource bietet die folgenden Konfigurationsfelder, die speziell für Distributed Cloud connected gelten:
spec.containerRuntimeDNSConfig.ip: gibt eine Liste von IP-Adressen für private Image-Registries an.spec.containerRuntimeDNSConfig: gibt eine Liste benutzerdefinierter DNS-Einträge an, die von der Container Runtime Environment auf jedem Distributed Cloud connected-Knoten verwendet werden. Jeder Eintrag besteht aus den folgenden Feldern:ip: gibt die Ziel-IPv4-Adresse an,domain: gibt die entsprechende Domain an,interface: gibt die Schnittstelle für ausgehenden Netzwerk-Traffic an, über die die im Feldipangegebene IP-Adresse erreichbar ist. Sie können eine Schnittstelle angeben, die über die folgenden Ressourcen definiert ist:CustomNetworkInterfaceConfig,Network(per Annotation),NetworkAttachmentDefinition, (per Annotation). Dies ist eine Funktion auf Vorabversionsebene.
spec.kubeletConfig.cpuManagerPolicy: gibt die Kubernetes-CPUManager-Richtlinie an. Gültige Werte sindNoneundStatic.spec.kubeletConfig.topologyManagerPolicy: gibt die Kubernetes-TopologyManager-Richtlinie an. Gültige Werte sindNone,BestEffort,RestrictedundSingleNumaMode.spec.osConfig.hugePagesConfig: gibt die Konfiguration für Hugepages pro NUMA-Knoten an. Gültige Werte sind2MBund1GB. Die Anzahl der angeforderten Hugepages wird gleichmäßig auf beide NUMA-Knoten im System verteilt. Wenn Sie beispielsweise 16 Hugepages mit jeweils 1 GB zuweisen, erhält jeder Knoten eine Vorabzuweisung von 8 GB.spec.osConfig.isolatedCpusPerSocket: gibt die Anzahl der isolierten CPUs pro Socket an. Erforderlich, wenncpuManagerPolicyaufStaticgesetzt ist. Die maximale Anzahl isolierter CPUs muss weniger als 80% der Gesamtzahl der CPUs im Knoten betragen.spec.osConfig.cpuIsolationPolicy: gibt die Richtlinie zur CPU-Isolation an. Die RichtlinieDefaultisoliert nursystemd-Aufgaben von CPUs, die für Arbeitslasten reserviert sind. DieKernelRichtlinie markiert die CPUs alsisolcpusund legt diercu_nocb,nohz_fullundrcu_nocb_pollFlags auf jeder CPU fest.spec.sysctls.NodeLevel: gibt diesysctls-Parameter an, die Sie mit dem Operator für Netzwerkfunktionen global auf einem Knoten konfigurieren können. Die konfigurierbaren Parameter sind:fs.inotify.max_user_instancesfs.inotify.max_user_watcheskernel.sched_rt_runtime_uskernel.core_patternnet.ipv4.tcp_wmemnet.ipv4.tcp_rmemnet.ipv4.tcp_slow_start_after_idlenet.ipv4.udp_rmem_minnet.ipv4.udp_wmem_minnet.ipv4.tcp_rmemnet.ipv4.tcp_wmemnet.core.rmem_maxnet.core.wmem_maxnet.core.rmem_defaultnet.core.wmem_defaultnet.netfilter.nf_conntrack_tcp_timeout_unacknowledgednet.netfilter.nf_conntrack_tcp_timeout_max_retransnet.sctp.auth_enablenet.sctp.sctp_memnet.ipv4.udp_memnet.ipv4.tcp_memnet.ipv4.tcp_slow_start_after_idlenet.sctp.auth_enablevm.max_map_count
Mit dem CNI-Plug-in (Container Networking Interface)
tuningkönnen Sie auch sichere und unsicheresysctlsParameter auf einen bestimmten Pod oder Namespace beschränken.
Die NodeSystemConfigUpdate-Ressource bietet die folgenden schreibgeschützten allgemeinen Statusfelder:
status.lastReportTime: die letzte Uhrzeit, zu der der Status für die Zielschnittstelle gemeldet wurde.status.conditions.lastTransitionTime: die letzte Uhrzeit, zu der sich der Status der Schnittstelle geändert hat.status.conditions.observedGeneration: gibt den Wert.metadata.generationan, auf dem die ursprüngliche Bedingung basiert.status.conditions.message: eine informative Nachricht, die die Änderung des Status der Schnittstelle beschreibt.status.conditions.reason: eine programmatische Kennung, die den Grund für die letzte Änderung des Status der Schnittstelle angibt.status.conditions.status: der Statusdeskriptor der Bedingung. Gültige Werte sindTrue,FalseundUnknown.status.conditions.type: der Bedingungstyp im Binnenmajuskelformat.
Das folgende Beispiel veranschaulicht die Struktur der Ressource:
apiVersion: networking.gke.io/v1
kind: NodeSystemConfigUpdate
metadata:
name: node-pool-1-config
namespace: default
spec:
nodeSelector:
baremetal.cluster.gke.io/node-pool: node-pool-1
networking.gke.io/worker-network-sriov.capable: true
sysctls:
nodeLevel:
"net.ipv4.udp_mem" : "12348035 16464042 24696060"
kubeletConfig:
topologyManagerPolicy: BestEffort
cpuManagerPolicy: Static
osConfig:
hugePagesConfig:
"TWO_MB": 0
"ONE_GB": 16
isolatedCpusPerSocket:
"0": 10
"1": 10
SriovNetworkNodePolicy-Ressource
Mit der SriovNetworkNodePolicy-Ressource können Sie eine Gruppe von SR-IOV-Virtualisierungsfunktionen (VFs) auf einer physischen Maschine von Distributed Cloud connected zuweisen und diese Gruppe als Kubernetes-Ressource instanziieren. Anschließend können Sie diese Ressource in einer NetworkAttachmentDefinition-Ressource verwenden.
Sie können jede Ziel-VF anhand des PCIe-Anbieters und der Geräte-ID, der PCIe-Geräteadressen oder des unter Linux aufgeführten Gerätenamens auswählen. Der SR-IOV Network Operator konfiguriert jede physische Netzwerkschnittstelle, um die Ziel-VFs bereitzustellen. Dazu gehört das Aktualisieren der Firmware der Netzwerkschnittstelle, das Konfigurieren des Linux-Kerneltreibers und gegebenenfalls das Neustarten der Distributed Cloud connected-Maschine.
Um die auf Ihrem Knoten verfügbaren Netzwerkschnittstellen zu ermitteln, können Sie die
NetworkInterfaceState Ressourcen
auf diesem Knoten im nf-operator Namespace suchen.
Das folgende Beispiel veranschaulicht die Struktur der Ressource:
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodePolicy
metadata:
name: mlnx6-p2-sriov-en2
namespace: sriov-network-operator
spec:
deviceType: netdevice
isRdma: true
mtu: 9000
nicSelector:
pfNames:
- enp134s0f1np1
nodeSelector:
edgecontainer.googleapis.com/network-sriov.capable: "true"
numVfs: 31
priority: 99
resourceName: mlnx6_p2_sriov_en2
Im vorherigen Beispiel werden maximal 31 VFs vom zweiten Port auf der Netzwerkschnittstelle mit dem Namen enp134s0f1np1 mit einem MTU-Wert von 9000 (dem maximal zulässigen Wert) erstellt. Verwenden Sie das Knotenauswahllabel edgecontainer.googleapis.com/network-sriov.capable, das auf allen Distributed Cloud connected-Knoten vorhanden ist, die SR-IOV unterstützen.
Informationen zur Verwendung dieser Ressource finden Sie unter
SriovNetworkNodeState.
SriovNetworkNodeState-Ressource
Mit der schreibgeschützten SriovNetworkNodeState-Ressource können Sie den Bereitstellungsstatus der SriovNetworkNodePolicy-Ressource auf einem Distributed Cloud connected-Knoten abfragen. Sie gibt die vollständige Konfiguration der SriovNetworkNodePolicy-Ressource auf dem Knoten sowie eine Liste der aktiven VFs auf dem Knoten zurück. Das Feld status.syncStatus gibt an, ob alle für den Knoten definierten SriovNetworkNodePolicy-Ressourcen ordnungsgemäß angewendet wurden.
Das folgende Beispiel veranschaulicht die Struktur der Ressource:
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodeState
metadata:
name: MyNode1
namespace: sriov-network-operator
spec:
dpConfigVersion: "1969684"
interfaces:
- mtu: 9000
name: enp134s0f1np1
numVfs: 31
pciAddress: 0000:86:00.1
vfGroups:
- deviceType: netdevice
mtu: 9000
policyName: mlnx6-p2-sriov-en2
resourceName: mlnx6_p2_sriov_en2
vfRange: 0-30
status:
Status:
Interfaces:
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno1np0
Pci Address: 0000:1a:00.0
Vendor: 15b3
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno2np1
Pci Address: 0000:1a:00.1
Vendor: 15b3
Vfs:
- Vfs:
- deviceID: 101e
driver: mlx5_core
mac: c2:80:29:b5:63:55
mtu: 9000
name: enp134s0f1v0
pciAddress: 0000:86:04.1
vendor: 15b3
vfID: 0
- deviceID: 101e
driver: mlx5_core
mac: 7e:36:0c:82:d4:20
mtu: 9000
name: enp134s0f1v1
pciAddress: 0000:86:04.2
vendor: 15b3
vfID: 1
.. <omitted 29 other VFs here>
syncStatus: Succeeded
Informationen zur Verwendung dieser Ressource finden Sie unter
SriovNetworkNodeState.
NetworkAttachmentDefinition-Ressource
Mit der NetworkAttachmentDefinition-Ressource können Sie Distributed Cloud-Pods an ein oder mehrere logische oder physische Netzwerke auf Ihrem Distributed Cloud connected-Knoten anhängen. Dabei werden
das Multus-CNI-Framework
und die folgenden Plug-ins verwendet:
Verwenden Sie eine Annotation, um auf den Namen der entsprechenden SriovNetworkNodePolicy-Ressource zu verweisen. Gehen Sie beim Erstellen dieser Annotation so vor:
- Verwenden Sie den Schlüssel
k8s.v1.cni.cncf.io/resourceName. - Verwenden Sie das Präfix
gke.io/im Wert, gefolgt vom Namen der Ziel-SriovNetworkNodePolicy-Ressource.
Verwenden Sie die Annotation networking.gke.io/gdce-vlan-id, um die VLAN-ID für das Zielnetzwerk anzugeben. Diese Annotation ist obligatorisch.
Die folgenden Beispiele veranschaulichen die Struktur der Ressource. Für IPv4-Netzwerke.
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: sriov-net1
namespace: mynamespace
annotations:
k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p2_sriov_en2
networking.gke.io/gdce-vlan-id: 225
spec:
config: '{
"type": "sriov",
"cniVersion": "0.3.1",
"name": "sriov-network",
"ipam": {
"type": "host-local",
"subnet": "10.56.217.0/24",
"routes": [{
"dst": "0.0.0.0/0"
}],
"gateway": "10.56.217.1"
}
}'
Für IPv6-Netzwerke:
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: sriov-210-den102
annotations:
k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p0_sriov_en
networking.gke.io/gdce-vlan-id: 225
spec:
config: '{
"type": "sriov",
"cniVersion": "0.3.1",
"name": "sriov-210-den102",
"vlan": 210,
"ipam": {
"type": "host-local",
"rangeStart": "2001:4860:1025:102:ffff:0220::2",
"rangeEnd": "2001:4860:1025:102:ffff:0220::F",
"subnet": "2001:4860:1025:102:ffff:0220::/96",
"routes": [{
"dst": "::/0"
}],
"gateway": "2001:4860:1025:102:ffff:0220::1"
}
}'
Sekundäre Schnittstelle auf einem Pod mit SR-IOV-VFs konfigurieren
Nachdem Sie eine SriovNetworkNodePolicy-Ressource und eine entsprechende NetworkAttachmentDefinition-Ressource konfiguriert haben, können Sie eine sekundäre Netzwerkschnittstelle auf einem Distributed Cloud-Pod mit SR-IOV-Virtualisierungsfunktionen konfigurieren.
Fügen Sie dazu der Pod-Definition von Distributed Cloud eine Annotation hinzu:
- Schlüssel:
k8s.v1.cni.cncf.io/networks - Wert:
nameSpace/<NetworkAttachmentDefinition1,nameSpace/NetworkAttachmentDefinition2...
Das folgende Beispiel veranschaulicht diese Annotation:
apiVersion: v1
kind: pod
metadata:
name: sriovpod
annotations:
k8s.v1.cni.cncf.io/networks: mynamespace/sriov-net1
spec:
containers:
- name: sleeppodsriov
command: ["sh", "-c", "trap : TERM INT; sleep infinity & wait"]
image: alpine
securityContext:
capabilities:
add:
- NET_ADMIN
Sekundäre Schnittstelle auf einem Pod mit dem MacVLAN-Treiber konfigurieren
Distributed Cloud connected unterstützt auch das Erstellen einer sekundären Netzwerkschnittstelle auf einem Pod mit dem MacVLAN-Treiber. Nur die gdcenet0-Schnittstelle unterstützt diese Konfiguration und nur auf Pods, auf denen containerisierte Arbeitslasten ausgeführt werden.
So konfigurieren Sie eine Schnittstelle für die Verwendung des MacVLAN-Treibers:
Konfigurieren Sie eine
NetworkAttachmentDefinition-Ressource wie in den folgenden Beispielen gezeigt. Für IPv4-Netzwerke:apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-b400-1 annotations: networking.gke.io/gdce-vlan-id: 400 spec: config: '{ "type": "macvlan", "master": "gdcenet0.400", "ipam": { "type": "static", "addresses": [ { "address": "192.168.100.20/27", "gateway": "192.168.100.1" } ] ... } }'Für IPv6-Netzwerke:
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-bond0-210-den402 annotations: networking.gke.io/gdce-vlan-id spec: config: '{ "type": "macvlan", "cniVersion": "0.3.1", "name": "bond0-210", "master": "bond0.210", "ipam": { "type": "host-local", "rangeStart": "2001:4860:1025:102:0001:0210::2", "rangeEnd": "2001:4860:1025:102:0001:0210::F", "subnet": "2001:4860:1025:102:0001:0210::/96", "routes": [{ "dst": "::/0" }], "gateway": "2001:4860:1025:102:0001:0210::1" } }'Fügen Sie der Pod-Definition von Distributed Cloud eine Annotation hinzu: Für IPv4-Netzwerke:
apiVersion: v1 kind: pod metadata: name: macvlan-testpod1 annotations: k8s.v1.cni.cncf.io/networks: macvlan-b400-1Für IPv6-Netzwerke:
apiVersion: v1 kind: Pod metadata: name: vlan210-1 namespace: default annotations: k8s.v1.cni.cncf.io/networks: default/macvlan-bond0-210-den402
Sekundäre Schnittstelle auf einem Pod mit Multi-Networking von Distributed Cloud konfigurieren
Distributed Cloud connected unterstützt das Erstellen einer sekundären Netzwerkschnittstelle auf einem Pod mit der Multi-Networking-Funktion. Führen Sie dazu die folgenden Schritte aus:
Konfigurieren Sie eine
Network-Ressource. Beispiel:apiVersion: networking.gke.io/v1 kind: Network metadata: name: vlan200-network spec: type: L2 nodeInterfaceMatcher: interfaceName: vlan200-interface gateway4: 10.53.0.1Fügen Sie der Pod-Definition von Distributed Cloud eine Annotation hinzu:
apiVersion: v1 kind: pod metadata: name: mypod annotations: networking.gke.io/interfaces: '[{"interfaceName":"eth1","network":"vlan200-network"}]' networking.gke.io/default-interface: eth1 ...Nächste Schritte