הכנת צמתים ופריסת VCF באמצעות ערכת הכלים

בדף הזה מוסבר איך להשתמש בערכת הכלים של פתרון VMware ב- Google Cloud כדי להכין צומתי ESXi ללא מערכת הפעלה, להגדיר רשתות vSwitch ומאגרי נתונים של vSAN, ולפרוס את מכשיר ההתקנה של VMware Cloud Foundation ‏ (VCF).

סקירה כללית

ערכת הכלים של פתרון VMware מבצעת באופן אוטומטי את ההגדרה הראשונית של מכונות ESXi ללא מערכת הפעלה (bare-metal) שנפרסו בפרויקט Google Cloud . כשמפעילים את ערכת הכלים מ-VM של jumpbox, היא מבצעת את הפעולות הבאות:

  1. אימות פרטי הכניסה של המארח ואיפוס הסיסמה: מתחבר לכל מכונת ESXi ללא מערכת הפעלה ומאפס את הסיסמה הראשונית של ESXi root לסוד esxi-root-password שמאוחסן ב-Secret Manager.
  2. הגדרת רשת: מגדירה את vSwitch0 ויוצרת קבוצות של יציאות עם תיוג של VLAN לרשת של מנהל ההתקנה של VCF.
  3. הגדרת האחסון: מאתחלת כונני SSD מקומיים למאגר vsanDatastore.
  4. פריסת תוכנת ההתקנה של VCF: הורדת קובץ ה-OVA (מכשיר וירטואלי פתוח) של תוכנת ההתקנה של VCF מהמאגר אופליין, פריסת המכשיר במארח ESXi ייעודי, הזרקת פרמטרים של רשת ו-DNS והפעלת תוכנת ההתקנה.

בחירת מסלול פריסה

אפשר להריץ את ערכת הכלים באחת מהדרכים הבאות:

  • אפשרות ראשונה: הקצאת jumpbox באמצעות Terraform (מומלץ): משתמשים ב-Terraform כדי להקצות מכונה וירטואלית ייעודית של Compute Engine jumpbox בתוך ה-VPC המארח של ESXi, רשת המשנה של ה-VPC, שער Cloud NAT וכללי חומת האש של Identity-Aware Proxy (IAP) SSH.
  • אפשרות שנייה: שימוש במכונה וירטואלית קיימת של Jumpbox: מריצים את ערכת הכלים ישירות ממכונה וירטואלית קיימת של Linux שנמצאת ב-VPC של מארח ESXi, ברשת משנה שמופעלת בה גישה פרטית ל-Google.

לפני שמתחילים

לפני שמפעילים את ערכת הכלים, צריך לבצע את הפעולות הבאות:

רשימת היתרים של רשתות משנה בשכבה 2 שמבוססות על VLAN

כדי לתמוך ברשתות שמבוססות על VLAN, בפתרון של VMware צריך להגדיר את המאפיין Resolve Subnet Mask של רשתות המשנה של רשת ה-VPC לערך Broadcast primary range only with learning. פותחים כרטיס תמיכה במרכז התמיכה של מסוףGoogle Cloud ומציינים את הפרטים הבאים:

  • המוצר: Google Cloud VMware Engine
  • עדיפות: P2
  • קטגוריה: קישוריות רשת
  • ההשפעה על העסק: שאלה טכנית כללית
  • לספק פרטים נוספים: Allowlist L2 network connectivity for my project, יחד עם מזהה הפרויקט, מספר הפרויקט, והאזור והתחום של הפריסה.

מידע נוסף על תמיכה ברשתות מבוססות-VLAN זמין במאמר אמולציה של שכבה 2: שידור ARP ולמידת MAC בהתאמה אישית.

הפעלת ממשקי ה-API הנדרשים

צריך להיות לכם פרויקט פעיל ב- Google Cloud שהחיוב מופעל בו (זה יכול להיות אותו פרויקט ב- Google Cloud שבו נמצאים מארחי ה-ESXi, או פרויקט נפרד של jumpbox). מפעילים את ממשקי ה-API הבאים:

  • ‫Compute Engine API ‏ (compute.googleapis.com) – לפרויקטים של מארח jumpbox ו-ESXi
  • ‫Identity and Access Management (IAM) API‏ (iam.googleapis.com) – לפרויקט jumpbox
  • ‫Cloud Resource Manager API‏ (cloudresourcemanager.googleapis.com) – לפרויקטים של מארחי jumpbox ו-ESXi
  • ‫Cloud Identity-Aware Proxy API‏ (iap.googleapis.com) – לפרויקט של jumpbox
  • ‫Secret Manager API‏ (secretmanager.googleapis.com) – לפרויקט של מארח ESXi

כדי להפעיל את ממשקי ה-API באמצעות ה-CLI של gcloud, מריצים את הפקודה הבאה:

gcloud services enable \
    compute.googleapis.com \
    iam.googleapis.com \
    cloudresourcemanager.googleapis.com \
    iap.googleapis.com \
    secretmanager.googleapis.com \
    --project='PROJECT_ID'

מחליפים את PROJECT_ID במזהה של פרויקט היעד ב- Google Cloud .

הגדרת הרשאות IAM

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

  • מפעיל Terraform: המשתמש או זהות ה-CI/CD שמפעילים את terraform apply. אם מתחזים ל-Terraform Runner, צריך את התפקיד "יצירת אסימונים בחשבון שירות" (roles/iam.serviceAccountTokenCreator) בחשבון השירות של Terraform Runner.
  • ‫Terraform Runner: הזהות שמקצה את התשתית של Terraform:
    • אדמין של רשת Compute‏ (roles/compute.networkAdmin)
    • Compute Instance Admin v1 (roles/compute.instanceAdmin.v1)
    • אדמין אבטחה של Compute‏ (roles/compute.securityAdmin)
    • משתמש בחשבון שירות (roles/iam.serviceAccountUser)
    • אדמין IAM בפרויקט (roles/resourcemanager.projectIamAdmin) בפרויקט היעד (אם משתמשים בניהול IAM אוטומטי עם Terraform)
  • משתמש SSH של Jumpbox: הזהות שמתחברת למכונה הווירטואלית של Jumpbox באמצעות IAP:
    • גישה למשאבי מנהרה של IAP‏ (roles/iap.tunnelResourceAccessor)
    • צפייה ב-Compute‏ (roles/compute.viewer)
  • מריץ הסקריפטים של Jumpbox: חשבון המשתמש או חשבון השירות שמריץ את הסקריפט של ערכת הכלים של Python ב-Jumpbox:
    • ממשק גישה לסודות ב-Secret Manager ‏ (roles/secretmanager.secretAccessor)
    • אדמין של Compute‏ (roles/compute.admin)
    • אדמין IAM בפרויקט (roles/resourcemanager.projectIamAdmin)
  • סוכן שירות (P4SA) של VMware Engine network drift (service-PROJECT_NUMBER@gcp-sa-network-drift.):
    • אדמין של רשת Compute‏ (roles/compute.networkAdmin)

אחסון פרטי כניסה ב-Secret Manager

ערכת הכלים מאחזרת סיסמאות בזמן הריצה מ-Secret Manager ומשתמשת בסוד esxi-root-password כדי לאפס את הסיסמה הראשונית של root בכל מכונה של ESXi ללא מערכת הפעלה. יוצרים סודות בפרויקט ב- Google Cloud לסיסמת ESXi ב-root, לסיסמת VCF ב-root ולסיסמת המשתמש המקומי ב-VCF‏ (admin):

# 1. Create Secret for ESXi Host Root Password
gcloud secrets create esxi-root-password \
    --replication-policy='automatic' \
    --project='PROJECT_ID'
echo -n 'YOUR_ESXI_ROOT_PASSWORD' | gcloud secrets versions add esxi-root-password \
    --data-file=- \
    --project='PROJECT_ID'
# 2. Create Secret for VCF Installer Root Password
gcloud secrets create vcf-root-password \
    --replication-policy='automatic' \
    --project='PROJECT_ID'
echo -n 'YOUR_VCF_ROOT_PASSWORD' | gcloud secrets versions add vcf-root-password \
    --data-file=- \
    --project='PROJECT_ID'
# 3. Create Secret for VCF Local User Password
gcloud secrets create vcf-localuser-password \
    --replication-policy='automatic' \
    --project='PROJECT_ID'
echo -n 'YOUR_VCF_ADMIN_PASSWORD' | gcloud secrets versions add vcf-localuser-password \
    --data-file=- \
    --project='PROJECT_ID'

לפני שמריצים את הפקודות, מחליפים את הערכים הבאים:

  • ‫PROJECT_ID: מזהה פרויקט היעד ב-Google Cloud .
  • YOUR_ESXI_ROOT_PASSWORD: הסיסמה החדשה של root שצריך להגדיר במארחי ה-ESXi ללא מערכת הפעלה, במקום הסיסמה הראשונית של המכונה.
  • ‫YOUR_VCF_ROOT_PASSWORD: הסיסמה של root למכשיר ההתקנה של VCF.
  • ‫YOUR_VCF_ADMIN_PASSWORD: סיסמת המשתמש של האדמין המקומי למכשיר של תוכנת ההתקנה של VCF.

הקצאת jumpbox באמצעות Terraform

אם אין לכם jumpbox קיים עם קישוריות רשת למארחי ESXi, אתם יכולים להשתמש במודולים של Terraform שסופקו כדי לפרוס VM של jumpbox.

שכפול המאגר של ערכת הכלים

משכפלים את המאגר של ערכת הכלים לתחנת העבודה המקומית:

mkdir -p ~/smve-toolkit
cd ~/smve-toolkit
git clone https://github.com/GoogleCloudPlatform/self-managed-vmware-solution-toolkit
cd self-managed-vmware-solution-toolkit/smve-toolkit-jumpbox-tf

הגדרת משתני Terraform

עוברים לספרייה infrastructure ויוצרים את הקובץ terraform.tfvars:

cd infrastructure
cp terraform.tfvars.example terraform.tfvars

מעדכנים את הקובץ terraform.tfvars עם הפרמטרים של הפרויקט:

project_id      = "PROJECT_ID"
region          = "REGION"
zone            = "ZONE" # Match target ESXi host zone
# Network configuration
create_subnet   = true
vpc_name        = "VPC_NAME"
subnet_name     = "smve-toolkit-subnet"
subnet_cidr     = "10.10.0.0/28" # Minimum /29 required
# Cloud NAT and egress
enable_internet = true
# Jumpbox VM instance
jumpbox_name    = "smve-toolkit-jumpbox"

בטבלה הבאה מתוארים משתני הקלט העיקריים של Terraform:

משתנה דרישה ברירת מחדל תיאור
project_id חובה ללא Google Cloud מזהה הפרויקט שבו Terraform פורס את התשתית.
region חובה ללא אזור היעד Google Cloud(לדוגמה, us-central1).
zone אופציונלי ${region}-a אזור היעד. כדי לצמצם את זמן האחזור, הגדירו את המשתנה הזה כך שיתאים לאזור של מארחי ה-ESXi שלכם ב-Bare Metal.
vpc_name מותנה "" השם של רשת ה-VPC שמארחת את צומתי ה-ESXi. חובה אם המשתנה create_subnet מוגדר כ-true.
create_subnet אופציונלי true מגדירים את הערך true כדי ליצור רשת משנה חדשה, או את הערך false כדי להשתמש ברשת משנה קיימת.
subnet_name אופציונלי "smve-toolkit-subnet" שם רשת המשנה של ה-VM של ה-jumpbox. אם המשתנה create_subnet מוגדר כ-false, רשת המשנה חייבת להיות ברשת vpc_name.
subnet_cidr מותנה "" טווח ה-CIDR הראשי של IPv4 (מינימום /29). חובה אם המשתנה create_subnet מוגדר לערך true.
enable_internet אופציונלי true שולט ביצירה של Cloud Router,‏ Cloud NAT ונתיב ברירת מחדל לתעבורת נתונים לאינטרנט. מגדירים את הערך false אחרי ההגדרה כדי להסיר את שער ה-NAT, הנתב והנתיב.
jumpbox_name אופציונלי "smve-toolkit-jumpbox" השם של המכונה הווירטואלית של Jumpbox ב-Compute Engine.
machine_type אופציונלי "e2-micro" סוג המכונה של ה-VM של ה-jumpbox.
boot_disk_size אופציונלי 30 גודל דיסק האתחול ב-GB של מכונת ה-VM של ה-jumpbox (מינימום 10GB).
boot_disk_type אופציונלי "pd-balanced" סוג הדיסק המתמיד של דיסק האתחול של ה-jumpbox‏ (pd-balanced,‏ pd-standard,‏ pd-ssd,‏ pd-extreme).
boot_disk_image אופציונלי "debian-cloud/debian-12" משפחת קובצי האימג' של דיסק האתחול של מערכת ההפעלה או קובץ אימג' ספציפי self_link.
jumpbox_internal_ip אופציונלי "" כתובת IPv4 פנימית סטטית (לדוגמה, "10.10.0.5"), שם IP שמור או URI. ברירת המחדל היא כתובת IP דינמית זמנית.
service_account_email אופציונלי "" כתובת האימייל של חשבון השירות בהתאמה אישית שרוצים לצרף למכונה הווירטואלית של ה-jumpbox. ברירת המחדל היא חשבון השירות שמוגדר כברירת מחדל של Compute Engine.

פריסת התשתית של ה-jumpbox

מפעילים ומחילים את ההגדרות של Terraform:

export GOOGLE_IMPERSONATE_SERVICE_ACCOUNT='TERRAFORM_RUNNER_SA' # Optional: set only if impersonating a runner service account
terraform init
terraform validate
terraform plan -out=tfplan
terraform apply tfplan

מחליפים את TERRAFORM_RUNNER_SA בכתובת האימייל של חשבון השירות של Terraform runner.

התחברות ל-jumpbox באמצעות IAP

מתחברים למכונה הווירטואלית של ה-jumpbox באמצעות העברת TCP ב-IAP (לא נדרשת כתובת IP ציבורית):

gcloud compute ssh smve-toolkit-jumpbox \
    --project='PROJECT_ID' \
    --zone='ZONE' \
    --tunnel-through-iap

לפני שמריצים את הפקודה, מחליפים את הערכים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שמארח את ה-VM של ה-jumpbox.
  • ‫ZONE: האזור ב- Google Cloud שבו נפרסת המכונה הווירטואלית של ה-jumpbox.

שימוש במכונה וירטואלית קיימת של Jumpbox

אם אתם משתמשים במכונה וירטואלית קיימת של jumpbox, היא צריכה להיות מכונה וירטואלית של Linux Compute Engine שנמצאת באותה רשת VPC שמארחת את צומתי ה-ESXi ללא מערכת הפעלה. הדרישה הזו לגבי מיקום ה-VPC היא חובה כדי להבטיח קישוריות רשת לנקודת הקצה של Private Service Connect ‏ (PSC) במאגר אופליין שמארח את קובץ ה-OVA של תוכנת ההתקנה של VCF.

לפני שמפעילים את ערכת הכלים, צריך לוודא שה-VM הקיים של ה-jumpbox עומד בדרישות הבאות:

  1. מיקום ה-VPC: צריך לפרוס את המכונה הווירטואלית ברשת ה-VPC שמארחת את צומתי ה-ESXi.
  2. ‫Google Cloud גישה ל-API: ברשת המשנה שמארחת את ה-VM של ה-jumpbox, צריך להפעיל את הגישה הפרטית ל-Google‏ (private_ip_google_access = true) או את הגישה לאינטרנט היוצא כדי להגיע אל secretmanager.googleapis.com, ‏ compute.googleapis.com ו-iam.googleapis.com.
  3. תעבורת נתונים יוצאת להתקנת חבילות: גישה יוצאת ל-HTTP/HTTPS (באמצעות Cloud NAT, שרת proxy ארגוני או תעבורת נתונים יוצאת ישירה) כדי להתקין יחסי תלות של Python.
  4. הפעלת API והרשאות IAM: הזהות שמריצה את הסקריפט צריכה להיות עם התפקידים roles/secretmanager.secretAccessor,‏ roles/compute.admin ו-roles/resourcemanager.projectIamAdmin בפרויקט ב- Google Cloud .
  5. קישוריות SSH: ה-jumpbox צריך לאפשר תעבורת SSH נכנסת ביציאת TCP‏ 22 מטווח כתובות ה-IP של IAP‏ (35.235.240.0/20) או מטווחים מורשים של כתובות IP ציבוריות, ולזהות המתחברת צריכים להיות התפקידים הרלוונטיים (roles/iap.tunnelResourceAccessor ו-roles/compute.viewer).

הגדרת ערכת הכלים ב-jumpbox

בטרמינל של ה-jumpbox, מתקינים את יחסי התלות ומורידים את הסקריפט של ערכת הכלים.

התקנת חבילות מערכת

מתקינים את Python 3,‏ pip,‏ venv ו-Git:

sudo apt-get update
sudo apt-get install -y python3 python3-pip python3-venv git

השגת הסקריפטים של ערכת הכלים

משכפלים את המאגר או מעתיקים את הסקריפטים מתחנת העבודה המקומית:

  • אפשרות א' (שכפול באמצעות Git):

    mkdir -p ~/smve-toolkit
    cd ~/smve-toolkit
    git clone https://github.com/GoogleCloudPlatform/self-managed-vmware-solution-toolkit
    cd self-managed-vmware-solution-toolkit/python
    
  • אפשרות ב' (העתקה מתחנת העבודה המקומית באמצעות gcloud compute scp):

    gcloud compute scp --recurse ./smve-toolkit smve-toolkit-jumpbox:~/ \
      --project='PROJECT_ID' \
      --zone='ZONE' \
      --tunnel-through-iap
    # On the jumpbox terminal, go to the copied folder:
    cd ~/smve-toolkit/python
    

יצירה והפעלה של סביבה וירטואלית של Python

python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

הגדרת קובץ התצורה של הסקריפט של ערכת הכלים

יוצרים קובץ תצורה של config.json במכונה הווירטואלית של ה-jumpbox כדי לציין את מכונות היעד של ESXi ואת הגדרות הפריסה של VCF.

פרמטרים להגדרה

פרמטר חובה סוג נתונים תיאור
project כן string מזהה הפרויקט ב- Google Cloud שבו נמצאים מכונות ESXi ללא מערכת הפעלה.
zone כן string אזור היעד Google Cloud שבו נמצאים צומתי ESXi.
gce_nodes כן list(string) או object רשימה מפורשת של שמות מכונות ESXi בשרת פיזי (לדוגמה, ["vcf-mgmt-sample-node-1", "vcf-mgmt-sample-node-2"]), או אובייקט שמגלה מכונות לפי prefix (לדוגמה, {"prefix": "vcf-mgmt-sample"}) או subnet ({"subnet": "vcf-mgmt-subnet"}).
esxi_root_password_secret כן string שם הסוד או נתיב המשאב ב-Secret Manager שמכיל את סיסמת הבסיס (root) של ESXi.
vcf_deployment_config אופציונלי object אובייקט הגדרה לפריסה ולאתחול של מנהל ההתקנה של VCF. אם לא צריך לפרוס את תוכנת ההתקנה של VCF באף אחד מהצמתים שמוכנים, אפשר להשמיט את האובייקט הזה.
└─ target_gce_node מותנה string צומת היעד בשרת הפיזי שמארח את עומסי העבודה של הפריסה הראשונית. חובה אם האובייקט vcf_deployment_config מוגדר.
└─ vcf_appliance_root_password_secret מותנה string שם הסוד ב-Secret Manager שמכיל את סיסמת הבסיס של מכשיר ה-VCF.
└─ vcf_appliance_local_user_password_secret מותנה string שם הסוד ב-Secret Manager שמכיל את הסיסמה של המשתמש המקומי (אדמין) במכשיר ה-VCF.
└─ vcf_installer_ip_source מותנה ‫string או object מקור כתובת ה-IP של תוכנת ההתקנה של VCF‏ (SDDC Manager). מציינים את הערך {"reserved_address": "ADDRESS_NAME"},‏ {"forwarding_rule": "RULE_NAME"} או מחרוזת URI ישירה של משאב (לדוגמה, projects/PROJECT_ID/regions/REGION/forwardingRules/RULE_NAME).
└─ vcf_installer_fqdn מותנה string שם דומיין שמוגדר במלואו (FQDN) למתקין של VCF (מנהל SDDC).
└─ offline_depot_subnet_cidr מותנה string טווח ה-CIDR הראשי של IPv4 של תת-הרשת הייעודית למאגר אופליין (לדוגמה, /29). אסור שתהיה חפיפה עם תת-רשתות קיימות ב-VPC, ואסור להשתמש בהן שוב.
└─ dns_server אופציונלי string כתובת ה-IP של שרת ה-DNS (לדוגמה, כתובת ה-IP השמורה של ה-DNS מרשת המשנה או משרת DNS בהתאמה אישית). אם לא מציינים את הפרמטר, ברירת המחדל היאGoogle Cloud שרת המטא-נתונים (169.254.169.254). אם אתם משתמשים ב-Cloud DNS, ציינו כתובת IP מרשת משנה שהיא לא שכבה 2.

הגדרות לדוגמה

בכרטיסיות הבאות מוצגות הגדרות config.json לדוגמה (על סמך תבניות שזמינות בספרייה python/examples/) לגישות שונות של טירגוט מכונות ואסטרטגיות של הקצאת כתובות IP:

רשימת צמתים מפורשת

משתמשים בהגדרה הזו (python/examples/config_explicit_nodes.json) כדי לטרגט שמות ספציפיים של מכונות ESXi:

{
// Target Google Cloud project ID where bare-metal ESXi instances reside
"project": "PROJECT_ID",
// Target Google Cloud Compute Engine zone for ESXi instances
"zone": "us-east4-c",
// Explicit list of bare-metal ESXi Compute Engine instance names
"gce_nodes": [
  "vcf-mgmt-sample-node-1",
  "vcf-mgmt-sample-node-2",
  "vcf-mgmt-sample-node-3",
  "vcf-mgmt-sample-node-4"
],
// Secret Manager secret containing the ESXi root password
"esxi_root_password_secret": "esxi-root-password",
// Optional Jumpbox logging configuration (defaults to ~/logs/vcf_deployer_<timestamp>.log).
// DEBUG level is default for file logs and console level can be controlled by "log_level" (defaults to INFO).
// "log_dir": "~/logs",
// "log_file": "~/logs/vcf_deployer_custom.log",
// "log_level": "INFO",
// VCF deployment and initialization parameters
"vcf_deployment_config": {
  // Target bare-metal node hosting the initial deployment workloads
  "target_gce_node": "vcf-mgmt-sample-node-1",
  // IPv4 CIDR range for dedicated offline depot subnetwork (for example, /29). Must not overlap with or reuse any existing subnets in the VPC
  "offline_depot_subnet_cidr": "10.2.100.0/29",
  // Secret Manager secret containing the VCF appliance root password
  "vcf_appliance_root_password_secret": "vcf-root-password",
  // Secret Manager secret containing the VCF appliance local user password
  "vcf_appliance_local_user_password_secret": "vcf-localuser-password",
  // Source identifier for the VCF Installer (SDDC Manager) IP address
  "vcf_installer_ip_source": {
    "forwarding_rule": "vcf-mgmt-sddcm-fr"
  },
  // Fully qualified domain name for SDDC Manager / VCF Installer
  "vcf_installer_fqdn": "sddcm.gcve-vcf.test.gve",
  // DNS server IP. If gcp_subnet was created during Cloud DNS configuration from E2E TF, use the DNS reserved IP from that subnet. Otherwise, supply a custom DNS server IP. Defaults to Google Cloud metadata server (169.254.169.254) if omitted.
  "dns_server": "10.0.100.2"
}
}

מסנן של תחילית שם הצומת

משתמשים בהגדרה הזו (python/examples/config_prefix_filter.json) כדי לגלות באופן דינמי מכונות ESXi שתואמות לתחילית של שם, ולהשתמש בכלל העברה:

{
// Target Google Cloud project ID where bare-metal ESXi instances reside
"project": "PROJECT_ID",
// Target Google Cloud Compute Engine zone for ESXi instances
"zone": "us-east4-c",
// Discover ESXi instances matching a given instance name prefix
"gce_nodes": {
  "prefix": "vcf-mgmt-sample"
},
// Secret Manager secret containing the ESXi root password
"esxi_root_password_secret": "esxi-root-password",
// Optional Jumpbox logging configuration (defaults to ~/logs/vcf_deployer_<timestamp>.log).
// DEBUG level is default for file logs and console level can be controlled by "log_level" (defaults to INFO).
// "log_dir": "~/logs",
// "log_file": "~/logs/vcf_deployer_custom.log",
// "log_level": "INFO",
// VCF deployment and initialization parameters
"vcf_deployment_config": {
  // Target bare-metal node hosting the initial deployment workloads
  "target_gce_node": "esxi-node-0",
  // IPv4 CIDR range for dedicated offline depot subnetwork (for example, /29). Must not overlap with or reuse any existing subnets in the VPC
  "offline_depot_subnet_cidr": "10.2.100.0/29",
  // Secret Manager secret containing the VCF appliance root password
  "vcf_appliance_root_password_secret": "vcf-root-password",
  // Secret Manager secret containing the VCF appliance local user password
  "vcf_appliance_local_user_password_secret": "vcf-localuser-password",
  // Source identifier for the VCF Installer (SDDC Manager) forwarding rule
  "vcf_installer_ip_source": {
    "forwarding_rule": "vcf-mgmt-sddcm-fr"
  },
  // Fully qualified domain name for SDDC Manager / VCF Installer
  "vcf_installer_fqdn": "sddcm.gcve-vcf.test.gve",
  // DNS server IP. If gcp_subnet was created during Cloud DNS configuration from E2E TF, use the DNS reserved IP from that subnet. Otherwise, supply a custom DNS server IP. Defaults to Google Cloud metadata server (169.254.169.254) if omitted.
  "dns_server": "10.0.100.2"
}
}

מסנן גילוי של רשת משנה

משתמשים בהגדרה הזו (python/examples/config_subnet_filter.json) כדי לגלות באופן דינמי מכונות ESXi שמחוברות לרשת משנה ספציפית, ולספק URI מלא של משאב למקור ה-IP:

{
// Target Google Cloud project ID where bare-metal ESXi instances reside
"project": "PROJECT_ID",
// Target Google Cloud Compute Engine zone for ESXi instances
"zone": "us-east4-c",
// Discover ESXi instances attached to a specific primary management subnet
"gce_nodes": {
  "subnet": "vcf-mgmt-subnet"
},
// Secret Manager secret containing the ESXi root password
"esxi_root_password_secret": "esxi-root-password",
// Optional Jumpbox logging configuration (defaults to ~/logs/vcf_deployer_<timestamp>.log).
// DEBUG level is default for file logs and console level can be controlled by "log_level" (defaults to INFO).
// "log_dir": "~/logs",
// "log_file": "~/logs/vcf_deployer_custom.log",
// "log_level": "INFO",
// VCF deployment and initialization parameters
"vcf_deployment_config": {
  // Target bare-metal node hosting the initial deployment workloads
  "target_gce_node": "esxi-node-0",
  // IPv4 CIDR range for dedicated offline depot subnetwork (for example, /29). Must not overlap with or reuse any existing subnets in the VPC
  "offline_depot_subnet_cidr": "10.2.100.0/29",
  // Secret Manager secret containing the VCF appliance root password
  "vcf_appliance_root_password_secret": "vcf-root-password",
  // Secret Manager secret containing the VCF appliance local user password
  "vcf_appliance_local_user_password_secret": "vcf-localuser-password",
  // Direct resource URI for the VCF Installer (SDDC Manager) forwarding rule
  "vcf_installer_ip_source": "projects/PROJECT_ID/regions/us-east4/forwardingRules/vcf-mgmt-sddcm-fr",
  // Fully qualified domain name for SDDC Manager / VCF Installer
  "vcf_installer_fqdn": "sddcm.gcve-vcf.test.gve",
  // DNS server IP. If gcp_subnet was created during Cloud DNS configuration from E2E TF, use the DNS reserved IP from that subnet. Otherwise, supply a custom DNS server IP. Defaults to Google Cloud metadata server (169.254.169.254) if omitted.
  "dns_server": "10.0.100.2"
}
}

הכנת צומת בלבד (ללא תוכנת התקנה של VCF)

אם לא צריך לפרוס את מכשיר ההתקנה של VCF באף אחד מהצמתים שמוכנים, משמיטים את האובייקט vcf_deployment_config בקובץ config.json (לדוגמה, כשמכינים צמתים להוספת צומת ביום השני או ליצירת אשכול נתונים של עומס עבודה):

{
"project": "PROJECT_ID",
"zone": "ZONE",
"gce_nodes": {
  "subnet": "SUBNET_NAME"
},
"esxi_root_password_secret": "esxi-root-password"
}

מחליפים את הערכים הבאים בקובץ config.json (ומסירים את כל ההערות בקוד לפני שמריצים את הסקריפט של Python):

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו נמצאים המכונות של ESXi ללא מערכת הפעלה.
  • ‫ZONE: האזור ב- Google Cloud שבו נמצאים מארחי ה-ESXi הייעודיים (לדוגמה, us-east4-c).
  • ‫SUBNET_NAME: השם של רשת המשנה של ה-VPC שמחוברת למכונות ה-ESXi (לדוגמה, vcf-mgmt-subnet).

הרצת הסקריפט של ערכת הכלים

מבצעים אימות ב- Google Cloud באמצעות Application Default Credentials בטרמינל של ה-jumpbox:

gcloud auth application-default login --no-browser

כשהסביבה הווירטואלית פעילה (source venv/bin/activate) ו-config.json מוגדר, מריצים את ערכת הכלים:

python3 -m vcf_deployer.main --config config.json

תהליך עבודה של ביצוע

הסקריפט מריץ בדיקות אימות אוטומטיות ומבצע את שלבי ההגדרה הבאים:

  1. אימות לפני ההפעלה: מוודא שמכונות היעד מריצות קובצי אימג' נתמכים של ESXi, מאמת את הגישה ל-Secret Manager, מאמת את ההתאמה של כתובות ה-IP ל-CIDR ומחשב את טביעות האצבע של אישורי ה-SSL.
  2. הגדרת פרטי כניסה ואיפוס סיסמה: מתחבר לכל מארח ומאפס את הסיסמה הראשונית של ESXi root לסוד esxi-root-password שמאוחסן ב-Secret Manager.
  3. יצירת vSwitch וקבוצת יציאות: מגדירה את vSwitch0 ויוצרת קבוצות של יציאות עם תיוג VLAN‏ (vlan-VLAN_ID-RANDOM_SUFFIX).
  4. הפעלה של vSAN: המערכת מאתחלת את כונני ה-SSD המקומיים מסוג NVMe ל-vsanDatastore.
  5. פריסת מנהל ההתקנה של VCF: פריסת ה-OVA של VCF ב-target_gce_node, הזרקת הגדרות הרשת והפעלת המכשיר.

אחרי שההרצה מסתיימת, משביתים את הסביבה הווירטואלית:

deactivate

משימות לאחר הפריסה

אחרי שמריצים את ערכת הכלים ופורסים את מכשיר ההתקנה של VCF, מבצעים את ההגדרות הבאות:

השבתת תעבורת הנתונים לאינטרנט ב-jumpbox (אופציונלי)

אחרי שמתקינים את יחסי התלות של Python, אפשר להסיר את Cloud NAT כדי לאכוף אבטחה מחמירה של תעבורת נתונים יוצאת. בתחנת העבודה terraform.tfvars:

enable_internet = false

מפעילים מחדש את Terraform:

terraform apply

לפני שממשיכים, כדאי לבדוק את הבעיות הידועות

לפני שמתחילים את פריסת ה-VCF, כדאי לעיין בכל הבעיות המתועדות בדף הבעיות הידועות. אם לא תתייחסו לבעיות האלה, יכול להיות שהפריסה תיכשל.


פתרון בעיות

בקטע הזה מוסבר איך לאבחן ולפתור בעיות נפוצות שקשורות להגדרה או להפעלה של ערכת הכלים.

בדיקת יומני הביצוע של ערכת הכלים ב-jumpbox

כשמריצים את ערכת הכלים ב-jumpbox, סקריפט Python כותב יומני ביצוע מפורטים בספרייה ~/logs/ שבספריית הבית של ה-jumpbox. כל קובץ יומן נקרא vcf_deployer_TIMESTAMP.log. אם שלב הכנת הצומת או פריסת תוכנת ההתקנה של VCF נכשל, בודקים את קובץ vcf_deployer_*.log האחרון ב-~/logs/ כדי לאבחן את הכשל.

פריסת תוכנת ההתקנה של VCF נכשלה בגלל סיסמאות חלשות

  • הבעיה: הסקריפט של ערכת הכלים של Python נכשל או מתנהג באופן לא צפוי במהלך הפריסה וההפעלה של מנהל ההתקנה של VCF.
  • פתרון: אל תזינו סיסמאות חלשות למשתמשי VCF ב-Secret Manager, כי סיסמאות חלשות יכולות לגרום לכשל בסקריפט Python לפריסת תוכנת ההתקנה של VCF. חשוב לוודא שכל הסיסמאות עומדות בהנחיות של Broadcom לגבי מורכבות הסיסמאות.

ההרשאה נדחתה (roles/iam.serviceAccountTokenCreator)

  • הבעיה: שגיאות במהלך התחזות לחשבון שירות בזמן הפעלת Terraform.
  • פתרון: ודאו שהזהות שמריצה את Terraform קיבלה את ההרשאה roles/iam.serviceAccountTokenCreator בחשבון השירות של מריץ Terraform.

כשל בחיבור IAP SSH (שגיאה 403 Forbidden / זמן קצוב לתפוגה)

  • הבעיה: gcloud compute ssh לא מצליח ליצור מנהרת IAP.
  • פתרון:
    • מוודאים שה-API של Cloud Identity-Aware Proxy‏ (iap.googleapis.com) מופעל.
    • מוודאים שלזהות המשתמש יש את ההרשאות roles/iap.tunnelResourceAccessor ו-roles/compute.viewer.
    • מוודאים שכלל חומת האש allow-iap-ssh-* קיים ומאפשר תעבורת נתונים נכנסת (ingress) מ-35.235.240.0/20 ביציאה 22 ב-TCP.

אזהרה לגבי מחיקת רשת משנה בהחלה מחדש (דגל create_subnet)

  • התופעה: הפעלת terraform apply אחרי הגדרת enable_internet = false מנסה להרוס את רשת המשנה.
  • פתרון: אם Terraform יצר את רשת המשנה, צריך להשאיר את create_subnet = true. שינוי הערך של create_subnet ל-false מורה ל-Terraform להפסיק לנהל את המשאב, ומתזמן את המחיקה שלו.

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

  • אם הכנתם את הצמתים ופרסתם תוכנת התקנה של VCF לפריסת דומיין ניהול:
    1. מגדירים את החיבור למאגר האזורי אופליין במתקין ה-VCF כדי להוריד את חבילות התוכנה הנדרשות:
      • פרוטוקול: HTTPS
      • ‫FQDN (אל תשתמשו בכתובת IP): offline-depot.REGION.selfmanagedvmwareengine.goog (החליפו את REGION באזור Google Cloudשבו נמצאים הצמתים של Bare Metal)
      • יציאה: 443
      • שם משתמש: vcf-depot-user
      • סיסמה: Google1!
    2. פורסים את דומיין הניהול:
      • אם הקציתם את המשאבים של Google Cloud באמצעות המודולים של Terraform מקצה לקצה (פריסת צמתים ו-VCF באמצעות Terraform וערכת הכלים), המירו את הפלט של management_domain_deployment_input_config Terraform ל-JSON באמצעות הסקריפט המסייע (scripts/export_deployment_config.py), החליפו את כל השדות שמסומנים כ-user_should_input בערכי היעד שלכם וספקו את קובץ ה-JSON למתקין ה-VCF.
      • אם הקציתם את המשאבים של Google Cloud בלי להשתמש במודולים של Terraform מקצה לקצה, תצטרכו לספק באופן ידני את קלט ההגדרות של דומיין הניהול במתקין של VCF.
      • הוראות להשלמת תהליך העבודה של מנהל ההתקנה של VCF מפורטות במאמר פריסת צי חדש של VCF או מכונה חדשה של VCF במסמכי התיעוד של Broadcom.
  • אם הכנתם את הצמתים להוספה לאשכול קיים: הוסיפו את הצמתים שהכנתם לאשכול VMware VCF 9.x באמצעות ממשק המשתמש או ממשקי ה-API של VMware.
  • במאמרים ניהול קיבולת הצמתים וניהול קיבולת הצמתים באמצעות Terraform מוסבר איך מוסיפים ומסירים צמתים.