Ce document explique comment créer un cluster Kubernetes partagé dans une zone isolée Google Distributed Cloud (GDC). Un cluster partagé s'étend sur plusieurs projets et inclut des services complets gérés par GDC. Il offre une configuration de cluster Kubernetes très spécifique, moins configurable que le cluster standard. Pour en savoir plus sur les clusters standards, consultez Configurations de cluster Kubernetes.
Les clusters partagés sont une ressource zonale et ne peuvent pas s'étendre sur plusieurs zones. Pour exploiter des clusters dans un univers multizone, vous devez créer manuellement des clusters dans chaque zone.
Ce document s'adresse à des audiences telles que les développeurs d'applications du groupe d'opérateurs d'applications, qui sont chargés de gérer les charges de travail de conteneurs au sein de leur organisation. Pour en savoir plus, consultez la documentation sur les audiences pour GDC sous air gap.
Avant de commencer
Pour obtenir les autorisations nécessaires pour créer un cluster partagé, demandez à votre administrateur IAM de l'organisation de vous accorder le rôle d'administrateur de cluster utilisateur (
user-cluster-admin). Ce rôle n'est pas lié à un espace de noms.Pour utiliser l'API ou Terraform afin de créer un cluster partagé, générez le fichier kubeconfig du serveur d'API zonal pour héberger votre cluster. Pour en savoir plus, consultez Se connecter. Définissez la variable d'environnement
MANAGEMENT_API_SERVERsur le chemin d'accès à kubeconfig.Planifiez les limites suivantes de Google Distributed Cloud (GDC) sous air gap pour les clusters Kubernetes :
- 16 clusters par organisation
- 42 nœuds de calcul par cluster, avec un minimum de trois nœuds de calcul
- 4 620 pods par cluster
- 110 pods par nœud
Planifier le bloc CIDR des pods
Pour allouer le bloc CIDR de pod de taille appropriée à vos charges de travail, vous devez calculer le nombre d'adresses IP requises pour votre cluster Kubernetes avant de le créer. La plupart des paramètres réseau ne peuvent pas être modifiés une fois le cluster créé.
Un cluster Kubernetes suit la logique suivante lors de l'attribution d'adresses IP :
- Kubernetes attribue un bloc CIDR
/24composé de 256 adresses à chacun des nœuds. Ce nombre respecte le nombre maximal par défaut de 110 pods par nœud pour les clusters Kubernetes. - La taille du bloc CIDR attribué à un nœud dépend du nombre maximal de pods par nœud.
- Le bloc contient toujours au moins deux fois plus d'adresses que le nombre maximal de pods par nœud.
Consultez l'exemple suivant pour comprendre comment la valeur par défaut de Taille du masque par nœud= /24 a été calculée pour prendre en charge 110 pods :
Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220
Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256
Déterminez le masque CIDR de pod requis pour configurer le cluster Kubernetes en fonction du nombre de nœuds requis. Planifiez l'ajout de futurs nœuds au cluster lors de la configuration de la plage CIDR :
Total number of nodes supported = 2(Per node mask size - pod CIDR mask)
Étant donné qu'il existe une taille de masque par nœud par défaut (/24), consultez le tableau suivant qui mappe le masque CIDR du pod au nombre de nœuds compatibles.
| Masque CIDR du pod | Calcul : 2(taille du masque par nœud – masque CIDR) | Nombre maximal de nœuds compatibles, y compris les nœuds du plan de contrôle |
|---|---|---|
| /21 | 2(24 - 21) | 8 |
| /20 | 2(24-20) | 16 |
| /19 | 2(24 - 19) | 32 |
| /18 | 2(24 - 18) | 64 |
Après avoir calculé le bloc CIDR de votre pod pour votre cluster Kubernetes, configurez-le dans le workflow de création de cluster de la section suivante.
Créer un cluster partagé
Pour créer un cluster Kubernetes partagé :
Console
Dans le menu de navigation, sélectionnez Kubernetes Engine > Clusters.
Cliquez sur Créer un cluster.
Dans le champ Nom, spécifiez un nom pour le cluster.
Sélectionnez la version de Kubernetes pour le cluster.
Sélectionnez la zone dans laquelle créer le cluster.
Cliquez sur Associer un projet, puis sélectionnez un projet existant à associer à votre cluster. Cliquez ensuite sur Enregistrer. Vous pouvez associer ou dissocier des projets après avoir créé le cluster à partir de la page d'informations sur le projet. Vous devez associer un projet à votre cluster avant de déployer des charges de travail de conteneur.

Cliquez sur Suivant.
Configurez les paramètres réseau de votre cluster. Vous ne pouvez pas modifier ces paramètres réseau après avoir créé le cluster. Le protocole Internet par défaut et unique compatible avec les clusters Kubernetes est le protocole Internet version 4 (IPv4).
Si vous souhaitez créer des nœuds d'équilibreur de charge dédiés, saisissez le nombre de nœuds à créer. Par défaut, vous ne recevez aucun nœud et le trafic de l'équilibreur de charge transite par les nœuds de contrôle.
Sélectionnez le CIDR de service (Classless Inter-Domain Routing) à utiliser. Les adresses IP de vos services déployés, tels que les équilibreurs de charge, sont attribuées à partir de cette plage.
Sélectionnez la plage CIDR du pod à utiliser. Le cluster alloue des adresses IP de cette plage à vos pods et VM.
Cliquez sur Suivant.
Consultez les détails du pool de nœuds par défaut généré automatiquement pour le cluster. Cliquez sur edit Modifier pour modifier le pool de nœuds par défaut.
Pour créer d'autres pools de nœuds, sélectionnez Ajouter un pool de nœuds. Lorsque vous modifiez le pool de nœuds par défaut ou que vous en ajoutez un, vous pouvez le personnaliser à l'aide des options suivantes :
- Attribuez un nom au pool de nœuds. Vous ne pouvez pas modifier le nom après avoir créé le pool de nœuds.
- Spécifiez le nombre de nœuds de calcul à créer dans le pool de nœuds.
Sélectionnez la classe de machine qui correspond le mieux aux exigences de votre charge de travail. Consultez la liste des paramètres suivants :
- Type de machine
- Processeur
- Mémoire
Cliquez sur Enregistrer.
Cliquez sur Créer pour créer le cluster.
La création d'un cluster partagé peut prendre jusqu'à 90 minutes.
API
Créez la ressource personnalisée
Cluster:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platform spec: clusterNetwork: podCIDRSize: POD_CIDR serviceCIDRSize: SERVICE_CIDR initialVersion: kubernetesVersion: KUBERNETES_VERSION nodePools: - machineTypeName: MACHINE_TYPE name: NODE_POOL_NAME nodeCount: NUMBER_OF_WORKER_NODES taints: TAINTS labels: LABELS acceleratorOptions: gpuPartitionScheme: GPU_PARTITION_SCHEME releaseChannel: channel: UNSPECIFIED EOFRemplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès kubeconfig du serveur d'API zonal.CLUSTER_NAME: nom du cluster. Le nom du cluster ne doit pas se terminer par-system. Le suffixe-systemest réservé aux clusters créés par GDC.POD_CIDR: taille des plages réseau à partir desquelles les adresses IP virtuelles des pods sont allouées. Si elle n'est pas définie, la valeur par défaut21est utilisée.SERVICE_CIDR: taille des plages de réseau à partir desquelles les adresses IP virtuelles de service sont allouées. Si elle n'est pas définie, la valeur par défaut23est utilisée.KUBERNETES_VERSION: version Kubernetes du cluster, par exemple1.26.5-gke.2100. Pour lister les versions Kubernetes disponibles à configurer, consultez Lister les versions Kubernetes disponibles pour un cluster.MACHINE_TYPE: type de machine pour les nœuds de calcul du pool de nœuds. Consultez les types de machines disponibles pour connaître les configurations possibles.NODE_POOL_NAME: nom du pool de nœuds.NUMBER_OF_WORKER_NODES: nombre de nœuds de calcul à provisionner dans le pool de nœuds.TAINTS: rejets à appliquer aux nœuds de ce pool de nœuds. Ce champ est facultatif.LABELS: libellés à appliquer aux nœuds de ce pool de nœuds. Il contient une liste de paires clé/valeur. Ce champ est facultatif.GPU_PARTITION_SCHEME: schéma de partitionnement du GPU, si vous exécutez des charges de travail de GPU. Ce champ est facultatif. Exemple :mixed-2Le GPU n'est pas partitionné si ce champ n'est pas défini. Pour en savoir plus sur les profils MIG (Multi-Instance GPU) disponibles, consultez Profils MIG compatibles.
La création d'un cluster partagé peut prendre jusqu'à 90 minutes.
Créez la ressource personnalisée
ProjectBinding:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectBinding metadata: name: CLUSTER_NAME-PROJECT_NAME namespace: platform labels: resourcemanager.gdc.goog/projectbinding-for-user-project: "true" spec: clusterRef: name: CLUSTER_NAME selector: nameSelector: matchNames: - PROJECT_NAME EOFRemplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès kubeconfig du serveur d'API zonal.CLUSTER_NAME: nom du cluster.PROJECT_NAME: nom du projet auquel associer le service. Chaque ressourceProjectBindingne peut être associée qu'à un seul cluster. Si un projet nécessite d'accéder à plusieurs clusters, unProjectBindingunique doit être créé pour chaque cluster.
Vous devez associer un projet à votre cluster avant qu'un développeur puisse y déployer des charges de travail de conteneur.
Terraform
Dans un fichier de configuration Terraform, insérez l'extrait de code suivant pour créer la ressource personnalisée
Cluster:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "CLUSTER_RESOURCE_NAME" { manifest = { "apiVersion" = "cluster.gdc.goog/v1" "kind" = "Cluster" "metadata" = { "name" = "CLUSTER_NAME" "namespace" = "platform" } "spec" = { "clusterNetwork" = { "podCIDRSize" = "POD_CIDR" "serviceCIDRSize" = "SERVICE_CIDR" } "initialVersion" = { "kubernetesVersion" = "KUBERNETES_VERSION" } "nodePools" = [{ "machineTypeName" = "MACHINE_TYPE" "name" = "NODE_POOL_NAME" "nodeCount" = "NUMBER_OF_WORKER_NODES" "taints" = "TAINTS" "labels" = "LABELS" "acceleratorOptions" = { "gpuPartitionScheme" = "GPU_PARTITION_SCHEME" } }] "releaseChannel" = { "channel" = "UNSPECIFIED" } } } }Remplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès kubeconfig du serveur d'API zonal.CLUSTER_RESOURCE_NAME: nom unique de la ressource Terraform du cluster, tel quecluster-1. Ce nom est utilisé par Terraform pour identifier votre cluster, mais pas par GDC.CLUSTER_NAME: nom du cluster. Le nom du cluster ne doit pas se terminer par-system. Le suffixe-systemest réservé aux clusters créés par GDC.POD_CIDR: taille des plages réseau à partir desquelles les adresses IP virtuelles des pods sont allouées. Si elle n'est pas définie, la valeur par défaut21est utilisée.SERVICE_CIDR: taille des plages de réseau à partir desquelles les adresses IP virtuelles de service sont allouées. Si elle n'est pas définie, la valeur par défaut23est utilisée.KUBERNETES_VERSION: version Kubernetes du cluster, par exemple1.26.5-gke.2100. Pour lister les versions Kubernetes disponibles à configurer, consultez Lister les versions Kubernetes disponibles pour un cluster.MACHINE_TYPE: type de machine pour les nœuds de calcul du pool de nœuds. Consultez les types de machines disponibles pour connaître les configurations possibles.NODE_POOL_NAME: nom du pool de nœuds.NUMBER_OF_WORKER_NODES: nombre de nœuds de calcul à provisionner dans le pool de nœuds.TAINTS: rejets à appliquer aux nœuds de ce pool de nœuds. Ce champ est facultatif.LABELS: libellés à appliquer aux nœuds de ce pool de nœuds. Il contient une liste de paires clé/valeur. Ce champ est facultatif.GPU_PARTITION_SCHEME: schéma de partitionnement du GPU, si vous exécutez des charges de travail de GPU. Ce champ est facultatif. Exemple :mixed-2Le GPU n'est pas partitionné si ce champ n'est pas défini. Pour en savoir plus sur les profils MIG (Multi-Instance GPU) disponibles, consultez Profils MIG compatibles.
Dans un fichier de configuration Terraform, insérez l'extrait de code suivant pour créer la ressource personnalisée
ProjectBinding:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" { manifest = { "apiVersion" = "resourcemanager.gdc.goog/v1" "kind" = "ProjectBinding" "metadata" = { "name" = "CLUSTER_NAME-PROJECT_NAME" "namespace" = "platform" "labels" = { "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true" } } "spec" = { "clusterRef" = { "name" = "CLUSTER_NAME" } "selector" = { "nameSelector" = { "matchNames" = [ "PROJECT_NAME", ] } } } } }Remplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès kubeconfig du serveur d'API zonal.PROJECT_BINDING_RESOURCE_NAME: nom de la ressource Terraform de la liaison de projet, par exempleproject-binding-1. Ce nom est utilisé par Terraform pour identifier l'association de votre projet, mais pas par GDC.CLUSTER_NAME: nom du cluster.PROJECT_NAME: nom du projet auquel associer le service. Chaque ressourceProjectBindingne peut être associée qu'à un seul cluster. Si un projet nécessite d'accéder à plusieurs clusters, unProjectBindingunique doit être créé pour chaque cluster.
Vous devez associer un projet à votre cluster avant qu'un développeur puisse y déployer des charges de travail de conteneur.
Appliquez les nouvelles ressources personnalisées à l'aide de Terraform :
terraform apply
La création d'un cluster partagé peut prendre jusqu'à 90 minutes.
Étapes suivantes
- Déployer une application de conteneur HA
- Charges de travail de conteneur dans GDC
- Hiérarchie des ressources