Créer des clusters hybrides

Dans les clusters Anthos sur Bare Metal, les clusters hybrides effectuent le double rôle d'un cluster d'administrateur et d'un 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.

Prerequisites

  • La dernière version de bmctl est téléchargée (gs://anthos-baremetal-release/bmctl/1.10.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 des clusters Anthos sur 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 des clusters Anthos sur solution Bare Metal, vous pouvez activer ou désactiver SELinux avant ou après la création des clusters, ou leurs mises à niveau. 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.

Les clusters Anthos sur solution Bare Metal ne sont compatibles avec SELinux que dans 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/éditeur de projet pour utiliser les fonctionnalités d'activation automatique d'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 de création d'un fichier de configuration pour un cluster hybride appelé 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. Vous devez enregistrer vos clusters avec Connect auprès du parc de votre projet.

    • 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é du pod des nœuds de cluster et l'environnement d'exécution du conteneur :

    ....
    # 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
      # containerRuntime specifies which container runtime to use for scheduling containers on nodes.
      # containerd and docker are supported.
      containerRuntime: containerd
    ....
    

    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.

    L'environnement d'exécution du conteneur par défaut est containerd. Vous pouvez également utiliser Docker. Pour en savoir plus sur la modification de votre environnement d'exécution, consultez notre guide de modification de l'environnement d'exécution des conteneurs.

    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

Utilisez 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.