El servicio 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 de creación de una secuencia de comandos de inicio y su implementación en cualquier número de VMs de Compute Engine.
Para obtener instrucciones detalladas sobre cómo crear una sola máquina virtual y conectarse a ella, consulta el artículo Conectarse desde Compute Engine: un solo cliente.
Permisos obligatorios
Para crear una VM de Compute Engine, debes tener el siguiente rol de gestión de identidades y accesos:
- Administrador de instancias de Compute (v. 1) (
roles/compute.instanceAdmin.v1
). Para obtener más información, consulta la [documentación de Compute Engine][gce-role].
Establece variables de entorno:
En los comandos de ejemplo de este documento se usan las siguientes variables de entorno:
export SSH_USER="daos-user"
export CLIENT_PREFIX="daos-client-vm"
export NUM_CLIENTS=10
Actualiza estos valores según tus preferencias.
Crear una clave SSH
Crea una clave SSH y guárdala localmente para distribuirla a las VMs cliente. La clave está asociada al usuario de SSH especificado en las variables de entorno y se crea en cada máquina virtual:
# 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"
Obtener los detalles de la red de Parallelstore
Obtén las direcciones IP del servidor Parallelstore en un formato que pueda usar el agente 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 a 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}'
Crear 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 necesarias.
- Monta tu instancia de Parallelstore en
/tmp/parallelstore/
en cada VM.
La siguiente secuencia de comandos funciona en máquinas virtuales 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 sobre cómo optimizar los valores de --thread-count
y --eq-count
, consulta la sección Número de subprocesos y número de colas de eventos de la página Consideraciones sobre el rendimiento.
Crear las VMs 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 machine-type
valor para aumentar el rendimiento con NICs más rápidas. Consulta la guía de recursos y comparación de familias de máquinas para obtener información detallada 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}