ניהול הקיבולת של הצמתים באמצעות Terraform

בדף הזה מוסבר איך להרחיב או לצמצם את קיבולת האשכול ב-VMware Solution ב- Google Cloud , על ידי הוספה או מחיקה של צומתי ESXi ללא מערכת הפעלה (bare-metal) באשכול קיים, באמצעות מודולים של Terraform לאוטומציה מקצה לקצה (E2E).

הרחבת הקיבולת של האשכול

כדי להרחיב אשכול קיים מ-X צמתים ל-X + N צמתים, צריך להשתמש באותו סביבת עבודה וקובץ תמונת מצב (terraform.tfstate) של Terraform שבהם השתמשתם במהלך הפריסה הראשונית של האשכול.

בשלבים הבאים מוסבר איך להוסיף צומת חמישי (vcf-mgmt-sample-node-5) לאשכול ניהול עם ארבעה צמתים (על סמך הגדרת הדוגמה בקובץ e2e-terraform/sample_management_cluster.tfvars):

  1. עדכון קובץ הגדרות המשתנים (management_cluster.tfvars): מעדכנים את משתני ההגדרות בקובץ management_cluster.tfvars באופן הבא:

    • מגדירים את המשתנה deployment_mode לערך "node_addition".
    • מעדכנים את המשתנה number_of_nodes מ-4 ל-5.
    • מוסיפים את "vcf-mgmt-sample-node-5" לרשימה node_names אם ציינתם במפורש את node_names במהלך יצירת האשכול. אם לא ציינתם את הרשימה node_names בהתחלה, השאירו אותה ריקה.
    • אם ציינתם במפורש את המשתנים mgmt_nic_ip_values,‏ vsan_ip_values,‏ vmotion_ip_values,‏ nsx_tep_ip_values ו-additional_dynamic_nics כשאתם יוצרים את האשכול, אתם צריכים להוסיף את כתובות ה-IPv4 החדשות לרשימות האלה. אם השארתם את הרשימות האלה ריקות לצורך הקצאה אוטומטית, אל תעדכנו אותן.
    • אם ציינתם את המשתנה הזה באופן מפורש במהלך יצירת האשכול, עדכנו את הרשימה availability_domains (לדוגמה, [1, 2, 3, 4, 5]). אם השארתם אותו ריק, אל תעדכנו אותו.
    deployment_mode = "node_addition"
    number_of_nodes = 5
    
    node_names = [
      "vcf-mgmt-sample-node-1",
      "vcf-mgmt-sample-node-2",
      "vcf-mgmt-sample-node-3",
      "vcf-mgmt-sample-node-4",
      "vcf-mgmt-sample-node-5" # New node
    ]
    
    mgmt_nic_ip_values = ["10.200.0.3", "10.200.0.4", "10.200.0.5", "10.200.0.6", "10.200.0.7"]
    vsan_ip_values     = ["10.200.1.3", "10.200.1.4", "10.200.1.5", "10.200.1.6", "10.200.1.7"]
    vmotion_ip_values  = ["10.200.2.3", "10.200.2.4", "10.200.2.5", "10.200.2.6", "10.200.2.7"]
    nsx_tep_ip_values  = ["10.200.3.3", "10.200.3.4", "10.200.3.5", "10.200.3.6", "10.200.3.7"]
    
    additional_dynamic_nics = [
      {
        name            = "additional-nic-1"
        subnet_name     = "vcf-mgmt-sample-additional-subnet-1"
        vlan_id         = 210
        ip_address_type = "reserved_custom"
        ip_values       = ["10.200.4.3", "10.200.4.4", "10.200.4.5", "10.200.4.6", "10.200.4.7"]
      }
    ]
    
    availability_domains = [1, 2, 3, 4, 5]
    
  2. יוצרים ומחילים את תוכנית הביצוע של Terraform:

    terraform plan -var-file='management_cluster.tfvars' -out=tfplan
    terraform apply tfplan
    
  3. צירוף הצמתים החדשים לקבוצות של נקודות קצה ברשת (NEG): מאחזרים ומריצים את פקודות ה-gcloud compute network-endpoint-groups update שנוצרו מהפלט של neg_attachment_commands Terraform כדי לצרף את המכונות החדשות ל-NEG של הניהול ושל NSX:

    # View attachment commands from Terraform outputs
    terraform output neg_attachment_commands
    # Run the generated commands to attach the new instance to the Management and NSX NEGs
    gcloud compute network-endpoint-groups update vcf-mgmt-sample-neg \
       --zone='ZONE' \
       --project='PROJECT_ID' \
       --add-endpoint='instance=vcf-mgmt-sample-node-5'
    gcloud compute network-endpoint-groups update vcf-mgmt-sample-nsx-neg \
       --zone='ZONE' \
       --project='PROJECT_ID' \
       --add-endpoint='instance=vcf-mgmt-sample-node-5'
    

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

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

ההתנהגות הצפויה

כשמחילים את ההגדרות של node_addition, ‏Terraform מבצעת את הפעולות הבאות בלי להפריע:

  • מקצה רק את המכונה החדשה של ESXi ללא מערכת הפעלה (vcf-mgmt-sample-node-5) ושומרת את כתובות ה-IPv4 הפנימיות שמשויכות אליה.
  • יוצר את הפלט של neg_attachment_commands כדי שתוכלו לצרף את המכונות החדשות לניהול הקיים ולקבוצות NEG אזוריות של NSX.
  • רושם רשומות Cloud DNS להעברה (A) ורשומות Cloud DNS הפוכות (PTR) לצומת החדש.
  • כל הצמתים הפועלים, מאזני העומסים והגדרות הרשת הקיימים לא יושפעו.

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

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

  1. מריצים את הסקריפט של ערכת הכלים (python3 -m vcf_deployer.main --config config.json) כמו שמתואר במאמר הכנת צמתים ופריסת VCF באמצעות ערכת הכלים כדי לאפס את הסיסמה הראשונית של ESXi root בכל מארח חדש, ולהפעיל את צומתי ESXi החדשים להוספת אשכול. משמיטים את האובייקט vcf_deployment_config בקובץ config.json.
  2. מפעילים ומוסיפים את הצומת המוכן לאשכול VMware Cloud Foundation (VCF) 9.x באמצעות ממשק המשתמש או ממשקי ה-API של VMware.

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

כדי להקטין אשכול קיים מ-X צמתים ל-X - N צמתים, צריך להשתמש באותה סביבת עבודה ובאותו קובץ תמונת מצב (terraform.tfstate) של Terraform שבהם השתמשתם במהלך הפריסה הראשונית של האשכול.

בשלבים הבאים מוסבר איך למחוק את הצומת השלישי (vcf-mgmt-sample-node-3) מאשכול הניהול עם חמשת הצמתים שמתואר במאמר הרחבת הקיבולת של האשכול:

  1. הסרת הצומת מאשכול ה-VCF: מסירים את מארח ה-ESXi המטורגט מאשכול ה-VCF 9.x ומוציאים אותו משימוש באמצעות VMware SDDC Manager. מידע נוסף זמין במאמר הוצאה משימוש של מארחים במסמכי התיעוד של VMware Cloud Foundation.

  2. אם רלוונטי, משביתים את ההגנה מפני מחיקה בצומת: Terraform לא יכול למחוק מכונה שההגנה מפני מחיקה מופעלת בה. אם ההגנה מפני מחיקה לא מופעלת בצמתים שרוצים למחוק, אפשר לדלג על השלב הזה. אחרת, משביתים את ההגנה מפני מחיקה בכל צומת שרוצים למחוק:

    gcloud compute instances update vcf-mgmt-sample-node-3 \
       --zone='ZONE' \
       --project='PROJECT_ID' \
       --no-deletion-protection
    

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

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

    כדי להשבית את ההגנה מפני מחיקה באמצעות מסוף Google Cloud , קראו את המאמר הוצאה משימוש ומחיקה של צמתים.

  3. עדכון קובץ הגדרות המשתנים (management_cluster.tfvars): מעדכנים את משתני ההגדרות בקובץ management_cluster.tfvars באופן הבא:

    • מגדירים את המשתנה deployment_mode לערך "node_deletion".
    • מעדכנים את המשתנה number_of_nodes מ-5 ל-4.
    • מציינים את הרשימה node_names עם השמות של הצמתים שנותרו, ומסירים את "vcf-mgmt-sample-node-3" מהרשימה.
    • מסירים את כתובות ה-IPv4 של הצומת שנמחק מהרשימות mgmt_nic_ip_values,‏ vsan_ip_values,‏ vmotion_ip_values,‏ nsx_tep_ip_values ו-additional_dynamic_nics, אם ציינתם את המשתנים האלה באופן מפורש במהלך יצירת האשכול.
    • מציינים את הרשימה availability_domains עם דומיין הזמינות של כל צומת שנותר (לדוגמה, [1, 2, 4, 5]).

    במצב node_deletion, תמיד צריך לציין במפורש את הרשימות node_names ו-availability_domains, גם אם לא ציינתם אותן במהלך יצירת האשכול או כל פעולת Terraform קודמת באשכול (לדוגמה, אם שמות הצמתים נוצרו באופן אוטומטי). הגדרת הרשימות האלה מבטיחה ש-Terraform ימחק רק את הצומת הרצוי. חשוב לוודא שכל רשומה תואמת לשם ולדומיין הזמינות של הצומת התואם שנותר.

    deployment_mode = "node_deletion"
    number_of_nodes = 4
    
    # Always required in node_deletion mode
    node_names = [
      "vcf-mgmt-sample-node-1",
      "vcf-mgmt-sample-node-2",
      # "vcf-mgmt-sample-node-3" removed
      "vcf-mgmt-sample-node-4",
      "vcf-mgmt-sample-node-5"
    ]
    
    mgmt_nic_ip_values = ["10.200.0.3", "10.200.0.4", "10.200.0.6", "10.200.0.7"]
    vsan_ip_values     = ["10.200.1.3", "10.200.1.4", "10.200.1.6", "10.200.1.7"]
    vmotion_ip_values  = ["10.200.2.3", "10.200.2.4", "10.200.2.6", "10.200.2.7"]
    nsx_tep_ip_values  = ["10.200.3.3", "10.200.3.4", "10.200.3.6", "10.200.3.7"]
    
    additional_dynamic_nics = [
      {
        name            = "additional-nic-1"
        subnet_name     = "vcf-mgmt-sample-additional-subnet-1"
        vlan_id         = 210
        ip_address_type = "reserved_custom"
        ip_values       = ["10.200.4.3", "10.200.4.4", "10.200.4.6", "10.200.4.7"]
      }
    ]
    
    # Always required in node_deletion mode
    availability_domains = [1, 2, 4, 5]
    
  4. יוצרים ומחילים את תוכנית הביצוע של Terraform: בודקים את הפלט של התוכנית כדי לוודא ש-Terraform מסירה רק את המשאבים של הצומת שרוצים למחוק, ואז מחילים את התוכנית:

    terraform plan -var-file='management_cluster.tfvars' -out=tfplan
    terraform apply tfplan
    

ההתנהגות הצפויה

כשמחילים את ההגדרות של node_deletion, ‏Terraform מבצעת את הפעולות הבאות:

  • מוחקת רק את המכונה המטורגטת של ESXi ללא מערכת הפעלה (vcf-mgmt-sample-node-3) ואת דיסק האתחול שלה.
  • הסרת המכונה שנמחקה מהניהול ומקבוצות ה-NEG האזוריות של NSX.
  • משחרר את כתובות ה-IPv4 הפנימיות השמורות של הצומת שנמחק.
  • מחיקת רשומות ה-DNS להעברה (A) וההפוכות (PTR) של הצומת שנמחק.
  • כל שאר הצמתים, מאזני העומסים והגדרות הרשת נשארים ללא שינוי.