Collegamento di più VNIC secondarie per il networking pod
Scopri come collegare e configurare più VNIC secondarie sui nodi di lavoro per il pod networking utilizzando Kubernetes Engine (OKE). È possibile fissare un pod a un singolo profilo VNIC secondario utilizzando una risorsa applicazione o collegare più interfacce pod utilizzando Multus e NetworkAttachmentDefinitions (NAD).
Il collegamento di più VNIC secondarie ai nodi di lavoro consente di segmentare la rete di pod tra subnet e controlli di sicurezza diversi (ad esempio, pod front-end su una VNIC/subnet/NSG secondaria e pod backend su un altro). Ogni profilo VNIC secondario è configurato con il proprio pool di indirizzi IP pod (controllati da ipCount) e le impostazioni di rete (ad esempio subnet e NSG). Facoltativamente, è possibile associare un profilo VNIC secondario a un nome Risorsa applicazione in modo che i carichi di lavoro possano selezionare tale profilo in modo esplicito.
Se si definiscono risorse applicative in profili VNIC secondari, Kubernetes Engine espone tali risorse applicative in ogni nodo come Risorse estese Kubernetes (ad esempio, oke-application-resource.oci.oraclecloud.com/<resource-name>), con capacità del nodo che riflette il numero di IP pod disponibili nel profilo VNIC secondario corrispondente.
I pod possono utilizzare le risorse delle applicazioni nel modo seguente:
-
Un pod può richiedere una risorsa applicativa singola (tramite una richiesta/limite di risorse estese) quando si desidera che tale pod selezioni un profilo/interfaccia VNIC secondaria.
-
I nodi che espongono le risorse dell'applicazione vengono contaminati (con il taint
oci.oraclecloud.com/application-resource-only:NoSchedule) in modo che i pod che non richiedono esplicitamente una risorsa dell'applicazione non vengano pianificati su questi nodi. I pod devono includere una tolleranza corrispondente. -
La pianificazione deve soddisfare la risorsa applicazione richiesta (il nodo deve avere una capacità sufficiente per la risorsa estesa richiesta).
-
Se non è necessario eseguire il fissaggio forzato dello scheduler a un profilo VNIC secondario specifico, non definire una risorsa applicazione nei profili VNIC. I pod che richiedono interfacce aggiuntive devono utilizzare Multus e NetworkAttachmentDefinitions (NAD) per collegare tali interfacce.
L'utilizzo di più VNIC secondarie per il pod networking è supportato solo con il plugin CNI per il pod networking nativo VCN OCI. Quando si utilizza il plugin CNI flanella per la rete pod, non sono supportate più VNIC secondarie per la rete pod. Si applicano ancora i limiti della VNIC della forma di computazione, la disponibilità della subnet/IP e i limiti delle regole NSG.
Quando un pod richiede una risorsa applicativa, la pianificazione dei pod procede come indicato di seguito.
-
È possibile creare un pod che richiede una singola risorsa dell'applicazione (facoltativo: solo se si desidera che il pod venga inserito in un profilo VNIC secondario selezionabile).
-
La convalida dell'ammissione controlla la specifica del pod, incluso se la risorsa applicazione richiesta e la quantità richiesta sono valide.
-
Lo scheduler Kubernetes seleziona un nodo con capacità per la risorsa applicazione richiesta e gli IP disponibili nel profilo VNIC secondario corrispondente.
-
Il plugin CNI di networking pod nativo VCN OCI assegna un indirizzo IP al pod dal profilo VNIC secondario selezionato.
-
Il pod utilizza tale profilo/interfaccia selezionata come percorso di rete principale in questo modello di pianificazione.
Prima di collegare più VNIC secondarie per la rete pod, assicurarsi di:
-
Il cluster utilizza la rete pod VCN nativa.
-
La VCN, le subnet e i gruppi NSG sono pianificati per la segmentazione desiderata (perché ogni profilo VNIC secondario può puntare a una subnet e a un criterio di sicurezza diversi).
-
La forma di computazione utilizzata per i nodi di lavoro supporta il numero richiesto di collegamenti VNIC e la densità di pod prevista.
-
Se hai bisogno di pod multi-interfaccia, verifica che Multus sia distribuito e che i plugin CNI necessari siano presenti sui nodi di lavoro e conferma la versione del plugin CNI nativo VCN OCI necessaria per il supporto multi-interfaccia nell'ambiente in uso.
Non combinare le annotazioni di rete pod Multus con le richieste di risorse applicative a livello di pod nella stessa specifica pod, poiché ciò può creare conflitti di pianificazione e selezione dell'interfaccia. Se un pod multi-interfaccia deve selezionare profili VNIC secondari specifici, definire tale selezione nella configurazione NAD anziché utilizzare una richiesta di risorse applicative a livello di pod. Ad esempio, utilizzare un campo deviceSelector, ad esempio deviceSelector.appResource o deviceSelector.interfaceName.
È possibile collegare più VNIC secondarie per il networking pod:
- Quando si crea un nuovo pool di nodi (o quando si crea un nuovo cluster o quando si esegue lo scale up di un cluster esistente).
- Durante l'aggiornamento di un pool di nodi esistente.
In entrambi i casi, il tipo di rete del cluster deve essere nativo per la rete pod VCN. Il networking pod multi-interfaccia con Multus richiede anche la versione del plugin CNI nativo VCN OCI supportata per l'ambiente in uso.
-
Seguire le istruzioni per creare o aggiornare un pool di nodi gestiti (vedere Creazione di un pool di nodi gestiti o Aggiornamento di un pool di nodi gestiti a seconda dei casi).
- Quando si specificano i dettagli per il pool di nodi:
- Facoltativamente, utilizzare Tipo di avvio di rete per selezionare il tipo di avvio di rete per la rete dei nodi di lavoro. Se non si seleziona un valore, come valore predefinito viene utilizzato PARAVIRTUALIZED.
Nella maggior parte dei casi, selezionare PARAVIRTUALIZED. Selezionare VFIO solo quando la forma e l'immagine selezionate supportano la rete SR-IOV assistita dall'hardware e il carico di lavoro lo richiede. Selezionare E1000 solo se necessario per la compatibilità con un'immagine o un carico di lavoro che non supporta la rete pseudo-virtualizzata. Il supporto per ogni tipo di avvio dipende dalla forma di computazione e dall'immagine selezionate.
- Selezionare Configura VNIC secondarie per i nodi e specificare i dettagli per il primo profilo VNIC secondario come indicato di seguito.
-
Nome visualizzato allegato VNIC: facoltativo. Specificare un nome visualizzato per il collegamento VNIC. Il nome visualizzato consente di identificare questo collegamento VNIC nella configurazione del pool di nodi.
-
Nome visualizzato VNIC: facoltativo. Specificare un nome visualizzato per la VNIC. Il nome visualizzato consente di identificare la VNIC nelle risorse di networking e computazione.
-
Indice NIC: facoltativo. Specificare la scheda di rete fisica da utilizzare per questo collegamento VNIC. Questa opzione viene in genere utilizzata nelle forme Bare Metal quando si desidera posizionare le VNIC su NIC fisici specifici, ad esempio per allineare il traffico del carico di lavoro alla larghezza di banda NIC disponibile. Se non si specifica un valore, Kubernetes Engine utilizza il posizionamento predefinito per la forma e la configurazione selezionate.
-
Compartimento subnet VNIC: specificare il compartimento che contiene la subnet per questa VNIC.
-
Sottorete VNIC: specificare la subnet per questa VNIC. La subnet determina la rete, la tabella di instradamento, le regole di sicurezza e la famiglia di indirizzi IP disponibili per la VNIC. Per il networking pod, scegliere una subnet con un numero sufficiente di indirizzi IP disponibili per il numero di IP pod che si desidera allocare.
-
Assegnare l'IP pubblico alla VNIC: facoltativo. Specificare se assegnare un indirizzo IPv4 pubblico a questa VNIC. Questa impostazione si applica solo alla VNIC. Gli indirizzi IP pubblici non vengono assegnati ai pod, indipendentemente dal fatto che la VNIC si trovi in una subnet pubblica o in una subnet privata. Nella maggior parte dei progetti di pod networking, lasciare questa opzione deselezionata. Selezionare questa opzione solo se la subnet è pubblica e si dispone di un requisito specifico affinché la VNIC stessa disponga di un indirizzo IP pubblico. Assicurarsi che le tabelle di instradamento e le regole di sicurezza limitino l'accesso in modo appropriato.
-
Assegnare l'indirizzo IPv6 alla VNIC: facoltativo. Specificare se assegnare un indirizzo IPv6 a questa VNIC. Questa opzione è applicabile solo se la sottorete selezionata supporta IPv6.
-
Salta controllo origine/destinazione: facoltativo. Specificare se saltare i controlli di origine/destinazione per questa VNIC. Abilitare questa opzione solo per i casi d'uso di instradamento, inoltro o NAT in cui la VNIC deve inviare o ricevere traffico non indirizzato a uno dei propri indirizzi IP.
-
N. di indirizzi IP: specificare il numero di indirizzi IP pod da allocare per questo profilo VNIC secondario (
ipCount). La combinazione diipCountin tutti i profili VNIC secondari configurati in un nodo può essere fino a 256. Ridimensiona questo valore con spazio sufficiente per la densità dei pod prevista e prendi in considerazione la capacità della subnet e i limiti VNIC della forma di computazione. -
Risorse dell'applicazione: facoltative. Selezionare Aggiungi risorsa applicazione per aggiungere un nome di risorsa applicazione a questo profilo VNIC secondario. Utilizzare Risorse applicazione quando si desidera che i carichi di lavoro selezionino esplicitamente questo profilo VNIC. Kubernetes Engine espone le risorse delle applicazioni come risorse estese Kubernetes sui nodi e un pod può richiedere una risorsa dell'applicazione per fissare il pod a un profilo selezionato. Ogni pod può richiedere una sola risorsa applicazione nel modello di pianificazione a livello di pod. Se non sono necessari pod per selezionare un profilo specifico, non definire le risorse dell'applicazione. Per i pod multi-interfaccia che utilizzano Multus e NetworkAttachmentDefinitions (NAD), definire la selezione dell'interfaccia nella configurazione NAD anziché utilizzare le richieste di risorse dell'applicazione a livello di pod.
-
Gruppo di protezione di rete: facoltativo. Selezionare Aggiungi gruppo di sicurezza di rete per associare uno o più gruppi NSG a questa VNIC. Utilizzare i gruppi NSG per controllare il traffico da e verso la VNIC. Applica regole con privilegi minimi in modo che sia consentito solo il traffico richiesto dal carico di lavoro.
-
Tag VNIC: facoltativo. Selezionare Aggiungi tag per aggiungere una o più tag in formato libero o definite alla VNIC. Utilizza le tag per organizzare, monitorare e gestire le risorse VNIC in base alla tua strategia di applicazione tag.
-
- Facoltativamente, utilizzare Tipo di avvio di rete per selezionare il tipo di avvio di rete per la rete dei nodi di lavoro. Se non si seleziona un valore, come valore predefinito viene utilizzato PARAVIRTUALIZED.
- Se si desidera utilizzare più profili VNIC secondari, selezionare Aggiungi VNIC e immettere i dettagli per uno o più profili VNIC secondari aggiuntivi.
È possibile specificare più VNIC secondarie per la rete pod durante la creazione o l'aggiornamento dei pool di nodi gestiti. Ad esempio, utilizzando il comando oci ce node-pool create, come indicato di seguito (abbreviato per leggibilità).
oci ce node-pool create \ ... \ --secondary-vnics '[ { "createVnicDetails": { "ipCount": 16, "applicationResources": ["ResourceC"], "subnetId": "...", "assignPublicIp": false } }, { "createVnicDetails": { "ipCount": 16, "applicationResources": ["ResourceD"], "subnetId": "...", "assignPublicIp": false } } ]'Per informazioni sull'uso dell'interfaccia CLI, vedere Command Line Interface (CLI). Per un elenco completo dei flag e delle opzioni disponibili per i comandi CLI, consultare il documento Command Line Reference.
È possibile specificare più VNIC secondarie per il networking pod durante la creazione o l'aggiornamento dei pool di nodi gestiti, utilizzando le operazioni riportate di seguito.
Distribuzione di pod che utilizzano più VNIC secondarie
Quando si collegano più profili VNIC secondari a un pool di nodi, è possibile distribuire i carichi di lavoro in modi diversi a seconda che si desideri che un pod utilizzi un percorso di rete collegato singolo o che utilizzi più interfacce.
Opzione 1: collegare un pod a un singolo profilo VNIC secondario utilizzando una risorsa applicazione
Utilizzare questa opzione quando un nodo espone più profili VNIC secondari selezionabili e un carico di lavoro deve essere collegato esattamente a uno di essi.
Passo 1: verificare i nomi delle risorse estese e la capacità su un nodo
Dopo che il pool di nodi dispone di nodi di lavoro, verificare i nomi e la capacità delle risorse estese in un nodo.
-
Esaminare le risorse estese pubblicate dal nodo:
kubectl describe node <node-name> - Nella sezione
Capacitydell'output, identificare le Risorse Estese corrispondenti alle Risorse dell'applicazione (ad esempiooke-application-resource.oci.oraclecloud.com/frontend) e confermare di avere una capacità diversa da zero.
I nodi che espongono le risorse dell'applicazione vengono contaminati con oci.oraclecloud.com/application-resource-only:NoSchedule per impedire che i pod senza richieste esplicite delle risorse dell'applicazione arrivino su di essi.
Aggiungere una tolleranza corrispondente alla specifica pod (in spec.tolerations per un pod o in spec.template.spec.tolerations in una distribuzione):
tolerations:
- key: "oci.oraclecloud.com/application-resource-only"
operator: "Exists"
effect: "NoSchedule"Senza questa tolleranza, lo scheduler rifiuterà il posizionamento anche se la capacità delle risorse esiste.
Nella specifica pod, richiedere la risorsa estesa che corrisponde al profilo VNIC secondario che il pod deve utilizzare (ad esempio, in una distribuzione all'indirizzo spec.template.spec.containers[].resources). Richiedere e limitare esattamente un'unità in modo che lo scheduler riserva la capacità in modo coerente.
Ad esempio:
containers:
- name: myapp
image: <image>
resources:
requests:
oke-application-resource.oci.oraclecloud.com/frontend: "1"
limits:
oke-application-resource.oci.oraclecloud.com/frontend: "1"Passo 4: (facoltativo) indirizzare i pool di nodi corretti
Se l'organizzazione utilizza un'etichetta di nodo o una convenzione di selezione per questi nodi (ad esempio, gva_vnic: "yes"), includerlo in modo che i pod non vengano posizionati nei pool di nodi che non dispongono delle risorse necessarie:
nodeSelector:
gva_vnic: "yes"
NodeSelector è facoltativo quando le richieste e le tolleranze delle risorse dell'applicazione vincolano già la pianificazione. Utilizzare un nodeSelector solo se i nodi di destinazione sono stati etichettati (ad esempio tramite le etichette Kubernetes del pool di nodi).
Dopo la distribuzione:
- Inserisci:
kubectl get pods -o wide - Per un pod di interesse, immettere:
kubectl describe pod <pod-name> - Verificare che il pod sia in esecuzione e che non vi siano errori di pianificazione (ad esempio, capacità insufficiente per la risorsa richiesta).
Opzione 2: Utilizzare più interfacce in un pod (Multus + NAD)
Utilizzare questa opzione quando un pod deve collegarsi a più interfacce di rete. In questo modello, Multus allega ulteriori interfacce pod e i NAD definiscono quale interfaccia host (e facoltativamente quale profilo VNIC secondario) ciascuna interfaccia pod deve utilizzare.
- Non combinare le annotazioni di rete pod Multus con le richieste di risorse applicative a livello di pod nella stessa specifica pod.
- Se è necessaria la selezione per interfaccia dei profili VNIC secondari, definire tale selezione nel NAD (ad esempio, utilizzando un
deviceSelector).
Installare Multus prima di creare NAD o distribuire pod multi-interfaccia. Per informazioni sull'installazione di Multus, consultare la documentazione di Multus-CNI su GitHub.
Seguire il processo standard dell'organizzazione per la distribuzione di Multus, quindi verificare che sia in buono stato:
kubectl get pod -l app=multus -n kube-systemGli esempi in questa sezione utilizzano il plugin CNI ipvlan per l'interfaccia pod aggiuntiva. Assicurarsi che il file binario ipvlan sia presente in /opt/cni/bin/ipvlan su ogni nodo di lavoro in grado di eseguire pod multi-interfaccia.
Oracle consiglia di installare il plugin ipvlan utilizzando uno script di inizializzazione cloud del pool di nodi in modo che il plugin venga installato quando i nodi vengono creati, sostituiti o sottoposti a scale out. Apporre il plugin a una release convalidata per l'ambiente di destinazione, anziché seguire un percorso di download mobile. Nell'esempio seguente viene utilizzata la versione v1.9.0.
Ad esempio:
#!/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.shSe i nodi di lavoro non possono accedere a GitHub, posizionare nell'area intermedia l'archivio dei plugin CNI richiesto nello storage degli oggetti OCI o in un'altra posizione interna approvata e aggiornare l'URL di download nello script di inizializzazione cloud.
I NAD devono essere indirizzati ai nomi effettivi dell'interfaccia host creati dalle VNIC collegate (ad esempio, enp1s0, enp2s0). Verificarli in un nodo di lavoro utilizzando il metodo di accesso standard dell'organizzazione.
Crea:
- un NAD per la rete pod predefinita (per controllare quale interfaccia host esegue il backup di
eth0) - uno o più NAD per interfacce aggiuntive (ad esempio,
net1).
La configurazione NAD consente di selezionare un dispositivo utilizzando un deviceSelector (ad esempio, interfaceName o il nome della risorsa applicazione utilizzando appResource se supportato nell'ambiente in uso).
I seguenti esempi NAD utilizzano intenzionalmente spazi di nomi diversi. oci-vcn-native-network è definito in kube-system, mentre ipvlan-network è definito in default. Se il carico di lavoro viene eseguito in un altro spazio di nomi, creare ipvlan-network nello spazio di nomi o aggiornare l'annotazione pod per fare riferimento al nome NAD completamente qualificato.
Il NAD di rete predefinito è collegato a enp1s0:
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
}
]
}Il NAD della rete secondaria è stato collegato a enp2s0:
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"
}
}
}
]
}Il NAD predefinito utilizza i plugin oci-ipvlan e oci-ptp specifici di OCI perché tale interfaccia partecipa al percorso di rete predefinito nativo per la VCN OKE. Il NAD aggiuntivo utilizza il plugin ipvlan standard perché Multus collega un'interfaccia aggiuntiva su una NIC host specifica, mentre OCI IPAM fornisce ancora l'allocazione IP dipendente dalla subnet.
deviceSelector può indirizzare interfacce con campi quali:
{
"appResource": "blue",
"interfaceName": "enp2s0",
"interfaceNamePrefix": "enp",
"macAddress": "02:00:17:08:E3:07"
}Il blocco deviceSelector consente all'IPAM OCI di scegliere l'interfaccia di destinazione o la VNIC utilizzata per l'allocazione dell'IP pod. È possibile selezionare un dispositivo utilizzando uno o più dei seguenti campi:
-
appResource: seleziona il profilo VNIC GVA in base al nome della risorsa applicazione. -
interfaceName: seleziona un'interfaccia host specifica, ad esempioenp1s0. -
interfaceNamePrefix: seleziona un'interfaccia in base al prefisso, ad esempioenp. -
macAddress: seleziona un'interfaccia in base all'indirizzo MAC.
Quando appResource è impostato nel selettore di dispositivi NAD, il plugin IPAM OCI utilizza tale risorsa applicazione per decidere quale profilo VNIC GVA deve fornire l'indirizzo IP pod e fungere da dispositivo padre per tale interfaccia. Ciò consente a diversi NAD nello stesso pod di eseguire il mapping a diversi profili VNIC, ad esempio:
-
NAD1->Application Resource: vnic-a -
NAD2->Application Resource: vnic-b -
NAD3->Application Resource: vnic-c
Se un pod utilizza tutti e tre i NAD, ogni interfaccia può essere collegata tramite il profilo VNIC corrispondente.
Negli esempi di nome interfaccia mostrati in questo documento:
-
Il NAD
oci-vcn-native-networkutilizzainterfaceName: enp1s0in modo che OCI IPAM allochi l'IP di rete predefinito del pod dall'interfacciaenp1s0dell'host. -
Il NAD
ipvlan-networkutilizzainterfaceName: enp2s0in modo che l'IPAM OCI allochi l'IP di interfaccia aggiuntivo dall'interfacciaenp2s0dell'host.
Questo è anche il motivo per cui l'esempio pod imposta:
annotations:
v1.multus-cni.io/default-network: kube-system/oci-vcn-native-network
k8s.v1.cni.cncf.io/networks: default/ipvlan-networkL'annotazione v1.multus-cni.io/default-network garantisce che eth0 utilizzi il NAD oci-vcn-native-network. Senza selezionare esplicitamente quella rete predefinita, OCI IPAM può eseguire l'allocazione da qualsiasi interfaccia host idonea, il che rende l'interfaccia pod primaria meno prevedibile. L'impostazione del NAD predefinito garantisce che eth0 utilizzi l'interfaccia prevista e la mantenga isolata dal collegamento di rete aggiuntivo.
Non combinare queste annotazioni pod Multus con richieste di risorse applicative a livello di pod nella stessa specifica pod. Se un pod multi-interfaccia richiede la selezione della VNIC GVA, definire tale selezione all'interno della configurazione NAD deviceSelector.appResource per ogni interfaccia invece di utilizzare una richiesta di risorse applicative a livello di pod.
Applicare i NAD:
kubectl apply -f oci-vcn-native-network-nad.yamlkubectl apply -f ipvlan-network.yamlAnnotare il pod per selezionare il NAD di rete predefinito e collegare NAD di rete aggiuntivi, ad esempio:
metadata:
annotations:
v1.multus-cni.io/default-network: kube-system/oci-vcn-native-network
k8s.v1.cni.cncf.io/networks: default/ipvlan-network- Descrivere il pod e controllare le annotazioni sullo stato della rete Multus (se presenti):
kubectl describe pod <pod-name> - Se consentito nell'ambiente, eseguire il pod e ispezionare le interfacce (ad esempio,
ifconfigoip addr) per confermare che il pod dispone delle interfacce previste (eth0,net1, …) e degli indirizzi IP.
Opzione 3: Usa profili VNIC secondari senza risorse dell'applicazione
Se si collegano più profili VNIC secondari a un pool di nodi e non si definiscono le risorse dell'applicazione, i pod non vengono collegati a un singolo profilo VNIC secondario dalle richieste di risorse applicate dallo scheduler. Questa opzione non richiede pod per richiedere Extended Resources. I pod che richiedono interfacce aggiuntive devono utilizzare Multus e NetworkAttachmentDefinitions (NAD) per collegare tali interfacce.
Utilizzare questo modello quando l'obiettivo è quello di ridimensionare la capacità IP complessiva del pod, piuttosto che fissare carichi di lavoro diversi a profili diversi utilizzando Risorse applicazione. Per i pod multiinterfaccia, definire la selezione dell'interfaccia nella configurazione NAD, ad esempio utilizzando deviceSelector.interfaceName o deviceSelector.appResource.
Configurazione di max-pod kubelet sui nodi di lavoro
Nella maggior parte dei casi, non è necessario configurare manualmente il kubelet max-pods per i pool di nodi che collegano più profili VNIC secondari per il networking pod. Kubernetes Engine imposta il numero massimo di pod per nodo in base alla capacità IP del pod disponibile sul nodo.
Impostare un valore max-pods personalizzato solo se si dispone di un motivo specifico per limitare manualmente la densità del pod. Quando si sceglie un valore, assicurarsi che non superi la capacità IP del pod disponibile sul nodo.
Per verificare il limite pod effettivo nel cluster, esaminare la capacità/valori allocabili riferiti dal nodo (ad esempio, kubectl describe node <node-name>) e verificare che la densità del carico di lavoro configurata non superi la capacità IP del pod disponibile.
Risoluzione dei problemi
Pod bloccati in stato In sospeso
I pod possono rimanere in stato In sospeso per diversi motivi. Le cause e le soluzioni comuni includono:
-
Causa: capacità insufficiente.
Si verifica quando non sono disponibili IP pod per il profilo VNIC secondario selezionato o quando la capacità per la risorsa applicazione richiesta è insufficiente (se il pod utilizza una risorsa applicazione per selezionare un profilo VNIC secondario specifico).
Soluzione: eseguire lo scale-up del pool di nodi, ridurre il numero di pod o (per i pod multi-interfaccia) ridurre il numero di collegamenti di rete pod aggiuntivi.
-
Causa: tolleranza mancante.
Si verifica quando il pod non dispone della tolleranza richiesta per la riduzione
oci.oraclecloud.com/application-resource-only:NoSchedulesui nodi che espongono le risorse dell'applicazione.Soluzione: aggiungere la tolleranza mancante.
-
Causa: nome risorsa errato.
Si verifica quando il pod richiede una risorsa applicazione (risorsa estesa) che non esiste sui nodi di destinazione.
Soluzione: verificare che i nomi delle risorse dell'applicazione corrispondano alla configurazione del pool di nodi (caso e ortografia). Confermare i nomi delle risorse disponibili in un nodo eseguendo
kubectl describe node <node-name>e controllando la sezioneCapacity. -
Causa: la selezione del nodo impedisce la pianificazione.
Si verifica quando il pod include un
nodeSelectoro altri vincoli di posizionamento che escludono tutti i nodi con la capacità richiesta.Soluzione: verificare che le etichette dei nodi esistano e corrispondano esattamente oppure rimuovere/adeguare i vincoli di selezione dei nodi.
Pod rifiutato al momento della creazione
Se la creazione del pod viene rifiutata dalla convalida dell'ammissione, utilizzare il messaggio di rifiuto per correggere la specifica del pod. I problemi comuni includono la richiesta di combinazioni o quantità non supportate di risorse estese o la specifica di richieste/limiti che non corrispondono al pattern richiesto per la configurazione del cluster.
Il pod multiinterfaccia non ottiene le interfacce previste
Un pod multi-interfaccia potrebbe essere creato correttamente ma non dispone delle interfacce di rete, degli indirizzi IP o del mapping interfaccia-sottorete previsti. Ad esempio, il pod potrebbe non avere un'interfaccia net1, l'interfaccia eth0 potrebbe non utilizzare la rete predefinita prevista o un'interfaccia aggiuntiva potrebbe ricevere un indirizzo IP da una sottorete diversa dal previsto.
Le cause comuni includono:
-
Multus non è in esecuzione in
kube-system. -
Il plugin CNI richiesto, ad esempio
ipvlan, non è presente nei nodi di lavoro. -
Il NAD fa riferimento a un nome di interfaccia host errato.
-
L'annotazione pod fa riferimento al nome NAD o allo spazio di nomi errato.
-
La selezione dell'interfaccia viene suddivisa tra le richieste di risorse dell'applicazione a livello di pod e la configurazione NAD.
Per risolvere il problema, controllare la configurazione nell'ordine in cui Kubernetes e Multus la utilizzano: configurazione del pool di nodi, componenti CNI necessari sul nodo di lavoro, configurazione NAD e annotazioni pod.
Verificare che Multus sia installato e in esecuzione e che i plugin CNI necessari siano presenti su ogni nodo di lavoro in grado di eseguire il carico di lavoro. Verificare che i nomi e gli spazi dei nomi NAD corrispondano alle annotazioni pod e che i valori deviceSelector nel NAD corrispondano ai nomi effettivi dell'interfaccia dei nodi di lavoro o dei nomi delle risorse applicazione.
Non combinare le richieste di risorse dell'applicazione a livello di pod con le annotazioni di rete pod Multus nella stessa specifica pod. Se il pod deve selezionare profili VNIC secondari specifici, definire la selezione nella configurazione NAD.
Dopo aver corretto la configurazione, ricreare il pod e ispezionare l'annotazione dello stato della rete Multus e le interfacce all'interno del pod. Verificare che il pod disponga delle interfacce previste, ad esempio eth0 e net1, e che gli indirizzi IP siano allocati dalle subnet previste.
Best practice
Quando si collegano più VNIC secondarie per la rete pod, tenere presenti le procedure ottimali riportate di seguito.
-
Decidere se i carichi di lavoro richiedono un singolo percorso di rete o più interfacce pod. Utilizzare Risorse applicazione per fissare i pod a un profilo VNIC secondario specifico quando i carichi di lavoro devono indirizzare esattamente un profilo. Utilizzare Multus e NetworkAttachmentDefinitions (NAD) quando i pod devono collegare più interfacce.
-
Pianificare prima la segmentazione della rete (subnet/NSG/zone di sicurezza). Se si utilizzano le risorse dell'applicazione, mappare ogni risorsa dell'applicazione al profilo VNIC secondario, alla subnet e ai gruppi NSG appropriati.
-
Ridimensiona correttamente le allocazioni
ipCounte risparmia tempo per ridurre i problemi di pianificazione. Esamina la capacità della subnet e plasma i limiti VNIC nell'ambito della pianificazione della capacità. -
Utilizzare una denominazione coerente per le risorse dell'applicazione e i nomi visualizzati della VNIC. Se si utilizza Multus, utilizzare anche la denominazione coerente per i NAD e il documento in cui il NAD seleziona l'interfaccia host o il profilo VNIC.
-
Monitorare la capacità e lo stato della pianificazione. Se si utilizzano le risorse dell'applicazione, monitorare l'utilizzo delle risorse dell'applicazione e gli avvisi relativi a capacità ridotta e errori di pianificazione (per tipo di risorsa). Se non si utilizzano risorse dell'applicazione, monitorare il consumo complessivo di IP pod e gli errori di pianificazione dei pod per il pool di nodi.
-
Applicare il principio del privilegio minimo alle regole NSG per consentire solo il traffico di rete minimo necessario al funzionamento del carico di lavoro e abilitare i log di flusso VCN. Non combinare le annotazioni di rete pod Multus con le richieste di risorse applicative a livello di pod nella stessa specifica pod; se i pod multi-interfaccia richiedono la selezione del profilo VNIC, definire la selezione nella configurazione NAD.