Comprendre la ressource personnalisée ClusterCIDRConfig

Présentation

ClusterCIDRConfig est une ressource d'allocation CIDR personnalisée qui vous permet d'allouer davantage de plages d'adresses IP aux pods de manière dynamique.

La gestion des adresses IP permet une utilisation efficace des sous-réseaux IP et évite les chevauchements des plages d'adresses, ce qui évite les conflits et les pannes de réseau. Kubernetes attribue des CIDR de pods par nœud, qui sont utilisés comme adresses IP pour les pods exécutés sur ce nœud.

Le service NodeIPAM actuel de Kubernetes présente les limites suivantes:

  • Tous les CIDR des pods sont alloués à partir d'un CIDR de cluster. Vous devez spécifier toute la plage d'adresses IP représentant le cluster le plus grand au moment de la création du cluster. Cette limitation peut gaspiller les adresses IP.

  • Si vous augmentez la taille du cluster, il est difficile d'ajouter des adresses IP.

  • Le CIDR des clusters est une plage étendue. Il peut être difficile de trouver un bloc contigu d'adresses IP répondant aux besoins du cluster.

  • Chaque nœud obtient une plage d'adresses IP de taille fixe dans un cluster. Si la taille et la capacité des nœuds sont différentes, vous ne pouvez pas allouer une plage de pods plus importante à un nœud donné de plus grande capacité, et une plage plus petite aux nœuds ayant une capacité moindre. Cela gaspille beaucoup d'adresses IP. Pour un grand cluster comportant de nombreux nœuds, ces déchets sont aggravés sur tous les nœuds du cluster.

Avec la fonctionnalité ClusterCIDRConfig, vous pouvez éviter d'attribuer un grand bloc CIDR à un cluster, mapper la taille de votre cluster à l'échelle de vos pods et donc conserver les adresses IP. Vous pouvez enregistrer des adresses IP en utilisant des ClusterCIDRConfigs avec différentes combinaisons de CIDR et perNodeMaskSize. La ressource ClusterCIDRConfig est compatible avec les éléments suivants:

  • Plusieurs blocs CIDR d'adresses IP non contiguës pour le CIDR des clusters à un niveau plus précis

  • Affinité de nœud pour les blocs CIDR

  • Différentes tailles de blocs allouées aux nœuds

GKE sur Bare Metal utilise la fonctionnalité ClusterCIDRConfig dans les fonctionnalités suivantes:

Cluster.spec.clusterNetwork.pods.cidrBlocks est un champ facultatif et n'est pas défini par défaut. Vous devez la définir si l'une des caractéristiques de la liste précédente ne l'a pas été. Par exemple, il est obligatoire lorsque les clusters sont créés en mode île IPv4 et doit être spécifié, car il est utilisé comme CIDR de routage natif.

Le tableau suivant décrit l'utilisation du comportement du champ Cluster.spec.clusterNetwork.pods.cidrBlocks de ClusterCIDRConfig pour différents modes de réseau.

Mode réseau Valeur ClusterCIDRConfig
Île IPv4 (par défaut) (Champ obligatoire) Spécifiez Cluster.spec.clusterNetwork.pods.cidrBlocks.
IPv4 plat (par défaut) Les Cluster.spec.clusterNetwork.pods.cidrBlocks sont complètement ignorés et peuvent être ignorés. Les utilisateurs doivent définir explicitement les ClusterCIDRConfigs (par nœud, par pool de nœuds et/ou par cluster).
Double pile (île IPv4, adresse IPv4 plate)

Spécifiez le CIDR IPv4.

Ne spécifiez pas le CIDR IPv6 dans Cluster.spec.clusterNetwork.pods.cidrBlocks.

Spécifiez les ClusterCIDRConfigs avec des CIDR IPv4 et IPv6. Le CIDR IPv4 configuré dans tous les ClusterCIDRConfigs doit être identique au CIDR IPv4 de Cluster.spec.clusterNetwork.pods.cidrBlocks, y compris la valeur PerNodeMask pour IPv4. Pour en savoir plus sur ClusterCIDRConfig et obtenir des exemples d'utilisation, consultez la section Exemples: Dualstack (île IPv4, adresse IPv6 Flat)

Double pile (IPv4 plat, IPv6 plat) Vous pouvez ignorer les Cluster.spec.clusterNetwork.pods.cidrBlocks, car ils sont complètement ignorés. Vous devez définir explicitement les ClusterCIDRConfig (par nœud, par pool de nœuds et/ou par cluster) avec des CIDR IPv4 et IPv6.

Configurer la ressource d'allocation CIDR personnalisée ClusterCIDRConfig

ClusterCIDRConfig

Lorsque vous configurez la ressource d'allocation CIDR personnalisée ClusterCIDRConfig, tenez compte des points suivants:

  • L'attribution CIDR des pods d'un ClusterCIDRConfig spécifique à un nœud repose sur des sélecteurs d'étiquettes. Ce mécanisme est semblable à celui utilisé pour programmer les pods sur un nœud.

  • Vous devez configurer l'objet ClusterCIDRConfig lors du processus de création du cluster dans le fichier YAML de configuration du cluster. Une fois que vous aurez spécifié ClusterCIDRConfigs, vous ne pourrez plus modifier les valeurs.

  • Vous pouvez spécifier plusieurs ClusterCIDRConfigs avec des CIDR qui se chevauchent.

  • Si aucun ClusterCIDRConfig correspondant n'est trouvé pour un nœud, celui-ci reste à l'état NotReady jusqu'à ce qu'un ClusterCIDRConfig avec les libellés correspondants soit créé.

  • Si le ClusterCIDRConfig correspondant le mieux ne dispose pas d'un plus grand nombre de CIDR disponibles pour l'allocation, le meilleur CIDR suivant est choisi et les CIDR des pods sont alloués à partir des CIDR disponibles.

  • Dans le modèle à double pile, si vous souhaitez attribuer des CIDR de pods à double pile aux nœuds, procédez comme suit:

    • Configurez les CIDR IPv4 et IPv6 dans le ClusterCIDRConfig.

    • Si plusieurs ClusterCIDRConfig sont configurés, assurez-vous que tous les ClusterCIDRConfig disposent de CIDR DualStack.

    • Assurez-vous que les CIDR IPv4 et IPv6 configurés disposent d'un nombre égal d'adresses IP pouvant être allouées par nœud.

    Par exemple : 32 - spec.IPv4.PerNodeMaskSize == 128 - spec.IPv6.PerNodeMaskSize

    spec.IPv4.PerNodeMaskSize = 24

    spec.IPv6.PerNodeMaskSize = 120

    Ainsi, 32 - 24 == 128 - 120, la différence étant de 8.

  • Plusieurs ClusterCIDRConfig peuvent faire correspondre les étiquettes de nodeSelector à celles de nœud.

Règles d'attribution ClusterCIDRConfig

Pour déterminer quel ClusterCIDRConfig est utilisé pour attribuer des CIDR de pods au nœud actuel, utilisez les règles de rupture d'égalité suivantes. Mettez en œuvre ces règles dans l'ordre indiqué. N'appliquez la règle suivante que si l'égalité n'est pas rompue par la règle précédente.

  1. Sélectionnez le ClusterCIDRConfig dont NodeSelector correspond au plus de libellés sur le nœud. Par exemple, {'node.kubernetes.io/instance-type':'medium', 'rack': 'rack1'} (Match Count: 2) est sélectionné avant {'node.kubernetes.io/instance-type': 'medium'}. (Match Count: 1).

  2. Sélectionnez le ClusterCIDRConfig comportant le plus petit nombre de CIDR de pods pouvant être alloués. Par exemple, {CIDR: "10.0.0.0/16", PerNodeMaskSize: "16"} (1 possible Pod CIDR) est sélectionné avant {CIDR: "192.168.0.0/20", PerNodeMaskSize: "22"} (4 possible Pod CIDRs).

  3. Sélectionnez le ClusterCIDRConfig dont PerNodeMaskSize possède le plus petit nombre d'adresses IP. Par exemple, 27 (2^(32-27)= 32 adresses IP) sélectionnées avant 25 (2^(32-25)=128 adresses IP).

  4. Sélectionnez le ClusterCIDRConfig dont le libellé NodeSelector correspondant possède une valeur alphanumérique inférieure. Par exemple, {'kubernetes.io/hostname': 'node-1'} est choisi sur {'node.kubernetes.io/instance-type':'medium'}.

  5. Sélectionnez le ClusterCIDRConfig dont l'adresse IP CIDR a une valeur inférieure. Qu'il s'agisse d'une configuration IPv4 ou DualStack, seuls les CIDR IPv4 sont comparés. Par exemple, {CIDR: "10.0.0.0/16"} is picked over {CIDR: "192.168.0.0/16"}.

Exemples de configuration

Cette section répertorie des exemples de configuration de Cluster et de ClusterCIDRConfig pour tous les modes de mise en réseau.