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}