Créer un cluster d'utilisateur personnalisé

Cette article explique comment personnaliser la configuration d'un cluster d'utilisateur GKE sur AWS.

Vous pourriez souhaiter créer un cluster d'utilisateur personnalisé pour les raisons suivantes :

  • Créer un autre cluster pour un environnement de préproduction ou de test
  • Ajouter des pools de nœuds avec différents types de machines
  • Créer un cluster dans des zones de disponibilité AWS spécifiques

Avant de commencer

Avant de commencer à utiliser GKE sur AWS, veillez à effectuer les tâches suivantes :

  • Installez un service de gestion.

  • Si vous souhaitez créer un cluster sans utiliser terraform output example_cluster, disposez de sous-réseaux AWS privés pour votre plan de contrôle. Chaque sous-réseau doit appartenir à une zone de disponibilité différente dans la même région AWS. Les tables de routage doivent être configurées de façon à autoriser le trafic entre des sous-réseaux privés, et chaque sous-réseau doit avoir accès à une passerelle NAT.

  • Vous devez disposez de votre ID de cloud privé virtuel (VPC) AWS. Un ID de VPC ressemble à vpc-012345678abcde. Cet ID figure dans la console AWS.

Pour vous connecter à vos ressources GKE sur AWS, suivez les instructions suivantes. Indiquez si vous disposez d'un VPC AWS (ou d'une connexion directe à votre VPC) ou si vous avez créé un VPC dédié lors de la création de votre service de gestion.

VPC existant

Si vous disposez d'une connexion directe ou VPN à un VPC existant, omettez la ligne env HTTP_PROXY=http://localhost:8118 des commandes de cette rubrique.

VPC dédié

Lorsque vous créez un service de gestion dans un VPC dédié, GKE sur AWS inclut un hôte bastion placé dans un sous-réseau public.

Pour vous connecter à votre service de gestion, procédez comme suit :

  1. Accédez au répertoire contenant votre configuration GKE sur AWS. Vous avez créé ce répertoire lors de l'installation du service de gestion.

    cd anthos-aws

  2. Pour ouvrir le tunnel, exécutez le script bastion-tunnel.sh. Le tunnel est transféré vers localhost:8118.

    Pour ouvrir un tunnel vers l'hôte bastion, exécutez la commande suivante :

    ./bastion-tunnel.sh -N
    

    Les messages en provenance du tunnel SSH s'affichent dans cette fenêtre. Lorsque vous êtes prêt à fermer la connexion, arrêtez le processus à l'aide du raccourci Ctrl+C ou en fermant la fenêtre.

  3. Ouvrez un nouveau terminal et accédez au répertoire anthos-aws.

    cd anthos-aws
  4. Vérifiez que vous êtes en mesure de vous connecter au cluster à l'aide de kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    La sortie inclut l'URL du serveur d'API du service de gestion.

Sélectionner une taille d'instance de plan de contrôle

GKE sur AWS n'est pas compatible avec le redimensionnement des instances de plan de contrôle. Avant de créer votre cluster d'utilisateur, sélectionnez la taille d'instance de vos plans de contrôle. La taille du plan de contrôle dépend du nombre de nœuds du cluster. Le tableau suivant contient les tailles d'instance de plan de contrôle recommandées pour différentes tailles de cluster.

Taille du cluster (nœuds) Type d'instance de plan de contrôle
1 – 10 m5.large
11 – 100 m5.xlarge
101 – 200 m5.2xlarge

Créer un cluster avec une configuration personnalisée

Vous pouvez utiliser terraform output example_cluster afin de créer une configuration pour un cluster d'utilisateur par cluster de gestion. Si vous souhaitez créer des clusters supplémentaires, vous devez appliquer une configuration personnalisée.

Dans cet exemple, vous créez un cluster manuellement à partir des objets CRD AWSCluster et AWSNodePool.

  1. Accédez au répertoire contenant votre configuration GKE sur AWS. Vous avez créé ce répertoire lors de l'installation du service de gestion.

    cd anthos-aws

  2. À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre service de gestion.

    cd anthos-aws
    anthos-gke aws management get-credentials

  3. Ouvrez un éditeur de texte et copiez la définition AWSCluster suivante dans un fichier nommé custom-cluster.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      region: AWS_REGION
      networking:
        vpcID: VPC_ID
        podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS
        serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS
        ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS
      controlPlane:
        version:  CLUSTER_VERSION # Latest version is 1.25.5-gke.2100
        instanceType: AWS_INSTANCE_TYPE
        keyName: SSH_KEY_NAME
        subnetIDs:
        - CONTROL_PLANE_SUBNET_IDS
        securityGroupIDs:
        - CONTROL_PLANE_SECURITY_GROUPS
        iamInstanceProfile: CONTROL_PLANE_IAM_ROLE
        rootVolume:
          sizeGiB: ROOT_VOLUME_SIZE
          volumeType: ROOT_VOLUME_TYPE # Optional
          iops: ROOT_VOLUME_IOPS # Optional
          kmsKeyARN: ROOT_VOLUME_KEY # Optional
        etcd:
          mainVolume:
            sizeGiB: ETCD_VOLUME_SIZE
            volumeType: ETCD_VOLUME_TYPE # Optional
            iops: ETCD_VOLUME_IOPS # Optional
            kmsKeyARN: ETCD_VOLUME_KEY # Optional
        databaseEncryption:
          kmsKeyARN: ARN_OF_KMS_KEY
        hub: # Optional
          membershipName: ANTHOS_CONNECT_NAME
        cloudOperations: # Optional
          projectID: YOUR_PROJECT
          location: GCP_REGION
          enableLogging: ENABLE_LOGGING
          enableMonitoring: ENABLE_MONITORING
        workloadIdentity: # Optional
          oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
    

    Remplacez l'élément suivant :

    • CLUSTER_NAME : nom du cluster
    • AWS_REGION : région AWS dans laquelle le cluster s'exécute.

    • VPC_ID : ID du VPC dans lequel votre cluster s'exécute.

    • POD_ADDRESS_CIDR_BLOCKS : plage d'adresses IPv4 utilisées par les pods du cluster. Actuellement, une seule plage est acceptée. La plage ne doit chevaucher aucun sous-réseau accessible depuis votre réseau. Vous pouvez utiliser la même plage en toute sécurité sur plusieurs objets AWSCluster différents. Exemple :10.2.0.0/16

    • SERVICE_ADDRESS_CIDR_BLOCKS : plage d'adresses IPv4 utilisées par les services du cluster. Actuellement, une seule plage est acceptée. La plage ne doit chevaucher aucun sous-réseau accessible depuis votre réseau. Vous pouvez utiliser la même plage en toute sécurité sur plusieurs objets AWSCluster différents. Exemple :10.1.0.0/16

    • SERVICE_LOAD_BALANCER_SUBNETS : ID de sous-réseau où GKE sur AWS peut créer des équilibreurs de charge publics ou privés.

    • CLUSTER_VERSION : version de Kubernetes compatible avec GKE sur AWS. La version la plus récente est 1.25.5-gke.2100.

    • AWS_INSTANCE_TYPE : type d'instance EC2 compatible.

    • SSH_KEY_NAME : paire de clé AWS EC2.

    • CONTROL_PLANE_SUBNET_IDS : ID de sous-réseau dans les zones de disponibilité où vos instances de plan de contrôle sont exécutées.

    • CONTROL_PLANE_SECURITY_GROUPS : ID de groupe de sécurité créé lors de l'installation du service de gestion. Vous pouvez personnaliser ce paramètre en ajoutant tous les identifiants de groupe de sécurité requis pour la connexion au plan de contrôle.

    • CONTROL_PLANE_IAM_PROFILE : nom du profil d'instance AWS EC2 attribué aux instances dupliquées du plan de contrôle.

    • ROOT_VOLUME_SIZE : taille, en gibioctet (Gio) des volumes racines de votre plan de contrôle.

    • ROOT_VOLUME_TYPE par le type de volume EBS. Par exemple, gp3.

    • ROOT_VOLUME_IOPS par le nombre d'opérations d'E/S par seconde (IOPS) provisionné pour le volume. Valable uniquement lorsque la valeur de volumeType est GP3. Pour plus d'informations, consultez la section Volumes SSD à usage général (gp3).

    • ROOT_VOLUME_KEY par le nom de ressource Amazon de la clé KMS AWS qui chiffre les volumes racine de votre instance de plan de contrôle.

    • ETCD_VOLUME_SIZE : taille des volumes utilisés par etcd.

    • ETCD_VOLUME_TYPE par le type de volume EBS. Par exemple, gp3.

    • ETCD_VOLUME_IOPS par le nombre d'opérations d'E/S par seconde (IOPS) provisionné pour le volume. Valable uniquement lorsque la valeur de volumeType est gp3. Pour plus d'informations, consultez la section Volumes SSD à usage général (gp3).

    • ETCD_VOLUME_KEY par le nom de ressource Amazon de la clé KMS AWS qui chiffre les volumes de données etcd de votre plan de contrôle.

    • ARN_OF_KMS_KEY : clé AWS KMS utilisée pour chiffrer les secrets du cluster.

    • ANTHOS_CONNECT_NAME : nom d'appartenance Connect utilisé pour enregistrer votre cluster. Le nom de l'appartenance doit être unique. Par exemple, projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME, où YOUR_PROJECT est votre projet Google Cloud et CLUSTER_NAME est un nom unique dans votre projet. Ce champ est facultatif.

    • YOUR_PROJECT : ID de votre projet.

    • GCP_REGION : région Google Cloud dans laquelle vous souhaitez stocker les journaux. Choisissez une région proche de la région AWS. Pour plus d'informations, consultez la section Emplacements mondiaux – Régions et zones. Vous pouvez, par exemple, opter pour la région us-central1.

    • ENABLE_LOGGING : true ou false, pour indiquer si Cloud Logging doit être activé ou non sur les nœuds du plan de contrôle.

    • ENABLE_MONITORING : true ou false, pour indiquer si Cloud Monitoring doit être activé ou non sur les nœuds du plan de contrôle.

    • WORKLOAD_IDENTITY_BUCKET : nom du bucket Cloud Storage contenant vos informations de découverte Workload Identity. Ce champ est facultatif.

  4. Créez un ou plusieurs pools AWSNodePools pour votre cluster. Ouvrez un éditeur de texte et copiez la définition AWSCluster suivante dans un fichier nommé custom-nodepools.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional 
    

    Remplacez l'élément suivant :

    • NODE_POOL_NAME : un nom unique pour votre pool AWSNodePool ;
    • AWSCLUSTER_NAME : nom du cluster AWSCluster. Exemple : staging-cluster.
    • CLUSTER_VERSION: GKE compatible avec Kubernetes sur AWS version.
    • AWS_REGION : même région AWS que votre AWSCluster.
    • AWS_SUBNET_ID : sous-réseau AWS situé dans la même région que votre cluster AWS.
    • MINIMUM_NODE_COUNT : nombre minimal de nœuds dans le pool de nœuds. Pour en savoir plus, consultez la page Procéder au scaling des clusters d'utilisateur.
    • MAXIMUM_NODE_COUNT : nombre maximal de nœuds dans le pool de nœuds.
    • MAXIMUM_PODS_PER_NODE_COUNT : nombre maximal de pods que GKE sur AWS peut attribuer à un nœud.
    • AWS_NODE_TYPE : un type d'instance AWS EC2.
    • KMS_KEY_PAIR_NAME : Paire de clés KMS AWS attribuée à chaque nœud de calcul de pool de nœuds.
    • NODE_IAM_PROFILE : Nom du profil d'instance AWS EC2 attribué aux nœuds du pool.
    • ROOT_VOLUME_SIZE : taille, en gibioctet (Gio) des volumes racines de votre plan de contrôle.
    • VOLUME_TYPE : type de volume EBS AWS du nœud. Par exemple, gp3.
    • IOPS : nombre d'opérations d'E/S par seconde (IOPS) provisionné pour les volumes. Valable uniquement lorsque la valeur de volumeType est gp3.
    • NODE_VOLUME_KEY : ARN de la clé KMS AWS utilisée pour chiffrer le volume. Pour plus d'informations, consultez la page Utiliser des clés gérées par le client (CMK) pour chiffrer des volumes.
  5. Appliquez les fichiers manifeste à votre service de gestion.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-cluster.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-nodepools.yaml
    

Créer un fichier kubeconfig

Pendant le démarrage de votre cluster d'utilisateur, vous pouvez créer un contexte kubeconfig pour votre nouveau cluster d'utilisateur. Vous utilisez ce contexte pour vous authentifier auprès d'un utilisateur ou d'un cluster de gestion.

  1. Utilisez anthos-gke aws clusters get-credentials pour générer un objet kubeconfig pour votre cluster d'utilisateur dans ~/.kube/config.

    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    

    Remplacez CLUSTER_NAME par le nom de votre cluster. Exemple : cluster-0.

  2. Utilisez kubectl pour vous authentifier auprès de votre nouveau cluster d'utilisateur.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    Si votre cluster est prêt, le résultat inclut les URL des composants Kubernetes qu'il contient.

Afficher l'état de votre cluster

Le service de gestion provisionne les ressources AWS lorsque vous appliquez un élément AWSCluster ou AWSNodePool.

  1. À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre service de gestion.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Pour répertorier vos clusters, utilisez kubectl get AWSClusters.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get AWSClusters
    

    Le résultat inclut le nom, l'état, l'âge, la version et le point de terminaison de chaque cluster.

    Par exemple, le résultat suivant n'inclut qu'un seul AWSCluster nommé cluster-0 :

    NAME        STATE          AGE     VERSION         ENDPOINT
    cluster-0   Provisioning   2m41s   1.25.5-gke.2100   gke-xyz.elb.us-east-1.amazonaws.com
    

Afficher les événements de votre cluster

Pour afficher les événements Kubernetes récents de votre cluster d'utilisateur, utilisez kubectl get events.

  1. À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre service de gestion.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Exécutez kubectl get events.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get events
    

Le résultat inclut des informations, des avertissements et des erreurs liés à votre service de gestion.

Supprimer un cluster d'utilisateur

Pour supprimer un cluster d'utilisateur, procédez comme suit :

  1. À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre service de gestion.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Exécutez la commande kubectl delete pour supprimer le fichier manifeste contenant vos clusters utilisateur.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f CLUSTER_FILE
    

    Remplacez CLUSTER_FILE par le nom du fichier manifeste contenant vos objets AWScluster et AWSNodePool. Exemple :cluster-0.yaml

Supprimer tous les clusters utilisateur

Pour supprimer tous vos clusters utilisateur, procédez comme suit :

  1. À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre service de gestion.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Utilisez kubectl delete pour supprimer vos AWSNodePools et AWSClusters de votre service de gestion.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSNodePool --all
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSCluster --all
    

Pour en savoir plus, consultez la section Désinstaller GKE sur AWS.

Étapes suivantes