Créer des clusters hybrides

Dans GKE sur Bare Metal, les clusters hybrides ont le double rôle de cluster d'administrateur et de cluster d'utilisateur. Ils exécutent des charges de travail et gèrent en même temps d'autres clusters (en plus de se gérer eux-mêmes).

Les clusters hybrides éliminent la nécessité d'exécuter un cluster d'administrateur distinct dans les scénarios limités en ressources et peuvent garantir une haute disponibilité. Dans un cluster hybride à haute disponibilité, si un nœud échoue, d'autres nœuds le remplacent.

Les clusters hybrides sont différents des clusters autonomes, dans la mesure où ils peuvent également gérer d'autres clusters. Les clusters autonomes ne peuvent ni créer, ni gérer d'autres clusters.

Cependant, lorsque vous créez des clusters hybrides, il existe un compromis entre flexibilité et sécurité. Étant donné que les clusters hybrides se gèrent eux-mêmes, l'exécution de charges de travail sur le même cluster augmente le risque d'exposition en matière de sécurité des données d'administration sensibles, telles que les clés SSH.

Vous créez un cluster hybride avec un plan de contrôle à haute disponibilité (HA) à l'aide de la commande bmctl. La commande bmctl peut être exécutée sur un poste de travail distinct ou sur l'un des nœuds du cluster hybride.

Prérequis

  • La dernière version de bmctl est téléchargée (gs://anthos-baremetal-release/bmctl/1.16.8/linux-amd64/bmctl) à partir de Cloud Storage.
  • Le poste de travail qui exécute bmctl dispose d'une connectivité réseau à tous les nœuds du cluster hybride cible.
  • Le poste de travail qui exécute bmctl dispose d'une connectivité réseau à l'adresse IP virtuelle du plan de contrôle du cluster hybride cible.
  • La clé SSH utilisée pour créer le cluster hybride est disponible depuis la racine ou l'utilisateur dispose d'un accès SUDO à tous les nœuds du cluster hybride cible.
  • Le compte de service "connect-register" est configuré pour une utilisation avec Connect.

Consultez le guide de démarrage rapide de GKE sur une solution Bare Metal pour obtenir des instructions détaillées sur la création d'un cluster hybride.

Activer SELinux

Si vous souhaitez activer SELinux pour sécuriser vos conteneurs, vous devez vous assurer que SELinux est activé en mode Enforced sur toutes vos machines hôtes. À partir de la version 1.9.0 de GKE sur Bare Metal, vous pouvez activer ou désactiver SELinux avant ou après la création ou la mise à niveau du cluster. SELinux est activé par défaut sur Red Hat Enterprise Linux (RHEL) et CentOS. Si SELinux est désactivé sur vos machines hôtes ou si vous n'êtes pas sûr, consultez la section Sécuriser vos conteneurs à l'aide de SELinux pour savoir comment l'activer.

GKE sur Bare Metal n'est compatible qu'avec SELinux sur les systèmes RHEL et CentOS.

Se connecter à gcloud et créer un fichier de configuration de cluster hybride

  1. Connectez-vous à gcloud en tant qu'utilisateur avec l'identifiant gcloud auth application-default :
  2. gcloud auth application-default login
    
    Vous devez disposer d'un rôle de propriétaire ou d'éditeur de projet pour utiliser les fonctionnalités d'activation automatique de l'API et de création de compte de service, décrites ci-dessous. Vous pouvez également ajouter les rôles IAM suivants à l'utilisateur :
    • Administrateur de compte de service
    • Administrateur de clés de compte de service
    • Administrateur de projet IAM
    • Lecteur de Compute
    • Administrateur Service Usage
    Si vous disposez déjà d'un compte de service avec ces rôles, exécutez la commande suivante :
    export GOOGLE_APPLICATION_CREDENTIALS=JSON_KEY_FILE
    
    JSON_KEY_FILE spécifie le chemin d'accès au fichier de clé JSON de votre compte de service.
  3. Obtenez l'ID du projet Cloud à utiliser avec la création de cluster :
  4. export CLOUD_PROJECT_ID=$(gcloud config get-value project)
    

Créer le cluster hybride avec bmctl

Une fois que vous vous êtes connecté à gcloud et que votre projet est configuré, vous pouvez créer le fichier de configuration de cluster à l'aide de la commande bmctl. Notez que dans cet exemple, tous les comptes de service sont créés automatiquement par la commande bmctl create config :

bmctl create config -c HYBRID_CLUSTER_NAME --enable-apis \
    --create-service-accounts --project-id=CLOUD_PROJECT_ID

Voici un exemple permettant de créer un fichier de configuration pour un cluster hybride nommé hybrid1, associé à l'ID de projet my-gcp-project :

bmctl create config -c hybrid1 --create-service-accounts --project-id=my-gcp-project

Le fichier est écrit dans bmctl-workspace/hybrid1/hybrid1.yaml.

Au lieu d'activer des API et de créer des comptes de service automatiquement, vous pouvez également fournir à vos comptes de service existants les autorisations IAM appropriées. Vous pouvez ainsi ignorer la création automatique de compte de service décrite à l'étape précédente dans la commande bmctl :

bmctl create config -c hybrid1

Modifier le fichier de configuration de cluster

Maintenant que vous disposez d'un fichier de configuration de cluster, vous pouvez y apporter les modifications suivantes :

  1. Fournissez la clé privée SSH pour accéder aux nœuds du cluster hybride :

    # bmctl configuration variables. Because this section is valid YAML but not a valid Kubernetes
    # resource, this section can only be included when using bmctl to
    # create the initial admin/hybrid cluster. Afterwards, when creating user clusters by directly
    # applying the cluster and node pool resources to the existing cluster, you must remove this
    # section.
    gcrKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
    sshPrivateKeyPath: /path/to/your/ssh_private_key
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-cloud-ops.json
    
  2. Enregistrez vos clusters dans un parc. L'ID de projet que vous avez spécifié dans la commande bmctl create config est automatiquement ajouté au champ gkeConnect.projectID dans le fichier de configuration du cluster. Ce projet est appelé projet hôte du parc.

    • Si vous avez créé votre fichier de configuration à l'aide des fonctionnalités d'activation automatique des API et de création de compte de service, vous pouvez ignorer cette étape.
    • Si vous avez créé le fichier de configuration sans utiliser les fonctionnalités d'activation automatique des API et de création de compte de service, faites référence aux clés JSON du compte de service téléchargées dans les champs gkeConnectAgentServiceAccountKeyPath et gkeConnectRegisterServiceAccountKeyPath correspondants du fichier de configuration de cluster.
  3. Modifiez la configuration pour spécifier le type de cluster hybrid au lieu de admin :

    spec:
      # Cluster type. This can be:
      #   1) admin:  to create an admin cluster. This can later be used to create user clusters.
      #   2) user:   to create a user cluster. Requires an existing admin cluster.
      #   3) hybrid: to create a hybrid cluster that runs admin cluster components and user workloads.
      #   4) standalone: to create a cluster that manages itself, runs user workloads, but does not manage other clusters.
      type: hybrid
    
  4. Modifiez la configuration pour spécifier un plan de contrôle à disponibilité élevée contenant plusieurs nœuds. Spécifiez un nombre impair de nœuds pour disposer d'un quorum majoritaire pour la haute disponibilité :

      # Control plane configuration
      controlPlane:
        nodePoolSpec:
          nodes:
          # Control plane node pools. Typically, this is either a single machine
          # or 3 machines if using a high availability deployment.
          - address: 10.200.0.4
          - address: 10.200.0.5
          - address: 10.200.0.6
    
  5. Spécifiez la densité de pods des nœuds de cluster.

    ....
    # NodeConfig specifies the configuration that applies to all nodes in the cluster.
    nodeConfig:
      # podDensity specifies the pod density configuration.
      podDensity:
        # maxPodsPerNode specifies at most how many pods can be run on a single node.
        maxPodsPerNode: 250
    ....
    

    Pour les clusters hybrides, les valeurs autorisées pour maxPodsPerNode sont 32-250 pour les clusters haute disponibilité et 64-250 pour les clusters non haute disponibilité. Si aucune valeur n'est spécifiée, la valeur par défaut de maxPodsPerNode est 110. Une fois le cluster créé, cette valeur ne peut pas être mise à jour.

    La densité des pods est également limitée par les ressources IP disponibles de votre cluster. Pour plus de détails, consultez la section Mise en réseau de pods.

Créer le cluster hybride avec la configuration du cluster

Exécutez la commande bmctl pour déployer le cluster :

bmctl create cluster -c CLUSTER_NAME

CLUSTER_NAME spécifie le nom du cluster que vous avez créé dans la section précédente.

Vous trouverez ci-dessous un exemple de la commande permettant de créer un fichier de configuration pour un cluster appelé hybrid1 :

bmctl create cluster -c hybrid1

Exemples de configurations de cluster hybride

Pour obtenir des exemples de configurations de cluster hybride, consultez la section Clusters hybrides dans les exemples de configurations de cluster.