Mehrere sekundäre VNICs für Podnetzwerke anhängen
Erfahren Sie, wie Sie mehrere sekundäre VNICs auf Worker-Knoten für Podnetworking mit Kubernetes Engine (OKE) anhängen und konfigurieren. Sie können einen Pod mit einer Anwendungsressource an ein einzelnes sekundäres VNIC-Profil pinnen oder mehrere Podschnittstellen mit Multus und NetworkAttachmentDefinitions (NADs) anhängen.
Durch das Anhängen mehrerer sekundärer VNICs an Worker-Knoten können Sie Podnetzwerke über verschiedene Subnetze und Sicherheitskontrollen hinweg segmentieren (z.B. Front-End-Pods auf einer sekundären VNIC/Subnetz/NSG und Backend-Pods auf einer anderen). Jedes sekundäre VNIC-Profil wird mit einem eigenen Pool von Pod-IP-Adressen (gesteuert durch ipCount) und Netzwerkeinstellungen (wie Subnetz und NSGs) konfiguriert. Optional können Sie ein sekundäres VNIC-Profil mit einem Namen der Anwendungsressource verknüpfen, damit Workloads dieses Profil explizit auswählen können.
Wenn Sie Anwendungsressourcen in sekundären VNIC-Profilen definieren, stellt Kubernetes Engine diese Anwendungsressourcen auf jedem Knoten als Kubernetes-Erweiterte Ressourcen (z.B. oke-application-resource.oci.oraclecloud.com/<resource-name>) bereit. Dabei wird die Knotenkapazität angegeben, wie viele Pod-IPs im entsprechenden sekundären VNIC-Profil verfügbar sind.
Pods können Anwendungsressourcen wie folgt verwenden:
-
Ein Pod kann eine einzelne Anwendungsressource (über eine Anforderung/ein Limit für erweiterte Ressourcen) anfordern, wenn dieser Pod ein sekundäres VNIC-Profil/eine Schnittstelle auswählen soll.
-
Knoten, die Anwendungsressourcen bereitstellen, werden (mit dem Taint
oci.oraclecloud.com/application-resource-only:NoSchedule) verfälscht, sodass Pods, die keine Anwendungsressource explizit anfordern, nicht auf diesen Knoten planen. Pods müssen eine entsprechende Toleranz enthalten. -
Die Planung muss die angeforderte Anwendungsressource erfüllen (der Knoten muss über ausreichende Kapazität für die angeforderte erweiterte Ressource verfügen).
-
Wenn Sie kein vom Scheduler erzwungenes Pinning für ein bestimmtes sekundäres VNIC-Profil benötigen, definieren Sie keine Anwendungsressource in den VNIC-Profilen. Pods, die zusätzliche Schnittstellen erfordern, müssen Multus und NetworkAttachmentDefinitions (NADs) verwenden, um diese Schnittstellen anzuhängen.
Die Verwendung mehrerer sekundärer VNICs für Podnetworking wird nur mit dem CNI-Plug-in für OCI-VCN-natives Podnetworking unterstützt. Mehrere sekundäre VNICs für Podnetworking werden nicht unterstützt, wenn das Flannel-CNI-Plug-In für Podnetworking verwendet wird. VNIC-Limits für Compute-Ausprägungen, Subnetz-/IP-Verfügbarkeit und NSG-Regellimits gelten weiterhin.
Wenn ein Pod eine Anwendungsressource anfordert, verläuft die Podplanung wie folgt:
-
Sie erstellen einen Pod, der eine einzelne Anwendungsressource anfordert (optional: nur, wenn der Pod mit einem auswählbaren sekundären VNIC-Profil gepinnt werden soll).
-
Bei der Zulassungsvalidierung wird die Podspezifikation geprüft, einschließlich der Gültigkeit der angeforderten Anwendungsressource und der angeforderten Menge.
-
Der Kubernetes-Scheduler wählt einen Knoten aus, der Kapazität für die angeforderte Anwendungsressource und verfügbare IPs im entsprechenden sekundären VNIC-Profil aufweist.
-
Das CNI-Plug-in für OCI-VCN-natives Podnetzwerk weist dem Pod aus dem ausgewählten sekundären VNIC-Profil eine IP-Adresse zu.
-
Der Pod verwendet das ausgewählte Profil/die ausgewählte Schnittstelle als primären Netzwerkpfad in diesem Planungsmodell.
Bevor Sie mehrere sekundäre VNICs für Podnetzwerke anhängen, stellen Sie Folgendes sicher:
-
Das Cluster verwendet ein VCN-natives Podnetzwerk.
-
Das VCN, die Subnetze und die NSGs sind für die gewünschte Segmentierung geplant (weil jedes sekundäre VNIC-Profil auf ein anderes Subnetz und eine andere Sicherheits-Policy verweisen kann).
-
Die Compute-Ausprägung, die für Worker-Knoten verwendet wird, unterstützt die erforderliche Anzahl von VNIC-Anhängen und die erwartete Poddichte.
-
Wenn Sie Multi-Interface-Pods benötigen, bestätigen Sie, dass Multus bereitgestellt ist und dass die erforderlichen CNI-Plug-ins auf Worker-Knoten vorhanden sind, und bestätigen Sie die erforderliche OCI-VCN-native CNI-Plug-in-Version für die Unterstützung mehrerer Schnittstellen in Ihrer Umgebung.
Kombinieren Sie Multus-Pod-Netzwerkannotationen nicht mit Anwendungsressourcenanforderungen auf Pod-Ebene in derselben Podspezifikation, da dadurch Planungs- und Schnittstellenauswahlkonflikte entstehen können. Wenn ein Pod mit mehreren Schnittstellen bestimmte sekundäre VNIC-Profile auswählen muss, definieren Sie diese Auswahl in der NAD-Konfiguration, anstatt eine Anwendungsressourcenanforderung auf Pod-Ebene zu verwenden. Beispiel: Verwenden Sie ein Feld deviceSelector, wie deviceSelector.appResource oder deviceSelector.interfaceName.
Sie können mehrere sekundäre VNICs für Podnetzwerke anhängen:
- Beim Erstellen eines neuen Knotenpools (entweder beim Erstellen eines neuen Clusters oder beim Hochskalieren eines vorhandenen Clusters).
- Beim Aktualisieren eines vorhandenen Knotenpools.
In beiden Fällen muss der Netzwerktyp des Clusters natives VCN-Pod-Networking sein. Für das Multi-Interface-Pod-Networking mit Multus ist auch die unterstützte OCI VCN-native CNI-Plug-in-Version für Ihre Umgebung erforderlich.
-
Befolgen Sie die Anweisungen zum Erstellen oder Aktualisieren eines verwalteten Knotenpools (siehe Verwalteten Knotenpool erstellen oder Verwalteten Knotenpool aktualisieren).
- Wenn Sie Details für den Knotenpool angeben:
- Verwenden Sie optional den Network Launch Type, um den Networkingstarttyp für das Worker-Knotennetzwerk auszuwählen. Wenn Sie keinen Wert auswählen, wird PARAVIRTUALIZED als Standardwert verwendet.
In den meisten Fällen wählen Sie PARAVIRTUALIZED. Wählen Sie VFIO nur dann aus, wenn die ausgewählte Ausprägung und das ausgewählte Image ein hardwaregestütztes SR-IOV-Netzwerk unterstützen und Ihre Workload dies erfordert. Wählen Sie E1000 nur aus, wenn dies aus Gründen der Kompatibilität mit einem Image oder einer Workload erforderlich ist, das/die paravirtualisierte Netzwerke nicht unterstützt. Die Unterstützung für jeden Starttyp hängt von der ausgewählten Compute-Ausprägung und dem ausgewählten Image ab.
- Wählen Sie Sekundäre VNICs für Knoten konfigurieren aus, und geben Sie wie folgt Details für das erste sekundäre VNIC-Profil an:
-
VNIC-Anhangsanzeigename: Optional. Geben Sie einen Anzeigenamen für den VNIC-Anhang an. Mit dem Anzeigenamen können Sie diesen VNIC-Anhang in der Knotenpoolkonfiguration identifizieren.
-
VNIC-Anzeigename: Optional. Geben Sie einen Anzeigenamen für die VNIC an. Mit dem Anzeigenamen können Sie die VNIC in Networking- und Compute-Ressourcen identifizieren.
-
NIC-Index: Optional. Geben Sie die physische NIC an, die für diesen VNIC-Anhang verwendet werden soll. Diese Option wird in der Regel auf Bare-Metal-Ausprägungen verwendet, wenn Sie VNICs auf bestimmten physischen NICs platzieren möchten. Beispiel: Sie richten den Workload-Datenverkehr an der verfügbaren NIC-Bandbreite aus. Wenn Sie keinen Wert angeben, verwendet Kubernetes Engine die Standardplatzierung für die ausgewählte Ausprägung und Konfiguration.
-
VNIC-Subnetz-Compartment: Geben Sie das Compartment an, das das Subnetz für diese VNIC enthält.
-
VNIC-Subnetz: Geben Sie das Subnetz für diese VNIC an. Das Subnetz bestimmt das Netzwerk, die Routentabelle, die Sicherheitsregeln und die IP-Adressfamilie, die für die VNIC verfügbar sind. Wählen Sie für Podnetzwerke ein Subnetz aus, das über genügend verfügbare IP-Adressen für die Anzahl der Pod-IPs verfügt, die Sie zuweisen möchten.
-
Öffentliche IP zu VNIC zuweisen: Optional. Geben Sie an, ob dieser VNIC eine öffentliche IPv4-Adresse zugewiesen werden soll. Diese Einstellung gilt nur für die VNIC. Öffentliche IP-Adressen werden Pods nicht zugewiesen, unabhängig davon, ob sich die VNIC in einem öffentlichen Subnetz oder einem privaten Subnetz befindet. In den meisten Pod-Networking-Designs lassen Sie diese Option deaktiviert. Wählen Sie diese Option nur aus, wenn das Subnetz öffentlich ist und Sie eine bestimmte Anforderung haben, dass die VNIC selbst eine öffentliche IP-Adresse hat. Stellen Sie sicher, dass Routentabellen und Sicherheitsregeln den Zugriff entsprechend einschränken.
-
IPv6-Adresse VNIC zuweisen: Optional. Geben Sie an, ob dieser VNIC eine IPv6-Adresse zugewiesen werden soll. Diese Option ist nur anwendbar, wenn das ausgewählte Subnetz IPv6 unterstützt.
-
Quell-/Zielprüfung überspringen: Optional. Geben Sie an, ob Quell-/Zielprüfungen für diese VNIC übersprungen werden sollen. Aktivieren Sie diese Option nur für Routing-, Weiterleitungs- oder NAT-Anwendungsfälle, bei denen die VNIC Traffic senden oder empfangen muss, der nicht an eine ihrer eigenen IP-Adressen adressiert ist.
-
Anzahl IP-Adressen: Geben Sie die Anzahl der Pod-IP-Adressen an, die für dieses sekundäre VNIC-Profil zugewiesen werden sollen (
ipCount). Die kombinierteipCountfür alle konfigurierten sekundären VNIC-Profile auf einem Knoten kann bis zu 256 betragen. Stellen Sie diesen Wert so groß wie möglich auf die erwartete Poddichte ein, und berücksichtigen Sie die VNIC-Grenzwerte für Subnetzkapazität und Compute-Ausprägung. -
Anwendungsressourcen: Optional. Wählen Sie Anwendungsressource hinzufügen aus, um diesem sekundären VNIC-Profil einen Anwendungsressourcennamen hinzuzufügen. Verwenden Sie Anwendungsressourcen, wenn Workloads dieses VNIC-Profil explizit auswählen sollen. Kubernetes Engine stellt Anwendungsressourcen als erweiterte Kubernetes-Ressourcen auf Knoten bereit, und ein Pod kann eine Anwendungsressource anfordern, um den Pod an ein ausgewähltes Profil zu pinnen. Jeder Pod kann nur eine Anwendungsressource im Planungsmodell auf Pod-Ebene anfordern. Wenn Sie keine Pods benötigen, um ein bestimmtes Profil auszuwählen, definieren Sie keine Anwendungsressourcen. Definieren Sie für Multi-Interface-Pods, die Multus und NetworkAttachmentDefinitions (NADs) verwenden, die Schnittstellenauswahl in der NAD-Konfiguration, anstatt Anwendungsressourcenanforderungen auf Pod-Ebene zu verwenden.
-
Netzwerksicherheitsgruppe: Optional. Wählen Sie Netzwerksicherheitsgruppe hinzufügen aus, um mindestens eine NSG mit dieser VNIC zu verknüpfen. Mit NSGs können Sie den Traffic zur und von der VNIC steuern. Wenden Sie Regeln mit den geringsten Berechtigungen an, damit nur der für die Workload erforderliche Traffic zulässig ist.
-
VNIC-Tags: Optional. Wählen Sie Tag hinzufügen aus, um der VNIC ein oder mehrere Freiformtags oder definierte Tags hinzuzufügen. Mit Tags können Sie VNIC-Ressourcen entsprechend Ihrer Taggingstrategie organisieren, verfolgen und verwalten.
-
- Verwenden Sie optional den Network Launch Type, um den Networkingstarttyp für das Worker-Knotennetzwerk auszuwählen. Wenn Sie keinen Wert auswählen, wird PARAVIRTUALIZED als Standardwert verwendet.
- Wenn Sie mehrere sekundäre VNIC-Profile verwenden möchten, wählen Sie VNIC hinzufügen aus, und geben Sie Details für mindestens ein sekundäres VNIC-Profil ein.
Sie können mehrere sekundäre VNICs für Podnetzwerke angeben, wenn Sie verwaltete Knotenpools erstellen oder aktualisieren. Beispiel: Verwenden Sie den Befehl oci ce node-pool create wie folgt (aus Gründen der Lesbarkeit abgekürzt):
oci ce node-pool create \ ... \ --secondary-vnics '[ { "createVnicDetails": { "ipCount": 16, "applicationResources": ["ResourceC"], "subnetId": "...", "assignPublicIp": false } }, { "createVnicDetails": { "ipCount": 16, "applicationResources": ["ResourceD"], "subnetId": "...", "assignPublicIp": false } } ]'Informationen zur Verwendung der CLI finden Sie unter Befehlszeilenschnittstelle (CLI). Eine vollständige Liste der Flags und Optionen, die für CLI-Befehle verfügbar sind, finden Sie in der Befehlszeilenreferenz.
Mit den folgenden Vorgängen können Sie mehrere sekundäre VNICs für Podnetzwerke angeben, wenn Sie verwaltete Knotenpools erstellen oder aktualisieren:
Pods bereitstellen, die mehrere sekundäre VNICs verwenden
Wenn Sie mehrere sekundäre VNIC-Profile an einen Knotenpool anhängen, können Sie Workloads auf unterschiedliche Weise bereitstellen, je nachdem, ob ein Pod einen einzelnen gepinnten Netzwerkpfad verwenden oder mehrere Schnittstellen verwenden soll.
Option 1: Pod mit einer Anwendungsressource an ein einzelnes sekundäres VNIC-Profil pinnen
Verwenden Sie diese Option, wenn ein Knoten mehrere auswählbare sekundäre VNIC-Profile bereitstellt und eine Workload genau mit einem dieser Profile gepinnt werden muss.
Schritt 1: Erweiterte Ressourcennamen und Kapazität auf einem Knoten prüfen
Nachdem der Knotenpool Worker-Knoten enthält, prüfen Sie die Namen und Kapazität der erweiterten Ressourcen auf einem Knoten.
-
Prüfen Sie die angekündigten erweiterten Ressourcen des Knotens:
kubectl describe node <node-name> - Identifizieren Sie im Abschnitt
Capacityder Ausgabe die erweiterten Ressourcen, die Anwendungsressourcen entsprechen (z.B.oke-application-resource.oci.oraclecloud.com/frontend), und bestätigen Sie, dass sie eine Kapazität ungleich null haben.
Knoten, die Anwendungsressourcen bereitstellen, werden mit oci.oraclecloud.com/application-resource-only:NoSchedule verfälscht, um zu verhindern, dass Pods ohne explizite Anwendungsressourcenanforderungen auf ihnen landen.
Fügen Sie der Podspezifikation eine entsprechende Toleranz hinzu (unter spec.tolerations für einen Pod oder unter spec.template.spec.tolerations in einem Deployment):
tolerations:
- key: "oci.oraclecloud.com/application-resource-only"
operator: "Exists"
effect: "NoSchedule"Ohne diese Toleranz lehnt der Scheduler die Platzierung ab, selbst wenn Ressourcenkapazität vorhanden ist.
Fordern Sie in der Podspezifikation die erweiterte Ressource an, die dem sekundären VNIC-Profil entspricht, das der Pod verwenden muss (z.B. in einem Deployment unter spec.template.spec.containers[].resources). Fordern Sie genau eine Einheit an, und begrenzen Sie sie, damit der Scheduler die Kapazität konsistent reserviert.
Beispiel:
containers:
- name: myapp
image: <image>
resources:
requests:
oke-application-resource.oci.oraclecloud.com/frontend: "1"
limits:
oke-application-resource.oci.oraclecloud.com/frontend: "1"Schritt 4: (Optional) Richtige Knotenpools als Ziel festlegen
Wenn Ihre Organisation eine Konvention für Knotenlabels/Selektoren für diese Knoten verwendet (z.B. gva_vnic: "yes"), nehmen Sie sie auf, damit Pods nicht auf Knotenpools landen, die nicht über die erforderlichen Ressourcen verfügen:
nodeSelector:
gva_vnic: "yes"
Ein nodeSelector ist optional, wenn Anforderungen und Toleranzen von Anwendungsressourcen die Planung bereits einschränken. Verwenden Sie nur einen nodeSelector, wenn Sie die Zielknoten beschriftet haben (z.B. über Knotenpool-Kubernetes-Labels).
Nach dem Deployment:
- Eingeben:
kubectl get pods -o wide - Geben Sie für einen relevanten Pod Folgendes ein:
kubectl describe pod <pod-name> - Stellen Sie sicher, dass der Pod ausgeführt wird und keine Planungsfehler vorliegen (z.B. unzureichende Kapazität für die angeforderte Ressource).
Option 2: Mehrere Schnittstellen in einem Pod verwenden (Multus + NADs)
Verwenden Sie diese Option, wenn ein Pod an mehrere Netzwerkschnittstellen angeschlossen werden muss. In diesem Modell hängt Multus zusätzliche Podschnittstellen an, und die NADs definieren, welche Hostschnittstelle (und optional welches sekundäre VNIC-Profil) jede Podschnittstelle verwenden soll.
- Kombinieren Sie Multus-Pod-Netzwerkannotationen nicht mit Anwendungsressourcenanforderungen auf Pod-Ebene in derselben Podspezifikation.
- Wenn Sie die Auswahl sekundärer VNIC-Profile für jede Schnittstelle benötigen, definieren Sie diese Auswahl im NAD (z.B. mit einer
deviceSelector).
Installieren Sie Multus, bevor Sie NADs erstellen oder Pods mit mehreren Schnittstellen bereitstellen. Informationen zur Installation von Multus finden Sie in der Dokumentation zu Multus-CNI auf GitHub.
Befolgen Sie den Standardprozess Ihres Unternehmens für das Deployment von Multus, und prüfen Sie, ob der Prozess fehlerfrei ist:
kubectl get pod -l app=multus -n kube-systemIn den Beispielen in diesem Abschnitt wird das CNI-Plug-in ipvlan für die zusätzliche Podschnittstelle verwendet. Stellen Sie sicher, dass die Binärdatei ipvlan in /opt/cni/bin/ipvlan auf jedem Worker-Knoten vorhanden ist, der Multi-Schnittstellen-Pods ausführen kann.
Oracle empfiehlt, das Plug-in ipvlan mit einem Cloud-Init-Skript für Knotenpools zu installieren, damit das Plug-in installiert wird, wenn Knoten erstellt, ersetzt oder vertikal skaliert werden. Pinnen Sie das Plug-in an ein validiertes Release für die Zielumgebung, anstatt einem unverankerten Downloadpfad zu folgen. Im folgenden Beispiel wird die Version v1.9.0 verwendet.
Beispiel:
#!/bin/bash
CNI_VERSION="v1.9.0"
CNI_ARCH="amd64"
CNI_TARBALL="cni-plugins-linux-${CNI_ARCH}-${CNI_VERSION}.tgz"
CNI_URL="https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/${CNI_TARBALL}"
CNI_BIN_DIR="/opt/cni/bin"
wget --fail -O "/tmp/${CNI_TARBALL}" "${CNI_URL}" && \
tar xvzf "/tmp/${CNI_TARBALL}" -C "${CNI_BIN_DIR}" && \
rm -f "/tmp/${CNI_TARBALL}"
curl --fail -H "Authorization: Bearer Oracle" -L0 \
http://169.254.169.254/opc/v2/instance/metadata/oke_init_script \
| base64 --decode > /var/run/oke-init.sh
bash /var/run/oke-init.shWenn Worker-Knoten nicht auf GitHub zugreifen können, stellen Sie das erforderliche CNI-Plug-in-Archiv in OCI Object Storage oder einem anderen genehmigten internen Speicherort bereit, und aktualisieren Sie die Download-URL im Cloud-Init-Skript.
NADs müssen die tatsächlichen Hostschnittstellennamen als Ziel festlegen, die von den angehängten VNICs erstellt wurden (z.B. enp1s0, enp2s0). Prüfen Sie sie auf einem Mitarbeiterknoten mit der Standardzugriffsmethode Ihrer Organisation.
Erstellen:
- ein NAD für das Standardpodnetzwerk (um zu steuern, welche Hostschnittstelle
eth0unterstützt) - einen oder mehrere NADs für zusätzliche Schnittstellen (z.B.
net1).
Ihre NAD-Konfiguration kann ein Gerät mit einem deviceSelector auswählen (z.B. nach interfaceName oder nach Anwendungsressourcenname mit appResource, wenn dies in Ihrer Umgebung unterstützt wird).
Die folgenden NAD-Beispiele verwenden absichtlich verschiedene Namespaces. oci-vcn-native-network ist in kube-system definiert, während ipvlan-network in default definiert ist. Wenn die Workload in einem anderen Namespace ausgeführt wird, erstellen Sie ipvlan-network in diesem Namespace, oder aktualisieren Sie die Podannotation, um den vollqualifizierten NAD-Namen zu referenzieren.
Standard-Netzwerk-NAD an enp1s0 gepinnt:
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: oci-vcn-native-network
namespace: kube-system
spec:
config: |
{
"name": "oci",
"cniVersion": "0.3.1",
"plugins": [
{
"cniVersion": "0.3.1",
"type": "oci-ipvlan",
"mode": "l2",
"ipam": {
"type": "oci-ipam",
"deviceSelector": {
"interfaceName": "enp1s0"
}
}
},
{
"cniVersion": "0.3.1",
"type": "oci-ptp",
"containerInterface": "ptp-veth0",
"mtu": 9000
}
]
}NAD des sekundären Netzwerks an enp2s0 gepinnt:
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: ipvlan-network
namespace: default
spec:
config: |
{
"cniVersion": "0.3.1",
"plugins": [
{
"type": "ipvlan",
"mode": "l2",
"master": "enp2s0",
"ipam": {
"type": "oci-ipam",
"deviceSelector": {
"interfaceName": "enp2s0"
}
}
}
]
}Der Standard-NAD verwendet die OCI-spezifischen Plug-ins oci-ipvlan und oci-ptp, da diese Schnittstelle am Pfad des nativen OKE-VCN-Standardnetzwerks teilnimmt. Der zusätzliche NAD verwendet das standardmäßige ipvlan-Plug-in, da Multus eine zusätzliche Schnittstelle an eine bestimmte Host-NIC anhängt, während OCI IPAM weiterhin die Subnetz-bezogene IP-Zuweisung bereitstellt.
deviceSelector kann Schnittstellen mit Feldern wie:
{
"appResource": "blue",
"interfaceName": "enp2s0",
"interfaceNamePrefix": "enp",
"macAddress": "02:00:17:08:E3:07"
}Mit dem Block deviceSelector kann OCI IPAM die Zielschnittstelle oder VNIC auswählen, die für die Pod-IP-Zuweisung verwendet wird. Es kann ein Gerät mithilfe eines oder mehrerer dieser Felder auswählen:
-
appResource: Wählt das GVA-VNIC-Profil nach Anwendungsressourcenname. -
interfaceName: Wählt eine bestimmte Hostschnittstelle, wieenp1s0. -
interfaceNamePrefix: Wählt eine Schnittstelle nach Präfix, wieenp. -
macAddress: Wählt eine Schnittstelle nach MAC-Adresse.
Wenn appResource im NAD-Geräteselektor festgelegt ist, verwendet das OCI-IPAM-Plug-in diese Anwendungsressource, um zu entscheiden, welches GVA-VNIC-Profil die Pod-IP-Adresse angeben und als übergeordnetes Gerät für diese Schnittstelle fungieren soll. Dadurch können verschiedene NADs im selben Pod unterschiedlichen VNIC-Profilen zugeordnet werden. Beispiel:
-
NAD1->Application Resource: vnic-a -
NAD2->Application Resource: vnic-b -
NAD3->Application Resource: vnic-c
Wenn ein Pod alle drei NADs verwendet, kann jede Schnittstelle über das entsprechende VNIC-Profil angehängt werden.
In den in diesem Dokument gezeigten Beispielen für Schnittstellennamen:
-
Der
oci-vcn-native-network-NAD verwendetinterfaceName: enp1s0, sodass OCI IPAM die Standardnetzwerk-IP des Pods von derenp1s0-Schnittstelle des Hosts zuweist. -
Der
ipvlan-network-NAD verwendetinterfaceName: enp2s0, sodass OCI IPAM die zusätzliche Schnittstellen-IP aus derenp2s0-Schnittstelle des Hosts zuweist.
Deshalb setzt das Pod-Beispiel:
annotations:
v1.multus-cni.io/default-network: kube-system/oci-vcn-native-network
k8s.v1.cni.cncf.io/networks: default/ipvlan-networkDie Annotation v1.multus-cni.io/default-network stellt sicher, dass eth0 den NAD oci-vcn-native-network verwendet. Ohne explizite Auswahl dieses Standardnetzwerks kann OCI IPAM von jeder berechtigten Hostschnittstelle zugewiesen werden, wodurch die primäre Podschnittstelle weniger vorhersehbar ist. Wenn der Standard-NAD festgelegt wird, wird sichergestellt, dass eth0 die beabsichtigte Schnittstelle verwendet und vom zusätzlichen Netzwerkanhang isoliert bleibt.
Kombinieren Sie diese Multus-Pod-Annotationen nicht mit Anwendungsressourcenanforderungen auf Pod-Ebene in derselben Podspezifikation. Wenn für einen Pod mit mehreren Schnittstellen eine GVA-VNIC-Auswahl erforderlich ist, definieren Sie diese Auswahl in der NAD-Konfiguration deviceSelector.appResource für jede Schnittstelle, anstatt eine Anwendungsressourcenanforderung auf Pod-Ebene zu verwenden.
NADs anwenden:
kubectl apply -f oci-vcn-native-network-nad.yamlkubectl apply -f ipvlan-network.yamlKommentieren Sie den Pod, um den Standardnetzwerk-NAD auszuwählen, und hängen Sie zusätzliche Netzwerk-NADs an. Beispiel:
metadata:
annotations:
v1.multus-cni.io/default-network: kube-system/oci-vcn-native-network
k8s.v1.cni.cncf.io/networks: default/ipvlan-network- Beschreiben Sie den Pod, und prüfen Sie die Multus-Netzwerkstatusannotationen (falls vorhanden):
kubectl describe pod <pod-name> - Wenn in Ihrer Umgebung zulässig, führen Sie eine Ausführung im Pod aus, und prüfen Sie die Schnittstellen (z.B.
ifconfigoderip addr), um zu bestätigen, dass der Pod die erwarteten Schnittstellen (eth0,net1, …) und IP-Adressen aufweist.
Option 3: Sekundäre VNIC-Profile ohne Anwendungsressourcen verwenden
Wenn Sie mehrere sekundäre VNIC-Profile an einen Knotenpool anhängen und keine Anwendungsressourcen definieren, werden Pods nicht durch vom Scheduler erzwungene Ressourcenanforderungen an ein einzelnes sekundäres VNIC-Profil gepinnt. Für diese Option müssen keine Pods erweiterte Ressourcen anfordern. Pods, die zusätzliche Schnittstellen erfordern, müssen Multus und NetworkAttachmentDefinitions (NADs) verwenden, um diese Schnittstellen anzuhängen.
Verwenden Sie dieses Modell, wenn das Ziel darin besteht, die Gesamtpod-IP-Kapazität zu skalieren, anstatt verschiedene Workloads mit Anwendungsressourcen an verschiedene Profile zu pinnen. Definieren Sie bei Pods mit mehreren Schnittstellen die Schnittstellenauswahl in der NAD-Konfiguration, z.B. mit deviceSelector.interfaceName oder deviceSelector.appResource.
Max-Pods für Kubelet auf Worker-Knoten konfigurieren
In den meisten Fällen müssen Sie das Kubelet max-pods nicht manuell für Knotenpools konfigurieren, die mehrere sekundäre VNIC-Profile für Podnetzwerke anhängen. Kubernetes Engine legt die maximale Anzahl von Pods pro Knoten basierend auf der Pod-IP-Kapazität fest, die auf dem Knoten verfügbar ist.
Legen Sie nur einen benutzerdefinierten max-pods-Wert fest, wenn Sie einen bestimmten Grund haben, die Poddichte manuell zu begrenzen. Stellen Sie bei der Auswahl eines Wertes sicher, dass er die auf dem Knoten verfügbare Pod-IP-Kapazität nicht überschreitet.
Um das effektive Podlimit in Ihrem Cluster zu prüfen, prüfen Sie die gemeldete Kapazität/zuweisbare Werte des Knotens (z.B. kubectl describe node <node-name>), und stellen Sie sicher, dass die konfigurierte Workload-Dichte die verfügbare Pod-IP-Kapazität nicht überschreitet.
Fehlerbehebung
Pods hängen im Status "Ausstehend"
Pods können aus mehreren Gründen den Status "Ausstehend" aufweisen. Häufige Ursachen und Lösungen sind:
-
Ursache: Unzureichende Kapazität.
Tritt auf, wenn keine Pod-IPs für das ausgewählte sekundäre VNIC-Profil verfügbar sind oder wenn nicht genügend Kapazität für die angeforderte Anwendungsressource vorhanden ist (wenn der Pod eine Anwendungsressource verwendet, um ein bestimmtes sekundäres VNIC-Profil auszuwählen).
Lösung: Skalieren Sie den Knotenpool, reduzieren Sie die Anzahl der Pods, oder reduzieren Sie (bei Pods mit mehreren Schnittstellen) die Anzahl zusätzlicher Podnetzwerkanhänge.
-
Ursache: Fehlende Toleranz.
Tritt auf, wenn der Pod nicht die erforderliche Toleranz für den
oci.oraclecloud.com/application-resource-only:NoSchedule-Taint auf Knoten aufweist, die Anwendungsressourcen bereitstellen.Lösung: Fügen Sie die fehlende Toleranz hinzu.
-
Ursache: Falscher Ressourcenname.
Tritt auf, wenn der Pod eine Anwendungsressource (erweiterte Ressource) anfordert, die nicht auf den Zielknoten vorhanden ist.
Lösung: Stellen Sie sicher, dass die Anwendungsressourcennamen mit der Knotenpoolkonfiguration übereinstimmen (Groß-/Kleinschreibung und Rechtschreibung). Bestätigen Sie die verfügbaren Ressourcennamen auf einem Knoten, indem Sie
kubectl describe node <node-name>ausführen und den AbschnittCapacityprüfen. -
Ursache: Die Knotenauswahl verhindert die Planung.
Tritt auf, wenn der Pod
nodeSelectoroder andere Platzierungs-Constraints enthält, die alle Knoten ausschließen, die über die erforderliche Kapazität verfügen.Lösung: Stellen Sie sicher, dass die Knotenlabels vorhanden sind und exakt übereinstimmen, oder entfernen/anpassen Sie die Knotenauswahl-Constraints.
Pod zum Erstellungszeitpunkt abgelehnt
Wenn die Poderstellung durch die Zulassungsvalidierung abgelehnt wird, korrigieren Sie die Podspezifikation mit der Ablehnungsnachricht. Häufige Probleme sind das Anfordern nicht unterstützter Kombinationen oder Mengen erweiterter Ressourcen oder das Angeben von Anforderungen/Limits, die nicht mit dem erforderlichen Muster für die Clusterkonfiguration übereinstimmen.
Multi-Interface-Pod erhält nicht die erwarteten Schnittstellen
Ein Multi-Schnittstellen-Pod kann erfolgreich erstellt werden, hat jedoch nicht die erwarteten Netzwerkschnittstellen, IP-Adressen oder Schnittstellen-zu-Subnetz-Zuordnung. Beispiel: Der Pod verfügt möglicherweise nicht über eine net1-Schnittstelle, die eth0-Schnittstelle verwendet möglicherweise nicht das beabsichtigte Standardnetzwerk, oder eine zusätzliche Schnittstelle empfängt möglicherweise eine IP-Adresse von einem anderen Subnetz als erwartet.
Häufige Ursachen sind:
-
Multus wird in
kube-systemnicht ausgeführt. -
Das erforderliche CNI-Plug-in, wie
ipvlan, ist auf den Worker-Knoten nicht vorhanden. -
Die NAD referenziert einen falschen Hostschnittstellennamen.
-
Die Podannotation referenziert den falschen NAD-Namen oder Namespace.
-
Die Schnittstellenauswahl wird zwischen Anwendungsressourcenanforderungen auf Pod-Ebene und NAD-Konfiguration aufgeteilt.
Um das Problem zu beheben, prüfen Sie die Konfiguration in der Reihenfolge, in der Kubernetes und Multus sie verwenden: Knotenpoolkonfiguration, erforderliche CNI-Komponenten auf dem Worker-Knoten, NAD-Konfiguration und Podannotationen.
Vergewissern Sie sich, dass Multus installiert und ausgeführt wird und dass die erforderlichen CNI-Plug-ins auf jedem Worker-Knoten vorhanden sind, auf dem die Workload ausgeführt werden kann. Prüfen Sie, ob die NAD-Namen und -Namespaces mit den Podannotationen übereinstimmen und ob alle deviceSelector-Werte im NAD mit den tatsächlichen Worker-Knoten-Schnittstellennamen oder Anwendungsressourcennamen übereinstimmen.
Anwendungsressourcenanforderungen auf Pod-Ebene nicht mit Multus-Pod-Netzwerkannotationen in derselben Podspezifikation kombinieren. Wenn der Pod bestimmte sekundäre VNIC-Profile auswählen muss, definieren Sie diese Auswahl stattdessen in der NAD-Konfiguration.
Nachdem Sie die Konfiguration korrigiert haben, erstellen Sie den Pod neu, und prüfen Sie die Multus-Netzwerkstatusannotation und die Schnittstellen im Pod. Stellen Sie sicher, dass der Pod über die erwarteten Schnittstellen verfügt, wie eth0 und net1, und dass die IP-Adressen aus den beabsichtigten Subnetzen zugewiesen werden.
Bewährte Methoden
Berücksichtigen Sie die folgenden Best Practices beim Anhängen mehrerer sekundärer VNICs für Podnetzwerke:
-
Entscheiden Sie, ob Workloads einen einzelnen Netzwerkpfad oder mehrere Podschnittstellen erfordern. Verwenden Sie Anwendungsressourcen, um Pods an ein bestimmtes sekundäres VNIC-Profil zu pinnen, wenn Workloads genau ein Profil als Ziel festlegen müssen. Verwenden Sie Multus und NetworkAttachmentDefinitions (NADs), wenn Pods mehrere Schnittstellen anhängen müssen.
-
Planen Sie zuerst die Netzwerksegmentierung (Subnetze/NSGs/Sicherheitszonen). Wenn Sie Anwendungsressourcen verwenden, ordnen Sie jede Anwendungsressource dem entsprechenden sekundären VNIC-Profil, Subnetz und NSGs zu.
-
Ordnen Sie
ipCount-Zuweisungen die richtige Größe zu, und behalten Sie Platz, um Planungsfehler zu reduzieren. Prüfen Sie die Subnetzkapazität und die Ausprägung der VNIC-Limits im Rahmen der Kapazitätsplanung. -
Verwenden Sie eine konsistente Benennung für Anwendungsressourcen und VNIC-Anzeigenamen. Wenn Sie Multus verwenden, verwenden Sie auch eine konsistente Benennung für NADs und dokumentieren, welche NAD welche Hostschnittstelle oder welches VNIC-Profil wählt.
-
Überwachen Sie die Kapazität und den Planungszustand. Wenn Sie Anwendungsressourcen verwenden, überwachen Sie die Anwendungsressourcenauslastung und warnen Sie bei Kapazitätsengpässen und Planungsfehlern (pro Ressourcentyp). Wenn Sie keine Anwendungsressourcen verwenden, überwachen Sie den gesamten Pod-IP-Verbrauch und Podplanungsfehler für den Knotenpool.
-
Wenden Sie das Prinzip der geringsten Berechtigung auf NSG-Regeln an, um nur den minimalen Netzwerktraffic zuzulassen, der für die Workload erforderlich ist, und aktivieren Sie VCN-Flowlogs. Kombinieren Sie Multus-Pod-Netzwerkannotationen nicht mit Anwendungsressourcenanforderungen auf Pod-Ebene in derselben Podspezifikation. Wenn für Multi-Interface-Pods eine VNIC-Profilauswahl erforderlich ist, definieren Sie die Auswahl in der NAD-Konfiguration.