Créer un cluster standard pour exécuter des charges de travail de conteneurs

Ce document explique comment créer un cluster Kubernetes standard dans une zone Google Distributed Cloud (GDC) sous air gap. Un cluster standard fournit un cluster Kubernetes hautement configurable à l'échelle du projet, qui inclut un ensemble minimal de services gérés. Le cluster standard offre plus de flexibilité pour la configuration des services que le cluster partagé, mais nécessite également davantage d'efforts en termes de gestion. Pour en savoir plus sur les clusters standards, consultez Configurations de cluster Kubernetes.

Les clusters standards sont des ressources zonales 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 Audiences pour la documentation GDC sous air gap.

Avant de commencer

  • Vérifiez que vous disposez de la configuration appropriée pour accéder aux clusters standards et les gérer. Pour en savoir plus, consultez Gérer l'accès aux clusters standards.

  • Pour obtenir les autorisations nécessaires pour créer un cluster standard, demandez à votre administrateur IAM de l'organisation de vous accorder les rôles Administrateur IAM du projet (project-iam-admin) et Administrateur de cluster standard (standard-cluster-admin). Ces rôles sont liés à l'espace de noms de votre projet.

  • 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 /24 composé 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 valeur de 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 de /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 standard

Pour créer un cluster standard, procédez comme suit :

API

  1. Créez une ressource personnalisée Cluster et enregistrez-la en tant que fichier YAML, par exemple cluster.yaml :

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: PROJECT_NAME
    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 :

    • CLUSTER_NAME : nom du cluster. Le nom du cluster ne doit pas se terminer par -system. Le suffixe -system est réservé aux clusters créés par GDC.
    • PROJECT_NAME : nom du projet dans lequel créer le cluster.
    • 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éfaut 21 est 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éfaut 23 est utilisée.
    • KUBERNETES_VERSION : version Kubernetes du cluster, par exemple 1.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-2 Le 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.
  2. Appliquez la ressource personnalisée à votre instance GDC :

    kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER
    

    Remplacez MANAGEMENT_API_SERVER par le chemin d'accès du fichier kubeconfig pour le serveur d'API zonal. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API dans votre zone cible, consultez Se connecter.

La création d'un cluster standard peut prendre jusqu'à 60 minutes.

Terraform

  1. Dans un fichier de configuration Terraform, insérez l'extrait de code suivant :

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "cluster-create" {
      manifest = {
        "apiVersion" = "cluster.gdc.goog/v1"
        "kind" = "Cluster"
        "metadata" = {
          "name" = "CLUSTER_NAME"
          "namespace" = "PROJECT_NAME"
        }
        "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. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API dans votre zone cible, consultez Se connecter.
    • CLUSTER_NAME : nom du cluster. Le nom du cluster ne doit pas se terminer par -system. Le suffixe -system est réservé aux clusters créés par GDC.
    • PROJECT_NAME : nom du projet dans lequel créer le cluster.
    • 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éfaut 21 est 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éfaut 23 est utilisée.
    • KUBERNETES_VERSION : version Kubernetes du cluster, par exemple 1.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-2 Le 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.
  2. Appliquez le nouveau cluster standard à l'aide de Terraform :

    terraform apply
    

La création d'un cluster standard peut prendre jusqu'à 60 minutes.

Étapes suivantes