Informationen zur benutzerdefinierten Ressource „ClusterCIDRConfig“

Überblick

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

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

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

  • Alle Pod-CIDRs werden von 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-Bereich ist ein großer Bereich. Es kann schwierig sein, einen zusammenhängenden Block von IP-Adressen zu finden, der die Anforderungen des Clusters erfüllt.

  • 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 vermehrt sich dieser Verschwendung auf allen Knoten im Cluster.

Mit der ClusterCIDRConfig-Funktion können Sie die Zuweisung eines großen CIDR-Blocks zu einem Cluster vermeiden, die Clustergröße der Größe Ihrer Pods zuordnen und so IP-Adressen beibehalten. Sie können IP-Adressen speichern, indem Sie ClusterCIDRConfigs mit verschiedenen Kombinationen von 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

  • Unterschiedliche Blockgrößen den Knoten zugewiesen

GKE on Bare Metal verwendet die ClusterCIDRConfig-Funktionalität in den folgenden Features:

Cluster.spec.clusterNetwork.pods.cidrBlocks ist ein optionales Feld und nicht standardmäßig definiert. Sie müssen sie definieren, wenn sie in einem der Features 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 wird 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-Flach (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 nicht das IPv6-CIDR an.

Geben Sie ClusterCIDRConfigs sowohl mit IPv4- als auch mit IPv6-CIDRs an. Das in allen ClusterCIDRConfigs konfigurierte IPv4-CIDR muss mit dem IPv4-CIDR-Bereich von Cluster.spec.clusterNetwork.pods.cidrBlocks übereinstimmen, einschließlich des Werts „PerNodeMask“ für IPv4. Weitere Informationen zu ClusterCIDRConfig und Beispiele für die Verwendung finden Sie unter Beispiele: Dualstack (IPv4 Island, IPv6 Flat)

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

Benutzerdefinierte CIDRConfig-Ressource vom Typ ClusterCIDRConfig konfigurieren

ClusterCIDRConfig

Beachten Sie beim Konfigurieren der benutzerdefinierten CIDRConfig-Ressource „ClusterCIDRConfig“ die folgenden Punkte:

  • Die Pod-CIDR-Zuweisung von einer bestimmten ClusterCIDRConfig zu einem Knoten basiert auf der Labelauswahl. 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 entsprechende ClusterCIDRConfig gefunden wird, behält dieser den Status „NotReady“ bei, bis eine ClusterCIDRConfig mit übereinstimmenden Labels erstellt wird.

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

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

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

    • Wenn mehrere ClusterCIDRConfig konfiguriert sind, müssen alle ClusterCIDRConfigs DualStack-CIDRs haben.

    • Achten Sie darauf, dass sowohl die konfigurierten 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

    Daher ist 32 - 24 == 128 - 120, da die Differenz 8 beträgt.

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

ClusterCIDRConfig-Zuweisungsregeln

Mit den folgenden Regeln für Tiebreaking ermitteln Sie, welche ClusterCIDRConfig zum Zuweisen von Pod-CIDRs zum aktuellen Knoten verwendet wird. Implementieren Sie diese Regeln in der angegebenen Reihenfolge. Implementieren Sie die nächste Regel nur, wenn die vorherige Regel nicht gegen sie verstößt.

  1. Wählen Sie die ClusterCIDRConfig aus, deren NodeSelector mit den meisten Labels im Knoten übereinstimmt. Beispielsweise wird {'node.kubernetes.io/instance-type':'medium', 'rack': 'rack1'} (Match Count: 2) 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. Beispielsweise wird {CIDR: "10.0.0.0/16", PerNodeMaskSize: "16"} (1 possible Pod CIDR) 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) wird vor 25 (2^(32-25)=128 IP-Adressen) ausgewählt.

  4. Wählen Sie die ClusterCIDRConfig aus, deren entsprechendes NodeSelector-Label einen niedrigeren alphanumerischen Wert hat. Beispielsweise wird {'kubernetes.io/hostname': 'node-1'} statt {'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 eine 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 finden Sie Konfigurationsbeispiele für Cluster und ClusterCIDRConfig für alle Netzwerkmodi.