Ce guide vous explique comment installer Google Distributed Cloud (logiciel uniquement) sur Bare Metal sur des machines virtuelles (VM) OpenStack avec des systèmes d'exploitation compatibles. Le déploiement utilise un script pour simplifier l'installation d'un cluster hybride dans les VM OpenStack. Le guide vous explique également comment activer l'équilibrage de charge en tant que service (LBaaS). Vous pouvez utiliser le service OpenStack LBaaS et le fournisseur cloud OpenStack de Kubernetes avec Google Distributed Cloud pour exposer les services Kubernetes en dehors du cluster OpenStack.
Google Distributed Cloud ne provisionne pas automatiquement les VM OpenStack, et le provisionnement de ces VM n'est pas abordé dans 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.
Le guide comprend les sections suivantes :
Déployer Google Distributed Cloud
Configurer le fournisseur cloud OpenStack pour Kubernetes dans le cluster installé pour l'intégration aux équilibreurs de charge Octavia
Valider le fournisseur cloud OpenStack pour l'intégration à Kubernetes
Ce guide utilise OpenStack Ussuri, mais Google Distributed Cloud n'exige pas de versions spécifiques d'OpenStack. Le guide utilise des VM OpenStack pour vous fournir un environnement de démonstration de faisabilité à deux nœuds exécuté sur OpenStack. Pour connaître les exigences d'installation en production de Google Distributed Cloud, consultez les conditions préalables à l'installation.
Exemple de déploiement
Ce guide fournit un exemple de déploiement d'un cluster Bare Metal sur OpenStack qui s'intègre au système 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 :
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 :
- Utilisez ce script Terraform pour provisionner automatiquement les ressources.
- Provisionner les ressources manuellement.
- Les VM OpenStack suivantes doivent être prêtes et disponibles via SSH :
Nom | Adresse IP | Objectif |
---|---|---|
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 Google Distributed Cloud sur les autres machines. |
abm-cp1 | 10.200.0.11 | Plan de contrôle de cluster: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:cet hôte exécute les charges de travail Kubernetes. |
Déployer Google Distributed Cloud
Ce guide vous explique comment effectuer les tâches suivantes :
- Installer les outils dont vous avez besoin sur la VM de la station de travail administrateur
abm-ws
- Configurer l'ID de projet et le compte de service nécessaires pour effectuer le déploiement de manière sécurisée
- Créer un fichier de configuration du cluster
- Créez un cluster.
Installer les outils requis
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 '"')
Assurez-vous de pouvoir utiliser SSH pour vous connecter en toute sécurité à la VM
abm-ws
et vous connecter en tant qu'utilisateurroot
. L'utilisateurroot
configuré par les scripts Terraform estabm
.ssh ubuntu@$FLOATING_IP sudo -u abm -i
Vérifiez que vous pouvez vous connecter aux autres nœuds à l'aide de SSH:
ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded' ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'
Les réponses attendues pour les commandes précédentes sont les suivantes:
SSH to abm-cp1 succeeded SSH to abm-w1 succeeded
Téléchargez l'utilitaire de ligne de commande
kubectl
sur la VMabm-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/
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
Obtenez les identifiants d'accès à Google Cloud CLI pour votre compte utilisateur.
Ces identifiants sont utilisés avec les commandes
gcloud
suivantes.gcloud auth login
Assurez-vous que Google Cloud CLI est configuré pour utiliser le projet Google Cloud dans lequel vous souhaitez enregistrer votre cluster.
gcloud config set project PROJECT_ID
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
Créez le compte de service
bm-gcr
. Ce compte de service vous sera utile pour vous authentifier à partir du cluster.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
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
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
Téléchargez l'utilitaire de ligne de commande
bmctl
.mkdir baremetal && cd baremetal gcloud storage cp gs://anthos-baremetal-release/bmctl/1.31.0-gke.889/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
Créez un fichier de configuration de cluster pour votre cluster:
bmctl create config -c CLUSTER_NAME
Mettez à jour le fichier de configuration pour l'utiliser avec OpenStack:
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.31.0-gke.889 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
Créer le cluster
Créez 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 l'agent 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:
Définissez la variable d'environnement
KUBECONFIG
avec le chemin d'accès au fichier de configuration du cluster pour exécuter les commandeskubectl
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 la console Google Cloud, vous devez vous connecter au cluster. Pour obtenir des instructions et des informations sur la connexion à votre cluster, consultez la section Utiliser des clusters depuis la console Google Cloud.
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
- Pour installer le fournisseur cloud OpenStack sur le cluster nouvellement créé, suivez le guide Configurer le fournisseur cloud OpenStack pour Kubernetes.