Informationen zur benutzerdefinierten ClusterCIDRConfig-Ressource

Überblick

ClusterCIDRConfig ist eine benutzerdefinierte CIDR-Allocator-Ressource, mit der Sie weitere IP-Adressbereiche für Pods dynamisch zuweisen können.

IP-Adressverwaltung (IP Address Management, IPAM) ermöglicht eine effiziente Nutzung von IP-Subnetzen und vermeidet Überschneidungen in Adressbereichen, die Netzwerkkonflikte und -ausfälle verhindern. Kubernetes weist Pod-CIDRs pro Knoten zu, die als IP-Adressen für die Pods verwendet werden, die auf diesem Knoten ausgeführt werden.

Für das aktuelle Kubernetes NodeIPAM gelten folgende Einschränkungen:

  • Alle Pod-CIDRs werden aus einem Cluster-CIDR zugewiesen. Sie müssen den gesamten IP-Adressbereich angeben, der den größten Cluster zum Zeitpunkt der Clustererstellung berücksichtigt. Durch diese Einschränkung können IP-Adressen verschwendet werden.

  • Wenn Sie die Clustergröße erhöhen, ist es schwierig, weitere IP-Adressen hinzuzufügen.

  • Der Cluster-CIDR ist ein großer Bereich. Es kann schwierig sein, einen zusammenhängenden Block von IP-Adressen zu finden, die die Anforderungen des Clusters erfüllen.

  • Jeder Knoten erhält einen IP-Bereich mit fester Größe innerhalb eines Clusters. Wenn Knoten unterschiedliche Größen und Kapazitäten haben, können Sie einem bestimmten Knoten mit größerer Kapazität keinen größeren Pod-Bereich und Knoten mit geringerer Kapazität einen kleineren Bereich zuweisen. Dadurch werden viele IP-Adressen verschwendet. Bei einem großen Cluster mit vielen Knoten werden diese Verschwendung auf allen Knoten im Cluster verteilt.

Mit der Funktion ClusterCIDRConfig können Sie es vermeiden, einem Cluster einen großen CIDR-Block zuzuweisen, die Clustergröße der Skalierung Ihrer Pods zuzuordnen und so IP-Adressen beizubehalten. Sie können IP-Adressen speichern, indem Sie ClusterCIDRConfigs mit verschiedenen Kombinationen aus CIDR und perNodeMaskSize verwenden. Die ClusterCIDRConfig-Ressource unterstützt Folgendes:

  • Mehrere nicht zusammenhängende IP-CIDR-Blöcke für Cluster-CIDR auf einer detaillierteren Ebene

  • Knotenaffinität von CIDR-Blöcken

  • Knoten unterschiedliche Blockgrößen zuweisen

Google Distributed Cloud verwendet die ClusterCIDRConfig-Funktionalität in den folgenden Funktionen:

Cluster.spec.clusterNetwork.pods.cidrBlocks ist ein optionales Feld und nicht standardmäßig definiert. Sie müssen ihn definieren, wenn er für ein Element aus der vorherigen Liste nicht definiert ist. Er ist beispielsweise erforderlich, wenn die Cluster im IPv4-Inselmodus erstellt werden, und muss angegeben werden, da er als natives Routing-CIDR verwendet wird.

In der folgenden Tabelle ist die Verwendung des Feldverhaltens Cluster.spec.clusterNetwork.pods.cidrBlocks von ClusterCIDRConfig für verschiedene Netzwerkmodi aufgeführt.

Netzwerkmodus ClusterCIDRConfig-Wert
IPv4-Insel (Standardeinstellung) (Pflichtfeld) Geben Sie Cluster.spec.clusterNetwork.pods.cidrBlocks an.
IPv4 Flat (Standard) Cluster.spec.clusterNetwork.pods.cidrBlocks werden vollständig ignoriert und können übersprungen werden. Nutzer müssen ClusterCIDRConfigs explizit definieren (pro Knoten, pro Knotenpool und/oder pro Cluster).
Dual-Stack (IPv4 Island, IPv4 Flat)

Geben Sie das IPv4-CIDR an.

Geben Sie in Cluster.spec.clusterNetwork.pods.cidrBlocks kein IPv6-CIDR an.

Geben Sie ClusterCIDRConfigs mit IPv4- und IPv6-CIDRs an. Die in allen ClusterCIDRConfigs konfigurierte IPv4-CIDR muss mit dem IPv4-CIDR aus Cluster.spec.clusterNetwork.pods.cidrBlocks identisch sein, einschließlich des PerNodeMask-Werts für IPv4. Weitere Informationen zu ClusterCIDRConfig und Beispiele zu seiner Verwendung finden Sie unter Beispiele: Dualstack (IPv4-Insel, IPv6 Flat)

Dual-Stack (Flat IPv4, Flat IPv6) Sie können Cluster.spec.clusterNetwork.pods.cidrBlocks überspringen, da sie vollständig ignoriert werden. Sie müssen ClusterCIDRConfigs (pro Knoten, pro Knotenpool und/oder pro Cluster) explizit mit IPv4- und IPv6-CIDRs definieren.

Benutzerdefinierte CIDR-Allocator-Ressource ClusterCIDRConfig konfigurieren

ClusterCIDRConfig

Berücksichtigen Sie beim Konfigurieren der benutzerdefinierten CIDR-Zuteilungsressource ClusterCIDRConfig die folgenden Punkte:

  • Die Pod-CIDR-Zuweisung von einer bestimmten ClusterCIDRConfig zu einem Knoten basiert auf Labelselektoren. Dies ähnelt dem nodeSelector-Mechanismus, der zum Planen von Pods auf einem Knoten verwendet wird.

  • Sie müssen die ClusterCIDRConfig beim Erstellen des Clusters in der YAML-Datei für die Clusterkonfiguration konfigurieren. Nachdem Sie ClusterCIDRConfigs angegeben haben, können Sie die Werte später nicht mehr ändern.

  • Sie können mehrere ClusterCIDRConfigs mit überlappenden CIDRs angeben.

  • Wenn für einen Knoten keine passende ClusterCIDRConfig gefunden wird, bleibt der Knoten im Status NotReady, bis eine ClusterCIDRConfig mit passenden Labels erstellt wird.

  • Wenn der am besten passenden ClusterCIDRConfig keine weiteren CIDRs für die Zuweisung zur Verfügung stehen, wird das nächstbeste CIDR ausgewählt und die Pod-CIDRs werden aus den verfügbaren CIDRs zugewiesen.

  • Wenn Sie bei einem Dual-Stack-Modell Dual-Stack-Pod-CIDRs für die Knoten zuweisen möchten, gehen Sie so vor:

    • Konfigurieren Sie sowohl IPv4- als auch IPv6-CIDRs in ClusterCIDRConfig.

    • Achten Sie darauf, dass alle ClusterCIDRConfig DualStack CIDRs hat, wenn mehrere ClusterCIDRConfig konfiguriert sind.

    • Achten Sie darauf, dass sowohl die IPv4- als auch die IPv6-CIDRs die gleiche Anzahl von zuweisbaren IP-Adressen pro Knoten haben.

    Beispiel: 32 - spec.IPv4.PerNodeMaskSize == 128 - spec.IPv6.PerNodeMaskSize

    spec.IPv4.PerNodeMaskSize = 24

    spec.IPv6.PerNodeMaskSize = 120

    32 - 24 = 128 - 120, da die Differenz 8 ist.

  • Mehrere ClusterCIDRConfigs können die Labels von nodeSelector mit Knotenlabels abgleichen.

ClusterCIDRConfig-Zuweisungsregeln

Um zu ermitteln, welche ClusterCIDRConfig verwendet wird, um dem aktuellen Knoten Pod-CIDRs zuzuweisen, verwenden Sie die folgenden Tiebreaker-Regeln. Implementieren Sie diese Regeln in der angegebenen Reihenfolge. Implementieren Sie die nächste Regel nur, wenn die vorherige Regel nicht gleichwertig ist.

  1. Wählen Sie die ClusterCIDRConfig aus, deren NodeSelector mit den meisten Labels auf dem Knoten übereinstimmt. Beispiel: {'node.kubernetes.io/instance-type':'medium', 'rack': 'rack1'} (Match Count: 2) wird vor {'node.kubernetes.io/instance-type': 'medium'}. (Match Count: 1) ausgewählt.

  2. Wählen Sie die ClusterCIDRConfig mit den wenigsten zuweisbaren Pod-CIDRs aus. Beispiel: {CIDR: "10.0.0.0/16", PerNodeMaskSize: "16"} (1 possible Pod CIDR) wird vor {CIDR: "192.168.0.0/20", PerNodeMaskSize: "22"} (4 possible Pod CIDRs) ausgewählt.

  3. Wählen Sie die ClusterCIDRConfig aus, deren PerNodeMaskSize die wenigsten IP-Adressen hat. Beispiel: 27 (2^(32 - 27)= 32 IP-Adressen), die vor 25 ausgewählt wurden (2^(32 – 25)=128 IP-Adressen).

  4. Wählen Sie die ClusterCIDRConfig aus, deren entsprechendes NodeSelector-Label einen niedrigeren alphanumerischen Wert hat. Beispielsweise wird {'kubernetes.io/hostname': 'node-1'} vor {'node.kubernetes.io/instance-type':'medium'} ausgewählt.

  5. Wählen Sie die ClusterCIDRConfig aus, deren CIDR-IP-Adresse einen niedrigeren Wert hat. Unabhängig davon, ob die Konfiguration eine IPv4- oder DualStack-Konfiguration ist, werden nur die IPv4-CIDRs verglichen. Beispiel: {CIDR: "10.0.0.0/16"} is picked over {CIDR: "192.168.0.0/16"}.

Konfigurationsbeispiele

In diesem Abschnitt sind Konfigurationsbeispiele für Cluster und ClusterCIDRConfig für alle Netzwerkmodi aufgeführt.