Déployer GDCV pour une solution Bare Metal sur OpenStack

GKE sur Bare Metal permet d'utiliser OpenStack en tant que plate-forme cloud privée. Cette compatibilité vous permet d'utiliser les services OpenStack suivants :

  • Infrastructure as a Service (IaaS)
  • Load balancing as a Service (LBaaS)
  • Stockage

Vous pouvez déployer GKE sur une solution Bare Metal s'exécutant sur des machines virtuelles (VM) OpenStack dotées de systèmes d'exploitation compatibles. GKE sur Bare Metal ne provisionne pas les VM automatiquement, et le provisionnement des VM sort du cadre de ce guide. Pour connaître la configuration requise et examiner un exemple de déploiement, consultez l'exemple Terraform pour créer des VM OpenStack.

Vous pouvez utiliser OpenStack LBaaS et le fournisseur cloud OpenStack de Kubernetes dans GKE sur une solution Bare Metal pour exposer les services Kubernetes en dehors du cluster OpenStack.

Le guide comprend les sections suivantes :

  1. Déployer GKE sur une solution Bare Metal
  2. Configurer le fournisseur cloud OpenStack pour Kubernetes dans GKE sur Bare Metal afin de l'intégrer aux équilibreurs de charge Octavia
  3. Valider le fournisseur cloud OpenStack pour l'intégration à Kubernetes

Ce guide utilise OpenStack Ussuri, mais il peut convenir pour des versions plus anciennes d'OpenStack. Les versions plus anciennes d'OpenStack n'ont pas été testées. Ce guide utilise des VM OpenStack pour vous fournir un environnement de démonstration de faisabilité GKE sur une solution Bare Metal à deux nœuds s'exécutant sur OpenStack. Pour en savoir plus sur la création d'un environnement de production avec un plan de contrôle à haute disponibilité, consultez la documentation de GKE sur une solution Bare Metal pour connaître les exigences de l'environnement de production.

Exemple de déploiement

Ce guide fournit un exemple de déploiement de GKE sur une solution Bare Metal sur OpenStack qui s'intègre à l'objet LBaaS d'OpenStack. Vous devez comprendre et ajuster les commandes et valeurs de configuration en fonction de votre environnement OpenStack. Le schéma suivant illustre le déploiement obtenu :

GKE sur Bare Metal installé sur OpenStack.

Prérequis

  • OpenStack Ussuri avec LBaaS v2 déployé et fonctionnel
  • Compte de service pour le téléchargement de l'outil bmctl
  • Configurez votre réseau et vos VM OpenStack comme indiqué dans l'exemple de déploiement. Pour provisionner une configuration semblable dans votre environnement OpenStack, vous disposez des options suivantes :
    1. Utilisez ce script Terraform pour provisionner automatiquement les ressources.
    2. Provisionner les ressources manuellement.
  • Les VM OpenStack suivantes doivent être prêtes et disponibles via SSH :
Nom Utilisation Adresse IP
abm-ws 10.200.0.10 (adresse IP privée)
floating_ip (adresse IP publique)
Sert de station de travail administrateur. Permet de déployer Anthos sur Bare Metal sur les autres machines.
abm-cp1 10.200.0.11 Plan de contrôle de cluster Anthos : cet hôte exécute le plan de contrôle et l'équilibreur de charge Kubernetes.
abm-w1 10.200.0.12 Nœud de calcul de cluster Anthos : Cet hôte exécute les charges de travail Kubernetes.

Déployer GKE sur une solution Bare Metal

Ce guide vous explique comment effectuer les tâches suivantes :

  1. Installer les outils dont vous avez besoin sur la VM de la station de travail administrateur abm-ws
  2. Configurer l'ID de projet et le compte de service nécessaires pour effectuer le déploiement de manière sécurisée
  3. Créer un fichier de configuration du cluster
  4. Déployer GKE sur une solution Bare Metal

Installer les outils requis

  1. Extrayez l'adresse IP flottante publique de la VM abm-ws.

    export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json)
    export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')
    
  2. Assurez-vous que vous pouvez vous connecter en toute sécurité à la VM abm-ws via SSH et connectez-vous en tant qu'utilisateur root. L'utilisateur root tel que configuré par les scripts Terraform est abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  3. Vérifiez que vous pouvez vous connecter en SSH aux autres nœuds.

    ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded'
    ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'
    

    Le résultat attendu pour les commandes ci-dessus est le suivant :

    SSH to abm-cp1 succeeded
    SSH to abm-w1 succeeded
    
  4. Téléchargez l'utilitaire de ligne de commande kubectl sur la VM abm-ws.

    curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
    chmod +x kubectl
    sudo mv kubectl /usr/local/sbin/
    
  5. Installez Docker sur la VM abm-ws.

    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh
    sudo usermod -aG docker abm
    newgrp docker
    

Configurer le projet et le compte de service Google Cloud

  1. Obtenez les identifiants d'accès à Google Cloud CLI pour votre compte utilisateur. Il sera utilisé lors de l'exécution des commandes gcloud suivantes.

    gcloud auth login
    
  2. Assurez-vous que la Google Cloud CLI est configurée pour utiliser le projet Google Cloud dans lequel vous souhaitez que votre solution GKE sur Bare Metal soit enregistrée.

    gcloud config set project PROJECT_ID
    
  3. Définissez les identifiants par défaut de l'application (ADC) pour votre compte utilisateur sur le poste de travail d'administrateur. Ils serviront lorsque l'outil bmctl sera utilisé pour la création des clusters.

    gcloud auth application-default login
    
  4. Créez le compte de service bm-gcr. Ce compte de service vous permet de vous authentifier à partir du cluster GKE sur solution Bare Metal.

    gcloud iam service-accounts create bm-gcr
    
    gcloud iam service-accounts keys create bm-gcr.json \
      --iam-account=bm-gcr@PROJECT_ID.iam.gserviceaccount.com
    
  5. Activez les API nécessaires.

    gcloud services enable \
      anthos.googleapis.com \
      anthosaudit.googleapis.com \
      anthosgke.googleapis.com \
      cloudresourcemanager.googleapis.com \
      connectgateway.googleapis.com \
      container.googleapis.com \
      gkeconnect.googleapis.com \
      gkehub.googleapis.com \
      gkeonprem.googleapis.com \
      iam.googleapis.com \
      logging.googleapis.com \
      monitoring.googleapis.com \
      opsconfigmonitoring.googleapis.com \
      serviceusage.googleapis.com \
      stackdriver.googleapis.com \
      storage.googleapis.com
    
  6. Accordez des autorisations supplémentaires au compte de service bm-gcr. L'ajout des autorisations signifie que vous n'avez pas besoin de créer plusieurs comptes de service pour les services individuels.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/gkehub.connect"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/gkehub.admin"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/monitoring.dashboardEditor"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/stackdriver.resourceMetadata.writer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/opsconfigmonitoring.resourceMetadata.writer"
    

Créer un fichier de configuration du cluster

  1. Téléchargez l'utilitaire de ligne de commande bmctl.

    mkdir baremetal && cd baremetal
    gsutil cp gs://anthos-baremetal-release/bmctl/1.16.8/linux-amd64/bmctl .
    chmod a+x bmctl
    sudo mv bmctl /usr/local/sbin/
    
  2. Créez un espace de travail GKE sur Bare Metal pour votre cluster.

    bmctl create config -c CLUSTER_NAME
    
  3. Créez le fichier de configuration de votre cluster GKE sur Bare Metal.

    cat > bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml << EOB
    ---
    gcrKeyPath: /home/abm/bm-gcr.json
    sshPrivateKeyPath: /home/abm/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath: /home/abm/bm-gcr.json
    gkeConnectRegisterServiceAccountKeyPath: /home/abm/bm-gcr.json
    cloudOperationsServiceAccountKeyPath: /home/abm/bm-gcr.json
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openstack-cluster-ns
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: openstack-cluster-ns
      annotations:
        baremetal.cluster.gke.io/external-cloud-provider: "true"
    spec:
      type: hybrid
      anthosBareMetalVersion: 1.16.8
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          clusterName: CLUSTER_NAME
          nodes:
          - address: 10.200.0.11
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: manual
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.101
          ingressVIP: 10.200.0.102
      clusterOperations:
        location: us-central1
        projectID: PROJECT_ID
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: node-disk
        lvpShare:
          numPVUnderSharedPath: 5
          path: /mnt/localpv-share
          storageClassName: standard
      nodeAccess:
        loginUser: abm
    
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: openstack-cluster-ns
    spec:
      clusterName: CLUSTER_NAME
      nodes:
      - address: 10.200.0.12
    EOB
    

Déployer

  1. Déployez le cluster.

    bmctl create cluster -c CLUSTER_NAME
    

L'exécution de la commande bmctl commence à configurer un nouveau cluster hybride. Cela inclut la vérification préliminaire des nœuds, la création des clusters d'administrateur et d'utilisateur, ainsi que l'enregistrement du cluster avec Google Cloud à l'aide de Connect. L'installation peut prendre jusqu'à 15 minutes. Le résultat suivant s'affiche lors de la création du cluster :

Please check the logs at bmctl-workspace/CLUSTER_NAME/log/create-cluster-20210926-020741/create-cluster.log
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... ⠦ kind get kubeconfig --name bmctl > ~/.kube/config && k get pods --all-namespaces
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... OK
[2021-09-26 02:10:48+0000] Installing dependency components... OK
[2021-09-26 02:13:42+0000] Waiting for preflight check job to finish... OK
[2021-09-26 02:15:22+0000] - Validation Category: machines and network
[2021-09-26 02:15:22+0000]  - [PASSED] gcp
[2021-09-26 02:15:22+0000]  - [PASSED] node-network
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.11
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.11-gcp
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.12
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.12-gcp
[2021-09-26 02:15:22+0000] Flushing logs... OK
[2021-09-26 02:15:23+0000] Applying resources for new cluster
[2021-09-26 02:15:24+0000] Waiting for cluster to become ready OK
[2021-09-26 02:25:04+0000] Writing kubeconfig file
[2021-09-26 02:25:04+0000] kubeconfig of created cluster is at bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig, please run
[2021-09-26 02:25:04+0000] kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get nodes
[2021-09-26 02:25:04+0000] to get cluster node status.
[2021-09-26 02:25:04+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2021-09-26 02:25:04+0000] Waiting for node pools to become ready OK
[2021-09-26 02:25:24+0000] Moving admin cluster resources to the created admin cluster
[2021-09-26 02:25:53+0000] Flushing logs... OK
[2021-09-26 02:25:53+0000] Deleting bootstrap cluster...

Vérifier et interagir avec le cluster

Vous trouverez le fichier kubeconfig de votre cluster sur la VM abm-ws dans le répertoire bmctl-workspace. Pour vérifier votre déploiement, procédez comme suit.

  1. Définissez la variable d'environnement KUBECONFIG avec le chemin d'accès au fichier de configuration du cluster pour exécuter les commandes kubectl sur le cluster :

    export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
    kubectl get nodes
    

    Le nombre de nœuds du cluster doit s'afficher, avec un résultat semblable à celui-ci :

    NAME      STATUS   ROLES                  AGE     VERSION
    abm-cp1   Ready    control-plane,master   5m24s   v1.20.5-gke.1301
    abm-w1    Ready    <none>                 2m17s   v1.20.5-gke.1301  
    

Se connecter à votre cluster depuis la console Google Cloud

Pour observer vos charges de travail dans Google Cloud Console, vous devez vous connecter au cluster. Pour obtenir des instructions et des informations sur la connexion à votre cluster, consultez la section Se connecter à un cluster depuis Google Cloud Console.

Effectuer un nettoyage

Vous pouvez nettoyer le cluster en exécutant la commande suivante dans la VM de votre station de travail administrateur (abm-ws).

export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME

Étape suivante

Vous pouvez maintenant installer le fournisseur cloud OpenStack sur le cluster GKE sur Bare Metal que vous venez de créer en suivant le guide Configurer le fournisseur cloud OpenStack pour Kubernetes. Cela vous permet d'exposer vos applications à l'aide d'un service de type LoadBalancer en utilisant OpenStack LBaaS.