חיבור מ-Compute Engine: כמה לקוחות

שירות Compute Engine תומך ביצירה של כמה מכונות וירטואליות באמצעות הפקודה gcloud compute instances bulk create.

בקטעים הבאים מתואר תהליך היצירה של סקריפט לטעינה בזמן ההפעלה והפריסה שלו בכל מספר של מכונות וירטואליות ב-Compute Engine.

הוראות מפורטות ליצירה של מכונה וירטואלית אחת וחיבור אליה זמינות במאמר חיבור מ-Compute Engine: לקוח יחיד.

ההרשאות הנדרשות

כדי ליצור מכונה וירטואלית (VM) ב-Compute Engine, צריך לקבל את תפקיד ה-IAM הבא:

  • מנהל מכונות של Compute (גרסה 1) (roles/compute.instanceAdmin.v1). מידע נוסף זמין ב[מסמכי התיעוד של Compute Engine][gce-role].

הגדרה של משתני סביבה

בפקודות לדוגמה במסמך הזה נעשה שימוש במשתני הסביבה הבאים:

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

מעדכנים את הערכים האלה לערכים הרצויים.

יצירת מפתח SSH

יוצרים מפתח SSH ושומרים אותו באופן מקומי כדי להפיץ אותו למכונות הווירטואליות של הלקוח. המפתח משויך למשתמש ה-SSH שצוין במשתני הסביבה, והוא נוצר בכל מכונה וירטואלית:

# 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

מקבלים את כתובות ה-IP של שרת Parallelstore בפורמט שניתן לשימוש על ידי סוכן daos:

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

מקבלים את שם הרשת שמשויך למופע Parallelstore:

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

יצירת סקריפט לטעינה בזמן ההפעלה

סקריפט לטעינה בזמן ההפעלה מצורף למכונה הווירטואלית ומופעל בכל פעם שהמערכת מופעלת. סקריפט לטעינה בזמן ההפעלה עושה את הפעולות הבאות:

  • הגדרת סוכן ה-DAO
  • התקנה של הספריות הנדרשות
  • מבצעת הרכבה של מופע Parallelstore אל /tmp/parallelstore/ בכל מכונה וירטואלית

הסקריפט הבא פועל במכונות וירטואליות שמריצות 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

כדי לקבל עזרה באופטימיזציה של הערכים של --thread-count ו---eq-count, אפשר לעיין בקטע ספירת השרשורים וספירת תורי האירועים בדף שיקולים לגבי ביצועים.

יצירת מכונות וירטואליות של לקוחות

הביצועים הכוללים של עומסי העבודה תלויים בסוגי המכונות של הלקוח. בדוגמה הבאה נעשה שימוש במכונות וירטואליות מסוג c2-standard-30. כדי לשפר את הביצועים באמצעות כרטיסי רשת מהירים יותר, צריך לשנות את הערך machine-type. פרטים על סוגי המכונות הזמינים מופיעים במאמר השוואה בין משפחות של מכונות ומשאבים.

כדי ליצור כמות גדולה של מכונות וירטואליות, משתמשים בפקודה 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}

המאמרים הבאים