Der Compute Engine-Dienst unterstützt das Erstellen mehrerer VMs mit dem Befehl gcloud compute instances bulk create
.
In den folgenden Abschnitten wird beschrieben, wie Sie ein Startskript erstellen und auf beliebig vielen Compute Engine-VMs bereitstellen.
Eine ausführliche Anleitung zum Erstellen und Verbinden mit einer einzelnen VM finden Sie unter Verbindung von der Compute Engine herstellen: einzelner Client.
Erforderliche Berechtigungen
Sie benötigen die folgende IAM-Rolle, um eine Compute Engine-VM zu erstellen:
- „Compute-Instanzadministrator“ (Version 1) (
roles/compute.instanceAdmin.v1
). Weitere Informationen finden Sie in der [Compute Engine-Dokumentation][gce-role].
Umgebungsvariablen festlegen
In den Beispielbefehlen in diesem Dokument werden die folgenden Umgebungsvariablen verwendet:
export SSH_USER="daos-user"
export CLIENT_PREFIX="daos-client-vm"
export NUM_CLIENTS=10
Aktualisieren Sie diese auf die gewünschten Werte.
SSH-Schlüssel erstellen
Erstellen Sie einen SSH-Schlüssel und speichern Sie ihn lokal, um ihn an die Client-VMs zu verteilen. Der Schlüssel wird mit dem in den Umgebungsvariablen angegebenen SSH-Nutzer verknüpft und auf jeder VM erstellt:
# 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"
Parallelstore-Netzwerkdetails abrufen
Rufen Sie die Parallelstore-Server-IP-Adressen in einem Format ab, das vom daos-Agenten verwendet werden kann:
export ACCESS_POINTS=$(gcloud beta parallelstore instances describe INSTANCE_NAME \
--location LOCATION \
--format "value[delimiter=', '](format("{0}", accessPoints))")
Rufen Sie den Netzwerknamen ab, der mit der Parallelstore-Instanz verknüpft ist:
export NETWORK=$(gcloud beta parallelstore instances describe INSTANCE_NAME \
--location LOCATION \
--format "value[delimiter=', '](format("{0}", network))") | awk -F '/' '{print $NF}'
Startskript erstellen
Das Startskript ist mit der VM verknüpft und wird bei jedem Systemstart ausgeführt. Das Startskript führt Folgendes aus:
- Konfiguriert den daos-Agent
- Erforderliche Bibliotheken werden installiert.
- Parallelstore-Instanz auf jeder VM auf
/tmp/parallelstore/
bereitstellen
Das folgende Script funktioniert auf VMs mit 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
Informationen zur Optimierung der Werte für --thread-count
und --eq-count
finden Sie auf der Seite Leistungsaspekte im Abschnitt Anzahl der Threads und der Ereigniswarteschlange.
Client-VMs erstellen
Die Gesamtleistung Ihrer Arbeitslasten hängt von den Clientmaschinentypen ab.
Im folgenden Beispiel werden c2-standard-30
VMs verwendet. Ändern Sie den Wert machine-type
, um die Leistung mit schnelleren NICs zu steigern. Weitere Informationen zu den verfügbaren Maschinentypen finden Sie im Leitfaden zu Ressourcen und Vergleichen für Maschinenfamilien.
Wenn Sie VM-Instanzen im Bulk erstellen möchten, verwenden Sie den Befehl 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}