Los clústeres de Anthos alojados en equipos físicos admiten el uso de OpenStack como una plataforma de nube privada. Esta compatibilidad te permite usar los siguientes servicios de OpenStack:
- Infraestructura como servicio (IaaS)
- Balanceo de cargas como servicio (LBaaS)
- Almacenamiento
Puedes implementar clústeres de Anthos en equipos físicos que se ejecutan en máquinas virtuales (VM) de OpenStack con sistemas operativos compatibles. Los clústeres de Anthos alojados en equipos físicos no aprovisionan las VM de forma automática, y este proceso está fuera del alcance de esta guía. Para conocer los requisitos de VM y revisar una implementación de ejemplo, consulta el ejemplo de Terraform a fin de crear VM de OpenStack.
Puedes usar OpenStack LBaaS y el proveedor de servicios en la nube de Kubernetes OpenStack en clústeres de Anthos en equipos físicos para exponer los servicios de Kubernetes fuera del clúster de OpenStack.
La guía consta de las siguientes secciones:
- Implementar clústeres de Anthos en equipos físicos
- Configura el proveedor de servicios en la nube de OpenStack para Kubernetes en clústeres de Anthos alojados en equipos físicos a fin de integrarlos a los balanceadores de cargas de Octavia.
- Valida el proveedor de servicios en la nube de OpenStack para la integración de Kubernetes
En esta guía, se usa OpenStack ussuri, pero podría funcionar con versiones anteriores de OpenStack. Las versiones anteriores de OpenStack no se probaron. En la guía, se usan VM de OpenStack para proporcionarte un clúster de dos nodos de Anthos en un entorno de prueba de concepto de equipos físicos que se ejecuta en OpenStack. Si deseas obtener información sobre cómo crear un entorno de producción con un plano de control de alta disponibilidad, consulta la documentación de los clústeres de Anthos en el equipo físico para los requisitos del entorno de producción.
Implementación de ejemplo
En esta guía, se proporciona una implementación de ejemplo de clústeres de Anthos en equipos físicos alojados en OpenStack que se integran en LBaaS de OpenStack. Debes comprender y ajustar los comandos y los valores de configuración para que se ajusten a tu entorno de OpenStack. En el siguiente diagrama, se muestra la implementación resultante:
Requisitos previos
- OpenStack Ussuri con LBaaS v2 implementado y funcional
- Cuenta de servicio para descargar la herramienta bmctl
- Configura las VM y la red de OpenStack como se muestra en el ejemplo de implementación.
Para aprovisionar una configuración similar en el entorno de OpenStack, tienes las siguientes opciones:
- Usa esta secuencia de comandos de Terraform para aprovisionar los recursos de forma automática.
- Aprovisiona los recursos de forma manual.
- Las siguientes VM de OpenStack deben estar listas y disponibles a través de SSH:
Nombre | Uso | Dirección IP |
---|---|---|
abm-ws |
10.200.0.10 (IP privada) float_ip (IP pública) |
Actúa como la estación de trabajo de administrador. Se usa para implementar Anthos en equipos físicos a las otras máquinas. |
abm-cp1 | 10.200.0.11 | Plano de control del clúster de Anthos: Este host ejecuta el plano de control de Kubernetes y el balanceador de cargas. |
abm-w1 | 10.200.0.12 | Nodo trabajador de clúster de Anthos: Este host ejecuta las cargas de trabajo de Kubernetes. |
Implementar clústeres de Anthos en equipos físicos
En esta sección, se muestra cómo completar las siguientes tareas:
- Instalar las herramientas que necesitas en la VM de estación de trabajo de administrador
abm-ws
. - Configurar el ID del proyecto y la cuenta de servicio que se necesitan para completar la implementación de forma segura
- Crear un archivo de configuración del clúster
- Implementar clústeres de Anthos en equipos físicos
Instala las herramientas que necesitas
Recupera la dirección IP flotante pública 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 '"')
Asegúrate de poder conectarte de forma segura a la VM
abm-ws
a través de SSH y acceder como usuarioroot
. El usuarioroot
configurado por las secuencias de comandos de Terraform esabm
.ssh ubuntu@$FLOATING_IP sudo -u abm -i
Verifica que puedas establecer una conexión SSH a los otros nodos.
ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded' ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'
El resultado esperado para los comandos anteriores es el siguiente:
SSH to abm-cp1 succeeded SSH to abm-w1 succeeded
Descarga la utilidad de línea de comandos de
kubectl
en 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/
Instala Docker en 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
Configura el proyecto y la cuenta de servicio de Google Cloud
Obtén credenciales de acceso a Google Cloud CLI para tu cuenta de usuario. Se usará cuando se usen los comandos de
gcloud
que siguen.gcloud auth login
Asegúrate de que Google Cloud CLI esté configurada para usar el proyecto de Google Cloud en el que deseas que se registren tus clústeres de Anthos en equipos físicos.
gcloud config set project PROJECT_ID
Configura las credenciales predeterminadas de la aplicación (ADC) para tu cuenta de usuario en la estación de trabajo de administrador. Se usará cuando se usa la herramienta
bmctl
para crear el clúster.gcloud auth application-default login
Crea la cuenta de servicio
bm-gcr
. Usa esta cuenta de servicio para autenticarte desde el clúster de clústeres de Anthos en equipos físicos.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
Habilita las API necesarias.
gcloud services enable \ anthos.googleapis.com \ anthosgke.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ opsconfigmonitoring.googleapis.com \ anthosaudit.googleapis.com
Otorga permisos adicionales a la cuenta de servicio
bm-gcr
. Cuando agregas permisos, no necesitas crear varias cuentas de servicio para servicios individuales.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"
Crear un archivo de configuración del clúster
Descarga la utilidad de línea de comandos de
bmctl
.mkdir baremetal && cd baremetal gsutil cp gs://anthos-baremetal-release/bmctl/1.8.9/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
Crea clústeres de Anthos en el lugar de trabajo del equipo físico para tu clúster.
bmctl create config -c CLUSTER_NAME
Crea el archivo de configuración para tu clúster de clústeres de Anthos en equipos físicos.
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.8.9 gkeConnect: projectID: PROJECT_ID controlPlane: nodePoolSpec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.11 clusterNetwork: pods: cidrBlocks: - 10.202.0.0/16 services: cidrBlocks: - 10.203.0.0/16 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
Implementar
Implemente el clúster:
bmctl create cluster -c CLUSTER_NAME
La ejecución del comando bmctl
comienza a configurar un clúster híbrido nuevo. Esto incluye realizar comprobaciones previas en los nodos, crear los clústeres de administrador y de usuario, y registrar el clúster con Google Cloud mediante Connect.
La configuración completa puede demorar hasta 15 minutos. Verás el siguiente resultado mientras se crea el clúster:
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...
Verifica el clúster e interactúa con él
Puedes encontrar el archivo kubeconfig
de tu clúster en la VM de abm-ws
dentro del directorio bmctl-workspace
. Para verificar tu implementación, completa los siguientes pasos.
Configura la variable de entorno
KUBECONFIG
con la ruta al archivo de configuración del clúster a fin de ejecutar comandos dekubectl
en el clúster:export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig kubectl get nodes
Deberías ver los nodos del clúster impreso, de manera similar al siguiente resultado:
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
Accede a tu clúster desde la consola de Google Cloud
Para observar tus cargas de trabajo en la consola de Google Cloud, debes acceder al clúster. Para obtener instrucciones y más información sobre cómo acceder a tu clúster, consulta Accede a un clúster desde la consola de Google Cloud.
Realiza una limpieza
Para limpiar el clúster, ejecuta el siguiente comando en la VM de la estación de trabajo de administrador (abm-ws
).
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
Próximos pasos
Para instalar el Proveedor de servicios en la nube de OpenStack en los clústeres de Anthos recién creados en el clúster de equipos físicos, sigue los pasos en la guía Configura el proveedor de servicios en la nube de OpenStack para Kubernetes. Esto te permite exponer tus aplicaciones mediante un servicio de tipo LoadBalancer
y aprovechar LBaaS de OpenStack.