Comprendi la risorsa personalizzata ClusterCIDRConfig

Panoramica

ClusterCIDRConfig è una risorsa di allocatore CIDR personalizzato che consente di allocare in modo dinamico più intervalli di indirizzi IP per i pod.

La gestione degli indirizzi IP (IPAM, IP Address Management) consente un uso efficiente delle subnet IP ed evita sovrapposizioni negli intervalli di indirizzi, che prevengono conflitti di rete e interruzioni. Kubernetes assegna per nodo i CIDR dei pod, che vengono utilizzati come indirizzi IP per i pod in esecuzione su quel nodo.

L'attuale NodeIPAM di Kubernetes ha le seguenti limitazioni:

  • Tutti i CIDR dei pod sono allocati da un CIDR del cluster. Devi specificare l'intero intervallo di indirizzi IP tenendo conto del cluster più grande al momento della creazione del cluster. Questo limite può causare lo spreco di indirizzi IP.

  • Se aumenti le dimensioni del cluster, diventa difficile aggiungere altri indirizzi IP.

  • Il CIDR del cluster è un intervallo ampio. Potrebbe essere difficile trovare un blocco contiguo di indirizzi IP che soddisfi le esigenze del cluster.

  • Ogni nodo riceve un intervallo IP di dimensioni fisse all'interno di un cluster. Se i nodi sono di dimensioni e capacità diverse, non puoi allocare un intervallo di pod più ampio a un dato nodo con capacità maggiore e un intervallo inferiore ai nodi con minore capacità. Questo fa sprecare molti indirizzi IP. Per un cluster di grandi dimensioni con molti nodi, questi sprechi vengono aggravati in tutti i nodi del cluster.

Con la funzionalità ClusterCIDRConfig, puoi evitare di assegnare un blocco CIDR di grandi dimensioni a un cluster, mappare le dimensioni del cluster alla scala dei pod e quindi conservare gli indirizzi IP. Puoi salvare gli indirizzi IP utilizzando ClusterCIDRConfigs con diverse combinazioni di CIDR e perNodeMaskSize. La risorsa ClusterCIDRConfig supporta quanto segue:

  • Più blocchi CIDR IP non consecutivi per il CIDR del cluster a un livello più granulare

  • Affinità nodo dei blocchi CIDR

  • Dimensioni dei blocchi diverse allocate ai nodi

Google Distributed Cloud utilizza la funzionalità ClusterCIDRConfig nelle seguenti funzionalità:

Cluster.spec.clusterNetwork.pods.cidrBlocks è un campo facoltativo e non è definito per impostazione predefinita. Devi definirlo se non è presente una qualsiasi delle caratteristiche nell'elenco precedente. Ad esempio, è obbligatorio se i cluster vengono creati in modalità a isola IPv4 e deve essere specificato perché viene utilizzato come CIDR di routing nativo.

La tabella seguente elenca l'utilizzo del comportamento del campo Cluster.spec.clusterNetwork.pods.cidrBlocks di ClusterCIDRConfig per le diverse modalità di rete.

Modalità rete Valore ClusterCIDRConfig
Isola IPv4 (predefinita) (Campo obbligatorio) Specifica Cluster.spec.clusterNetwork.pods.cidrBlocks.
IPv4 piatto (predefinito) Cluster.spec.clusterNetwork.pods.cidrBlocks vengono completamente ignorati e possono essere ignorati. Gli utenti devono definire esplicitamente ClusterCIDRConfigs (per nodo, per pool di nodi e/o per cluster).
Dual stack (isola IPv4, IPv4 piatto)

Specifica il CIDR IPv4.

Non specificare il CIDR IPv6 in Cluster.spec.clusterNetwork.pods.cidrBlocks.

Specifica ClusterCIDRConfigs con CIDR IPv4 e IPv6. Il CIDR IPv4 configurato in tutti i ClusterCIDRConfigs deve essere uguale al CIDR IPv4 di Cluster.spec.clusterNetwork.pods.cidrBlocks, incluso il valore PerNodeMask per IPv4. Per ulteriori informazioni su ClusterCIDRConfig ed esempi su come utilizzarlo, consulta Esempi: Dualstack (isola IPv4, IPv6 Flat)

Dual stack (IPv4 piatto, IPv6 piatto) Puoi saltare Cluster.spec.clusterNetwork.pods.cidrBlocks perché vengono completamente ignorati. Devi definire in modo esplicito i ClusterCIDRConfig (per nodo, per pool di nodi e/o per cluster) con CIDR IPv4 e IPv6.

Configurazione della risorsa allocatore CIDR personalizzato ClusterCIDRConfig

ClusterCIDRConfig

Quando configuri la risorsa allocator CIDR personalizzato ClusterCIDRConfig, considera i seguenti punti:

  • L'assegnazione del CIDR dei pod da un determinato ClusterCIDRConfig a un nodo si basa sui selettori di etichette. È simile al meccanismo nodeSelector usato per pianificare i pod su un nodo.

  • Devi configurare ClusterCIDRConfig durante il processo di creazione del cluster nel file YAML di configurazione del cluster. Una volta specificato ClusterCIDRConfigs, non puoi modificare i valori in un secondo momento.

  • Puoi specificare più ClusterCIDRConfig con CIDR sovrapposti.

  • Se non viene trovato un ClusterCIDRConfig corrispondente per un nodo, il nodo rimane in stato NotReady, fino a quando non viene creato un ClusterCIDRConfig con etichette corrispondenti.

  • Se la corrispondenza migliore ClusterCIDRConfig non ha più CIDR disponibili per l'allocazione, viene scelto il CIDR successivo migliore e i CIDR dei pod vengono allocati dai CIDR disponibili.

  • In caso di modello a doppio stack, se vuoi assegnare CIDR pod a doppio stack ai nodi, segui questi passaggi:

    • Configura i CIDR IPv4 e IPv6 in ClusterCIDRConfig.

    • Assicurati che tutti i ClusterCIDRConfig abbiano CIDR DualStack, se sono configurati più ClusterCIDRConfig.

    • Assicurati che i CIDR IPv4 e IPv6 configurati abbiano un numero uguale di indirizzi IP allocabili per nodo.

    Ad esempio, 32 - spec.IPv4.PerNodeMaskSize == 128 - spec.IPv6.PerNodeMaskSize

    spec.IPv4.PerNodeMaskSize = 24

    spec.IPv6.PerNodeMaskSize = 120

    Di conseguenza, 32-24 == 128-120, poiché la differenza è 8.

  • Più ClusterCIDRConfigs possono associare le etichette di nodeSelector alle etichette dei nodi.

Regole di assegnazione ClusterCIDRConfig

Per determinare quale ClusterCIDRConfig viene utilizzato per assegnare i CIDR dei pod al nodo attuale, utilizza le seguenti regole di tie-breaking. Implementa queste regole nell'ordine specificato. Implementa la regola successiva solo se il legame non è interrotto dalla regola precedente.

  1. Scegli il ClusterCIDRConfig il cui NodeSelector corrisponde al maggior numero di etichette nel nodo. Ad esempio, {'node.kubernetes.io/instance-type':'medium', 'rack': 'rack1'} (Match Count: 2) viene scelto prima di {'node.kubernetes.io/instance-type': 'medium'}. (Match Count: 1).

  2. Scegli il ClusterCIDRConfig con il minor numero di CIDR dei pod allocabili. Ad esempio, {CIDR: "10.0.0.0/16", PerNodeMaskSize: "16"} (1 possible Pod CIDR) viene scelto prima di {CIDR: "192.168.0.0/20", PerNodeMaskSize: "22"} (4 possible Pod CIDRs).

  3. Scegli il ClusterCIDRConfig il cui PerNodeMaskSize ha il minor numero di indirizzi IP. Ad esempio, 27 (2^(32-27)= 32 indirizzi IP) selezionati prima di 25 (2^(32-25)=128 indirizzi IP).

  4. Scegli il ClusterCIDRConfig la cui etichetta NodeSelector corrispondente ha un valore alfanumerico inferiore. Ad esempio, {'kubernetes.io/hostname': 'node-1'} viene scelto invece di {'node.kubernetes.io/instance-type':'medium'}.

  5. Scegli il ClusterCIDRConfig il cui IP CIDR ha un valore più basso. Indipendentemente dal fatto che la configurazione sia IPv4 o DualStack, vengono confrontate solo le CIDR IPv4. Ad esempio, {CIDR: "10.0.0.0/16"} is picked over {CIDR: "192.168.0.0/16"}.

Esempi di configurazione

Questa sezione elenca esempi di configurazione per Cluster e ClusterCIDRConfig per tutte le modalità di networking.