Conéctate desde Compute Engine: varios clientes

El servicio de Compute Engine admite la creación de varias VMs con el comando gcloud compute instances bulk create.

En las siguientes secciones, se describe el proceso para crear una secuencia de comandos de inicio y, luego, implementarla en cualquier cantidad de VMs de Compute Engine.

Para obtener instrucciones detalladas sobre cómo crear una sola VM y conectarte a ella, consulta Cómo conectarse desde Compute Engine: cliente único.

Permisos necesarios

Debes tener el siguiente rol de IAM para crear una VM de Compute Engine:

  • Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1). Para obtener más información, consulta la [documentación de Compute Engine][gce-role].

Configure las variables de entorno

Las siguientes variables de entorno se usan en los comandos de ejemplo de este documento:

export SSH_USER="daos-user"
export CLIENT_PREFIX="daos-client-vm"
export NUM_CLIENTS=10

Actualízalo a los valores que desees.

Crea una clave SSH

Crea una clave SSH y guárdala de forma local para que se distribuya a las VMs del cliente. La clave se asocia con el usuario de SSH especificado en las variables de entorno y se crea en cada VM:

# Generate an SSH key for the specified user
ssh-keygen -t rsa -b 4096 -C "${SSH_USER}" -N '' -f "./id_rsa"
chmod 600 "./id_rsa"

# Create a new file in the format [user]:[public key] user
echo "${SSH_USER}:$(cat "./id_rsa.pub") ${SSH_USER}" > "./keys.txt"

Obtén detalles de la red de Parallelstore

Obtén las direcciones IP del servidor de Parallelstore en un formato que pueda consumir el agente de daos:

export ACCESS_POINTS=$(gcloud beta parallelstore instances describe INSTANCE_NAME \
  --location LOCATION \
  --format "value[delimiter=', '](format("{0}", accessPoints))")

Obtén el nombre de la red asociada con la instancia de Parallelstore:

export NETWORK=$(gcloud beta parallelstore instances describe INSTANCE_NAME \
  --location LOCATION \
  --format "value[delimiter=', '](format("{0}", network))") | awk -F '/' '{print $NF}' 

Crea la secuencia de comandos de inicio

La secuencia de comandos de inicio se adjunta a la VM y se ejecuta cada vez que se inicia el sistema. La secuencia de comandos de inicio hace lo siguiente:

  • Configura el agente de daos
  • Instala las bibliotecas requeridas
  • Activa tu instancia de Parallelstore en /tmp/parallelstore/ en cada VM.

La siguiente secuencia de comandos funciona en VMs que ejecutan HPC Rocky 8.

# Create a startup script that configures the VM
cat > ./startup-script << EOF
sudo tee /etc/yum.repos.d/parallelstore-v2-6-el8.repo << INNEREOF
[parallelstore-v2-6-el8]
name=Parallelstore EL8 v2.6
baseurl=https://us-central1-yum.pkg.dev/projects/parallelstore-packages/v2-6-el8
enabled=1
repo_gpgcheck=0
gpgcheck=0
INNEREOF
sudo dnf makecache

# Install daos-client
dnf install -y epel-release # needed for capstone
dnf install -y daos-client

# Upgrade libfabric
dnf upgrade -y libfabric

systemctl stop daos_agent

mkdir -p /etc/daos
cat > /etc/daos/daos_agent.yml << INNEREOF
access_points: ${ACCESS_POINTS}

transport_config:
  allow_insecure: true

fabric_ifaces:
- numa_node: 0
  devices:
  - iface: eth0
    domain: eth0
INNEREOF

echo -e "Host *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null" > /home/${SSH_USER}/.ssh/config
chmod 600 /home/${SSH_USER}/.ssh/config

usermod -u 2000 ${SSH_USER}
groupmod -g 2000 ${SSH_USER}
chown -R ${SSH_USER}:${SSH_USER} /home/${SSH_USER}

chown -R daos_agent:daos_agent /etc/daos/

systemctl enable daos_agent
systemctl start daos_agent

mkdir -p /tmp/parallelstore
dfuse -m /tmp/parallelstore --pool default-pool --container default-container --disable-wb-cache --thread-count=16 --eq-count=8 --multi-user
chmod 777 /tmp/parallelstore

EOF

Para obtener ayuda para optimizar los valores de --thread-count y --eq-count, consulta la sección Cantidad de subprocesos y cantidad de colas de eventos de la página Consideraciones de rendimiento.

Crea las VMs de cliente

El rendimiento general de tus cargas de trabajo depende de los tipos de máquinas cliente. En el siguiente ejemplo, se usan VMs c2-standard-30. Modifica el valor machine-type para aumentar el rendimiento con NIC más rápidas. Consulta la guía de comparación y recursos de familias de máquinas para obtener detalles sobre los tipos de máquinas disponibles.

Para crear instancias de VM de forma masiva, usa el comando gcloud compute instances bulk create:

gcloud compute instances bulk create \
  --name-pattern="${CLIENT_PREFIX}-####" \
  --zone="LOCATION" \
  --machine-type="c2-standard-30" \
  --network-interface=subnet=${NETWORK},nic-type=GVNIC \
  --network-performance-configs=total-egress-bandwidth-tier=TIER_1 \
  --create-disk=auto-delete=yes,boot=yes,device-name=client-vm1,image=projects/cloud-hpc-image-public/global/images/hpc-rocky-linux-8-v20240126,mode=rw,size=100,type=pd-balanced \
  --metadata=enable-oslogin=FALSE \
  --metadata-from-file=ssh-keys=./keys.txt,startup-script=./startup-script \
  --count ${NUM_CLIENTS}

¿Qué sigue?