Créer un cluster d'administrateur à l'aide de Terraform

Utilisez Terraform pour créer un cluster d'administrateur pour le logiciel Google Distributed Cloud uniquement pour VMware si vous utilisez déjà Terraform pour gérer vos ressources VMware Google Cloud et sur site. Vous pouvez également créer un cluster d'administrateur à l'aide de gkectl ou de la consoleGoogle Cloud .

Avant de commencer

  • Assurez-vous d'avoir configuré votre poste de travail administrateur et de pouvoir vous y connecter, comme décrit dans Créer un poste de travail administrateur.

  • Assurez-vous que les fichiers de clé JSON des comptes de service se trouvent sur votre poste de travail administrateur.

  • Consultez le document de planification des adresses IP. Assurez-vous de disposer de suffisamment d'adresses IP pour les trois nœuds du plan de contrôle et une adresse IP virtuelle du plan de contrôle. Si vous prévoyez de créer des clusters d'utilisateur kubeception, vous devez disposer de suffisamment d'adresses IP pour les nœuds de plan de contrôle de ces clusters d'utilisateur.

  • Consultez la présentation de l'équilibrage de charge et examinez votre décision concernant le type d'équilibreur de charge que vous souhaitez utiliser. Pour les équilibreurs de charge manuels, vous devez configurer l'équilibreur de charge avant de créer votre cluster d'administrateur.

  • Si vous utilisez gkectl pour créer le cluster d'administrateur, décidez si vous souhaitez utiliser un registre public ou privé pour les composants Google Distributed Cloud. Pour en savoir plus sur l'utilisation d'un registre Docker privé, consultez privateRegistry. Ni Terraform ni la console Google Cloud ne sont compatibles avec l'utilisation d'un registre Docker privé pour les composants système.

  • Choisissez le type de système d'exploitation à exécuter sur vos nœuds de cluster d'administrateur.

  • Si votre organisation exige que le trafic sortant passe par un serveur proxy, assurez-vous d'ajouter à la liste d'autorisation les API requises et l'adresse d'Artifact Registry.

  • Dans les versions 1.29 et ultérieures, les vérifications préliminaires côté serveur sont activées par défaut. Les vérifications préliminaires côté serveur nécessitent des règles de pare-feu supplémentaires. Dans la section Règles de pare-feu pour les clusters d'administrateur, recherchez "Vérifications préaliminaires" et assurez-vous que toutes les règles de pare-feu requises sont configurées. Les vérifications préliminaires côté serveur sont exécutées sur le cluster d'amorçage au lieu d'être exécutées localement sur le poste de travail administrateur.

Présentation de la procédure

Avant de créer le cluster d'administrateur, vous devez exécuter la commande gkectl register bootstrap sur votre station de travail administrateur. Cette commande déploie un cluster Kubernetes in Docker (kind) sur le poste de travail administrateur. Ce cluster d'amorçage héberge les contrôleurs Kubernetes nécessaires à la création du cluster d'administrateur. Lorsque vous créez le cluster d'administrateur, les contrôleurs du cluster d'amorçage provisionnent les nœuds, exécutent les vérifications préliminaires et enregistrent le cluster d'administrateur dans le parc. Le cluster d'amorçage est automatiquement supprimé une fois le cluster d'administrateur créé.

Voici les principales étapes à suivre pour créer un cluster d'administrateur à l'aide de Terraform :

  1. Remplissez votre fichier de configuration. Utilisez la ressource google_gkeonprem_vmware_admin_cluster et l'exemple suivant pour créer le fichier de configuration main.tf.

  2. Créez un cluster bootstrap. Exécutez gkectl register bootstrap pour créer le cluster d'amorçage. Lorsque la commande a terminé de créer le cluster d'amorçage, le résultat vous indique de terminer la configuration du cluster d'administrateur. Le processus continue de s'exécuter jusqu'à ce que le cluster d'administrateur soit créé.

  3. Créez un cluster d'administrateur. Dans une autre fenêtre de terminal ou sur un autre ordinateur ayant accès à l'API GKE On-Prem, exécutez les commandes terraform pour créer un cluster d'administrateur comme spécifié dans votre fichier de configuration main.tf terminé.

Remplir le fichier de configuration

L'exemple suivant montre comment créer un cluster d'administrateur à haute disponibilité (HA) avec trois nœuds de plan de contrôle avec MetalLB. Dans la version 1.28 et les versions ultérieures, les nouveaux clusters d'administrateur doivent être disponibilité élevée. Cette exigence vous oblige à définir control_plane_node.replicas sur 3.

Pour obtenir plus d'informations et d'autres exemples, consultez la documentation de référence de google_gkeonprem_vmware_admin_cluster. Pour en savoir plus sur l'utilisation d'un registre privé pour les images système, consultez Configurer un registre de conteneurs privé.

Renseignez les variables d'espace réservé dans l'exemple suivant, puis copiez-le et collez-le dans main.tf. Si vous avez utilisé gkeadm pour créer votre station de travail administrateur, ouvrez le fichier de configuration de votre station de travail administrateur afin de pouvoir copier les valeurs de la section vCenter dans les variables d'espace réservé correspondantes.

resource "google_gkeonprem_vmware_admin_cluster" "admin-cluster-metallb" {
  provider = google-beta
  name = "ADMIN_CLUSTER_NAME"
  project = "PROJECT_ID"
  location = "REGION"
  description = "DESCRIPTION"
  bootstrap_cluster_membership = "projects/PROJECT_ID/locations/REGION/memberships/bootstrap-ADMIN_CLUSTER_NAME"
  on_prem_version = "VERSION"
  image_type = "IMAGE_TYPE"
  vcenter {
    address = "VCENTER_ADDRESS"
    datacenter = "DATA_CENTER"
    cluster = "VCENTER_CLUSTER"
    resource_pool = "RESOURCE_POOL"
    datastore = "DATASTORE"
    ca_cert_data = "CA_CERT_DATA"
  }
  network_config {
    service_address_cidr_blocks = ["10.96.232.0/24"]
    pod_address_cidr_blocks = ["192.168.0.0/16"]
    vcenter_network = "NETWORK"
    dhcp_ip_config {
      enabled = true
    }
    host_config {
      dns_servers = ["DNS_SERVERS"]
      ntp_servers = ["NTP_SERVERS"]
    }
    ha_control_plane_config {
      control_plane_ip_block {
        gateway = "GATEWAY"
        netmask = "NETMASK"
        ips {
          hostname = "CONTROL_PLANE_HOST_1"
          ip       = "CONTROL_PLANE_NODE_IP_1"
        }
        ips {
          hostname = "CONTROL_PLANE_HOST_2"
          ip       = "CONTROL_PLANE_NODE_IP_2"
        }
        ips {
          hostname = "CONTROL_PLANE_HOST_3"
          ip       = "CONTROL_PLANE_NODE_IP_3"
        }
      }
    }
  }
  control_plane_node {
     cpus = NUM_CPUS
     memory = MEMORY
     replicas = 3
  }
  load_balancer {
    vip_config {
      control_plane_vip = "CONTROL_PLANE_VIP"
    }
    metal_lb_config {
      enabled = true
    }
  }
}

Remplacez les éléments suivants :

  • ADMIN_CLUSTER_NAME : nom du cluster d'administrateur. Le nom ne peut pas comporter plus de 20 caractères.

  • PROJECT_ID : ID du projet Google Cloud .

  • REGION : région Google Cloud dans laquelle l'API GKE On-Prem (gkeonprem.googleapis.com), le service Fleet (gkehub.googleapis.com) et le service Connect (gkeconnect.googleapis.com) s'exécutent. Spécifiez us-west1 ou une autre région compatible.

    Le champ location correspond à l'option --location de la commande gkectl register bootstrap.

  • DESCRIPTION : description du cluster d'administrateur.

  • VERSION : version de Google Distributed Cloud pour le cluster. La création d'un cluster à l'aide de Terraform n'est possible qu'avec les versions 1.28 et ultérieures. La version que vous spécifiez ici doit correspondre à la version du bundle que vous spécifiez dans l'option --bundle-path de la commande gkectl register bootstrap. Pour obtenir la liste des versions, consultez Versions de Google Distributed Cloud.

  • IMAGE_TYPE : type d'image d'OS à exécuter sur les nœuds de votre cluster d'administrateur. Spécifiez l'une des options suivantes : "ubuntu_containerd", "cos", "ubuntu_cgv2" ou "cos_cgv2".

  • VCENTER_ADDRESS : adresse vCenter Server.

    • Fichier de configuration du poste de travail administrateur : utilisez la valeur du champ vCenter.credentials.address.

    • Le champ vcenter.address correspond à l'indicateur --vcenter-address dans la commande gkectl register bootstrap.

  • DATA_CENTER : nom de votre centre de données vCenter.

    • Fichier de configuration du poste de travail administrateur : utilisez la valeur du champ vCenter.datacenter.

    • Le champ vcenter.datacenter correspond à l'option --vcenter-datacenter de la commande gkectl register bootstrap.

  • VCENTER_CLUSTER : nom de votre cluster vCenter.

    • Fichier de configuration du poste de travail administrateur : utilisez la valeur du champ vCenter.cluster.

    • Le champ vcenter.cluster correspond à l'indicateur --vcenter-cluster dans la commande gkectl register bootstrap.

  • RESOURCE_POOL : nom ou chemin d'accès de votre pool de ressources vCenter.

    • Fichier de configuration du poste de travail administrateur : utilisez la valeur du champ vCenter.resourcePool.

    • Le champ vcenter.resource_pool correspond à l'option --vcenter-resource-pool de la commande gkectl register bootstrap.

  • DATASTORE : nom de votre datastore vCenter. La valeur que vous spécifiez doit être un nom, et non un chemin d'accès. Si vous devez saisir un chemin d'accès, ajoutez le champ suivant : folder = "FOLDER".

    • Fichier de configuration du poste de travail administrateur : utilisez la valeur du champ vCenter.datastore.

    • Le champ vcenter.datastore correspond à l'option --vcenter-datastore de la commande gkectl register bootstrap.

    Si vous souhaitez utiliser une règle de stockage de VM pour les nœuds du cluster, supprimez le champ vcenter.datastore et ajoutez vcenter.storage_policy_name à la place. Ajoutez également l'indicateur --vcenter-storage-policy à la commande gkectl register bootstrap. Vous devez spécifier une valeur pour vcenter.datastore ou vcenter.storage_policy_name, mais pas les deux.

  • FOLDER : nom du dossier vCenter où se trouvent les VM de votre cluster. Si vous n'utilisez pas de dossier, supprimez ce champ.

    • Fichier de configuration du poste de travail administrateur : utilisez la valeur du champ vCenter.folder.

    • Le champ vcenter.folder correspond à l'indicateur --vcenter-folder de la commande gkectl register bootstrap.

  • CA_CERT_DATA : certificat CA vCenter au format PEM, mais avec tous les sauts de ligne remplacés par la chaîne \n.

    1. Exécutez la commande suivante pour remplacer les sauts de ligne par \n :

      awk 'ORS="\\n" {print}' CA_CERT_PATH_LOCAL
      

      Remplacez CA_CERT_PATH_LOCAL par le chemin d'accès au certificat CA racine de votre serveur vCenter. Si vous avez utilisé gkeadm pour créer votre poste de travail administrateur, vous pouvez utiliser la valeur du champ caCertPath dans le fichier de configuration du poste de travail administrateur, qui correspond au chemin d'accès sur votre ordinateur local. gkeadm a copié le fichier de certificat CA sur votre poste de travail administrateur ; Vous devez spécifier le chemin d'accès au poste de travail administrateur dans l'indicateur --vcenter-ca-cert-path de la commande gkectl register bootstrap.

    2. Copiez le résultat de la commande précédente et collez-le dans la variable d'espace réservé CA_CERT_DATA.

  • NETWORK : nom de votre réseau vCenter.

    • Fichier de configuration du poste de travail administrateur : utilisez la valeur du champ vCenter.network.

    • Le champ network_config.vcenter_network correspond à l'option --vcenter-network de la commande gkectl register bootstrap.

  • GATEWAY : adresse IP de la passerelle par défaut pour le sous-réseau qui contient vos nœuds de cluster de plan de contrôle.

  • NETMASK : masque de réseau du sous-réseau contenant les nœuds de votre cluster de plan de contrôle.

  • DNS_SERVERS : adresse IP du serveur DNS.

  • NTP_SERVERS : adresse IP du serveur de temps (NTP).

  • Saisissez les adresses IP et, éventuellement, le nom d'hôte des trois nœuds du plan de contrôle dans la section control_plane_ip_block.ips. Si vous ne saisissez pas de nom d'hôte, supprimez les champs hostname de la configuration.

  • NUM_CPUS : nombre de processeurs virtuels pour chaque nœud du plan de contrôle dans le cluster d'administrateur. Doit être au minimum de 4.

  • MEMORY : nombre de mebioctets de mémoire pour chaque nœud de plan de contrôle du cluster d'administrateur. La valeur doit être d'au moins 8 192, mais nous vous recommandons de choisir 16 384.

  • CONTROL_PLANE_VIP : adresse IP que vous avez choisie de configurer sur l'équilibreur de charge pour le serveur d'API Kubernetes du cluster d'administrateur.

Facultatif : Configurer un registre privé

Par défaut, lors de la création ou de la mise à niveau d'un cluster, Google Distributed Cloud extrait les images système de gcr.io/gke-on-prem-release à l'aide du compte de service d'accès aux composants. Vous pouvez également fournir votre propre serveur de registre de conteneurs afin que les images système soient extraites de votre serveur de registre privé.

Pour configurer un registre privé :

  1. Ajoutez les éléments suivants au fichier de configuration du cluster d'administrateur :

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    Remplacez les éléments suivants :

    • ADDRESS : adresse IP ou nom de domaine complet de la machine qui exécute votre registre privé.

    • CA_CERT : données du certificat CA de la clé publique, mais avec tous les sauts de ligne remplacés par la chaîne \n.

    1. Exécutez la commande suivante pour remplacer les sauts de ligne par \n :

      awk 'ORS="\\n" {print}' PUBLIC_KEY_PATH
      

      Remplacez PUBLIC_KEY_PATH par le chemin d'accès à la clé publique.

    2. Copiez le résultat de la commande précédente et collez-le dans la variable d'espace réservé CA_CERT.

  2. Si votre réseau se trouve derrière un serveur proxy, ajoutez les éléments suivants :

    proxy {
      url: "PROXY_SERVER_ADDRESS"
      no_proxy: "BYPASS_LIST"
    }
    

    Remplacez les éléments suivants :

    • PROXY_SERVER_ADDRESS : adresse HTTP de votre serveur proxy. Incluez le numéro de port même s'il est identique au port par défaut du schéma.

    • BYPASS_LIST : liste d'adresses IP, de plages d'adresses IP, de noms d'hôte et de noms de domaine séparés par une virgule qui ne doivent pas passer par le serveur proxy.

    Exemple :

    url: "http://my-proxy.example.local:80"
    no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
    

    Lorsque Google Distributed Cloud envoie une requête à l'une de ces adresses, hôtes ou domaines, la requête contourne le serveur proxy et est envoyée directement à la destination.

Pour en savoir plus sur l'utilisation d'un registre privé, y compris sur les différences entre les clusters normaux et les clusters avancés, consultez Configurer un registre de conteneurs privé.

Vérifier le fichier de configuration et le plan

Dans le répertoire où se trouve main.tf, exécutez les commandes suivantes :

  1. Initialisez Terraform :

    terraform init
    

    Terraform installe les bibliothèques nécessaires, telles que le fournisseur Google Cloud . Corrigez les éventuelles erreurs dans maint.tf.

  2. Créez le plan Terraform :

    terraform plan -out tfplan
    

    Examinez la configuration et apportez les modifications nécessaires.

Avant d'appliquer le plan, vous devez d'abord créer le cluster bootstrap, comme décrit dans la section suivante.

Créer le cluster d'amorçage

Lorsque vous exécutez la commande gkectl register bootstrap, vous êtes invité à saisir le nom d'utilisateur et le mot de passe du compte vCenter. Assurez-vous d'avoir les identifiants à portée de main. Si vous avez utilisé gkeadm pour créer la station de travail administrateur, le nom d'utilisateur et le mot de passe se trouvent dans le fichier credential.yaml.

  1. Connectez-vous à votre poste de travail administrateur à l'aide de SSH.

  2. Authentifiez-vous avec Google Cloud CLI :

    gcloud auth login
    
  3. Exécutez la commande suivante pour créer le cluster d'amorçage. De nombreuses valeurs d'indicateur sont identiques à celles des champs main.tf. Notez toutefois que la commande accepte des valeurs supplémentaires que vous devez spécifier dans les variables d'espace réservé fournies.

    gkectl register bootstrap \
        --target-cluster-name=ADMIN_CLUSTER_NAME \
        --project-id=PROJECT_ID \
        --location=REGION \
        --vcenter-address=VCENTER_ADDRESS \
        --vcenter-datacenter=DATA_CENTER \
        --vcenter-cluster=VCENTER_CLUSTER \
        --vcenter-resource-pool=RESOURCE_POOL \
        --vcenter-datastore=DATASTORE \
        --vcenter-network=NETWORK \
        --vcenter-ca-cert-path=CA_CERT_PATH \
        --bundle-path=BUNDLE_PATH \
        --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \
        --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \
        --stackdriver-service-account-key-path=LOG_MON_SA_PATH \
        --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH \
        --admin-kubeconfig-out=KUBECONFIG_NAME
    

    Remplacez les éléments suivants par les chemins d'accès au poste de travail administrateur :

    • CA_CERT_PATH : chemin d'accès au certificat CA racine pour votre serveur vCenter.
    • BUNDLE_PATH : chemin d'accès au fichier de bundle. Si vous avez utilisé gkeadm pour créer la station de travail administrateur, le fichier du bundle se trouve dans /var/lib/gke/bundles/. Le nom du fichier dépend de la version de Google Distributed Cloud (par exemple, gke-onprem-vsphere-1.31.0-gke.889-full.tgz).
    • COMPONENT_ACCESS_SA_PATH : chemin d'accès au fichier de clé du compte de service d'accès au composant.
    • CONNECT_REGISTER_SA_PATH : chemin d'accès au fichier de clé du compte de service connect-register.
    • LOG_MON_SA_PATH : chemin d'accès au fichier de clé du compte de service de journalisation et de surveillance.
    • CLOUD_AUDIT_SA_PATH : chemin d'accès au compte de service de journalisation des audits. Si vous n'avez pas créé de compte de service de journalisation d'audit, spécifiez le chemin d'accès au fichier de clé pour le compte de service de journalisation et de surveillance.
    • KUBECONFIG_NAME : nom du fichier kubeconfig créé par la commande gkectl register bootstrap. Si vous ne spécifiez pas cette option, la commande crée le fichier avec le nom kubeconfig dans le répertoire de travail actuel. S'il existe déjà un fichier nommé kubeconfig, la commande l'écrase.

    Modifiez la commande si nécessaire pour les options suivantes :

    • Si vous avez spécifié un dossier dans main.tf, ajoutez l'indicateur suivant : --vcenter-folder=FOLDER
    • Si vous avez spécifié une règle de stockage de VM dans main.tf, supprimez --vcenter-datastore et ajoutez l'indicateur suivant : --vcenter-storage-policy-name=STORAGE_POLICY_NAME
    • Si votre poste de travail d'administrateur se trouve sur un réseau derrière un serveur proxy, ajoutez les indicateurs suivants :

      • --proxy-url=PROXY_URL
      • --no-proxy=NO_PROXY

      Remplacez les éléments suivants :

      • PROXY_URL : URL du serveur proxy.
      • NO_PROXY : valeur des domaines et des adresses IP exclus du proxy, séparés par une virgule.

    Si vous ajoutez un indicateur, veillez à ajouter le caractère barre oblique inverse (\) de continuation de ligne de commande.

  4. Lorsque vous y êtes invité, saisissez (ou copiez et collez) le nom d'utilisateur vCenter. Le nom d'utilisateur n'est pas renvoyé à l'écran.

  5. Lorsque vous y êtes invité, saisissez (ou copiez et collez) le mot de passe vCenter. Le mot de passe n'est pas affiché à l'écran.

La commande exécute de nombreuses validations. Une fois que gkectl a créé le cluster d'amorçage, vous obtenez un résultat semblable à celui-ci, qui est tronqué par souci de lisibilité :

Running workstation validations
- Validation Category: Workstation
    - [SUCCESS] Workstation OS
    - [SUCCESS] Workstation Hardware
    - [SUCCESS] Workstation Package
    - [SUCCESS] Workstation NTP
    - [SUCCESS] Workstation Docker
...
All validation results were SUCCESS.
Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz
...
Successfully created and registered the bootstrap cluster
...
Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -

Le processus continue de s'exécuter jusqu'à ce que le cluster d'administrateur soit créé.

Si vous quittez la commande gkectl register bootstrap avant la création du cluster d'administrateur, la création du cluster d'administrateur échoue. Vous devrez alors supprimer le cluster d'amorçage à l'aide de la commande suivante :

gkectl delete bootstrap \
    --target-cluster-name=ADMIN_CLUSTER_NAME \
    --project-id=PROJECT_ID \
    --location=REGION \
     --register-service-account-key-path=CONNECT_REGISTER_SA_PATH

Créez le cluster d'administrateur :

Appliquez le plan Terraform pour créer le cluster d'administrateur :

terraform apply "tfplan"

La création du cluster d'administrateur prend au moins 15 minutes. Vous pouvez afficher le cluster dans la console Google Cloud sur la page Clusters GKE.

Se connecter au cluster d'administrateur

La commande gkectl register bootstrap crée un fichier kubeconfig pour le cluster d'administrateur sur votre station de travail administrateur. Si vous n'avez pas spécifié l'indicateur --admin-kubeconfig-out lorsque vous avez exécuté gkectl register bootstrap, la commande crée un fichier kubeconfig appelé kubeconfig dans le répertoire dans lequel vous avez exécuté la commande.

Vous devez restreindre l'accès à ce kubeconfig, car il contient les identifiants d'authentification du cluster.

Vous pouvez également exécuter des commandes kubectl en lecture seule via la passerelle de connexion.

  1. Exécutez la commande suivante sur un ordinateur sur lequel gcloud CLI est installé pour obtenir une entrée kubeconfig pouvant accéder au cluster via la passerelle Connect.

    gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID
    

    Le résultat ressemble à ce qui suit :

    Starting to build Gateway kubeconfig...
    Current project_id: PROJECT_ID
    A new kubeconfig entry "connectgateway_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.
    
  2. Vous pouvez maintenant exécuter des commandes kubectl en lecture seule via la passerelle de connexion, telles que les suivantes :

    kubectl get pods -A
    

    Si vous avez besoin de droits d'administrateur complets pour le cluster d'administrateur, consultez Configurer la passerelle Connect.