יצירת נפח Hyperdisk חדש

כדי להשתמש בנפח אחסון מסוג Hyperdisk Balanced,‏ Hyperdisk Extreme או Hyperdisk Throughput עם מכונה ב-Compute Engine, צריך לבצע את המשימות הבאות:

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

בנפחי אחסון מסוג Hyperdisk Balanced, אפשר גם ליצור דיסקים לאתחול וגם דיסקים של נתונים.

כדי להוסיף דיסק חדש מסוג Hyperdisk Balanced High Availability למופע, משתמשים בהליכים הבאים:

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

מידע כללי על Hyperdisk זמין במאמר מידע על Hyperdisk.

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

תפקידים והרשאות נדרשים

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

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

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

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

כדי להוסיף נפח Hyperdisk למופע, נדרשות ההרשאות הבאות:

  • כדי ליצור ולצרף נפח Hyperdisk:
    • compute.disks.create בפרויקט
    • compute.instances.attachDisk במופע
    • compute.disks.use בנפח האחסון שרוצים לצרף למכונה
  • כדי לפרמט את אמצעי האחסון המצורף ולהעלות אותו: compute.instances.setMetadata במופע
  • כדי ליצור את אמצעי האחסון מתמונת מצב מיידית של דיסק האתחול של מכונה שמצורף אליה חשבון שירות: iam.serviceAccounts.actAs בחשבון השירות של המכונה

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

ערכים נתמכים לנפחי Hyperdisk

מגבלות גודל ושמות הפניות ל-Hyperdisk

כדי ליצור נפח Hyperdisk באמצעות Google Cloud CLI,‏ REST או ספריות הלקוח ב-Cloud ל-Compute Engine, צריך לציין את סוג ה-Hyperdisk שרוצים ליצור על ידי הזנת הערך בעמודה Reference name בטבלה הבאה.

הגודל שאתם מציינים לנפח Hyperdisk צריך להיות בטווחים שמפורטים בטבלה הבאה.

סוג הדיסק שם לצורך סימוכין גודל מינימלי גודל מקסימלי ברירת מחדל של גודל
Hyperdisk Balanced hyperdisk-balanced ‫4 GiB ‫64 TiB1 ‫100 GiB
Hyperdisk Balanced High Availability hyperdisk-balanced-high-availability ‫4 GiB ‫64 TiB ‫100 GiB
Hyperdisk Extreme hyperdisk-extreme ‫64 GiB ‫64 TiB ‫1 TiB
Hyperdisk Throughput hyperdisk-throughput ‫2 TiB ‫32 TiB ‫2 TiB
Hyperdisk ML hyperdisk-ml ‫4 GiB ‫64 TiB ‫100 GiB
‫1 תצוגה מקדימה: ב-C4 יש תמיכה בגודל דיסק מקסימלי של 128 TiB. כדי לקבל גישה לתכונה הזו, אפשר לפנות אל hyperdisk-questions@google.com.

עם זאת, הגודל הכולל של כל נפחי ה-Hyperdisk שמצורפים למופע לא יכול לחרוג מ מגבלות הגודל והצירוף של ה-Hyperdisk של המופע.

מגבלות על הביצועים

בטבלה הבאה מפורטות מגבלות הביצועים שאפשר לציין לכל סוג של Hyperdisk. עם זאת, רמות ה-IOPS והתפוקה שאפשר לציין תלויות גם בגודל הנפח. סיכום מפורט של כל מגבלה זמין בקטע מגבלות גודל וביצועים עבור Hyperdisk Balanced,‏ Hyperdisk Balanced High Availability,‏ Hyperdisk Extreme,‏ Hyperdisk ML ו-Hyperdisk Throughput.

סוג Hyperdisk מגבלת IOPS מגבלת התפוקה (MiB/s)
Hyperdisk Balanced 160,000 2,400
Hyperdisk Balanced High Availability 100,000 2,400
Hyperdisk Extreme 350,000 אי אפשר להקצות רמת תפוקה לנפחי אחסון של Hyperdisk Extreme. כל אמצעי אחסון מקבל קצב העברת נתונים של ‎250 MiB/s עם כל 1,000 פעולות קלט/פלט בשנייה (IOPS), עד ‎5,000 MiB/s.
Hyperdisk ML אי אפשר להקצות רמת IOPS, אבל כל MiB/s של תפוקת נתונים שהוקצתה מגיע עם 16 IOPS, עד 33,554,432 IOPS. 2,097,152
Hyperdisk Throughput אי אפשר להקצות רמת IOPS, אבל כל MiB/s של תפוקה שהוקצתה מגיע עם 4 IOPS, עד 9,600 IOPS. 2,400

הוספת נפח Hyperdisk למופע

אפשר ליצור ולצרף נפח Hyperdisk באמצעות כל אחת מהשיטות שמפורטות בקטע הזה.

הגודל, קצב העברת הנתונים (throughput) ופעולות הקלט/פלט בשנייה (IOPS) שאתם מציינים כשאתם יוצרים נפח Hyperdisk צריכים להיות בטווח הערכים הנתמכים.

כשיוצרים נפח Hyperdisk Balanced, אפשר לאפשר לכמה מכונות לגשת לדיסק בו-זמנית על ידי יצירת הדיסק במצב multi-writer.

המסוף

  1. נכנסים לדף VM instances.

    כניסה לדף VM instances

  2. לוחצים על שם המכונה שרוצים להוסיף לה דיסק.

  3. בדף פרטי מופע ה-VM, לוחצים על עריכה.

  4. בקטע אחסון, מתחת לדיסקים נוספים, לוחצים על הוספת דיסק חדש.

  5. מציינים שם לדיסק, ואפשר גם להוסיף תיאור.

  6. בקטע Disk source type (סוג מקור הדיסק), בוחרים את מקור הנתונים של הדיסק:

    • כדי ליצור דיסק ריק, בוחרים באפשרות דיסק ריק.
    • כדי ליצור את הדיסק מתמונה:
      1. בוחרים באפשרות תמונה.
      2. בקטע תמונת המקור, בוחרים את תמונת המקור של הדיסק.
    • כדי ליצור את הדיסק מקובץ snapshot קיים:
      1. בוחרים באפשרות Snapshot (קובץ snapshot),‏ Instant snapshot (קובץ snapshot מואץ) או Archive snapshot (קובץ snapshot של ארכיון), בהתאם לסוג קובץ ה-snapshot של המקור: קובץ snapshot רגיל, קובץ snapshot מואץ או קובץ snapshot של ארכיון.
      2. בקטע Source snapshot (קובץ ה-snapshot של המקור), בוחרים את קובץ ה-snapshot של המקור או את קובץ ה-snapshot המואץ מהרשימה. מוצגות רק תמונות מצב שנמצאות במיקום שבחרתם.
  7. בקטע Disk settings (הגדרות הדיסק), בוחרים סוג דיסק מהרשימה הבאה. הערכים שאתם מציינים צריכים להיות בטווח של הערכים הנתמכים.

    1. Hyperdisk Balanced. אפשר גם לשנות את הגדרות ברירת המחדל של גודל הדיסק, IOPS שהוקצו והתפוקה שהוקצתה.
    2. Hyperdisk Extreme. אפשר גם לשנות את הגדרות ברירת המחדל של הגודל ושל ה-IOPS שהוקצו של הדיסק.
    3. Hyperdisk ML. אפשר גם לשנות את הגדרות ברירת המחדל של הגודל והתפוקה שהוקצתה של הדיסק.
    4. Hyperdisk Throughput. אפשר גם לשנות את הגדרות ברירת המחדל של הגודל והתפוקה שהוקצתה של הדיסק.
  8. אופציונלי: כדי לראות אפשרויות הגדרה מתקדמות, מרחיבים את הקטע הצגת הגדרות מתקדמות.

    • בוחרים את מצב צירוף הדיסק בשדה Mode.
    • כדי לבחור אם לשמור או למחוק את הדיסק כשמוחקים את המכונה, בוחרים את האפשרות בשדה Deletion rule (כלל מחיקה).
    • כדי שיהיה קל יותר לזהות את הדיסק מתוך מערכת ההפעלה של האורח, מציינים שם מכשיר בהתאמה אישית. בקטע שם המכשיר, בוחרים באפשרות שימוש בשם מכשיר מותאם אישית. בשדה Device name (שם המכשיר), מזינים מחרוזת שתשמש כקישור סמלי לדיסק.

  9. לוחצים על סיום.

  10. כדי להחיל את השינויים על המופע, לוחצים על שמירה.

gcloud

  1. משתמשים בפקודה gcloud compute disks create כדי ליצור את אמצעי האחסון Hyperdisk.

    gcloud compute disks create DISK_NAME \
        --zone=ZONE \
        --size=DISK_SIZE \
        --type=DISK_TYPE \
        --provisioned-iops=IOPS_LIMIT \
        --provisioned-throughput=THROUGHPUT_LIMIT \
        --access-mode=DISK_ACCESS_MODE
    

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

    • DISK_NAME: השם של הדיסק החדש.
    • ZONE: השם של האזור שבו נוצר הדיסק החדש.
    • DISK_SIZE (לא חובה): גודל הדיסק החדש. הערך חייב להיות מספר שלם שאחריו יחידת גודל של GB לגיביבייט או TB לטביבייט. אם לא מציינים יחידת גודל, ערך ברירת המחדל הוא 100 GB. הערכים הקבילים לגודל הדיסק הם:
      • ‫Hyperdisk Balanced: מ-4 GiB עד 64 TiB, כולל, במרווחים של 1 GiB.
      • ‫Hyperdisk Extreme: מ-64 GiB עד 64 TiB, כולל, במרווחים של 1 GiB.
      • ‫Hyperdisk ML: מ-4 GiB עד 64 TiB, כולל, במרווחים של 1 GiB.
      • Hyperdisk Throughput: מ-2 TiB עד 32 TiB, כולל, במרווחים של 1 GiB.
    • DISK_TYPE: סוג הדיסק. משתמשים באחד מהערכים הבאים: hyperdisk-balanced,‏ hyperdisk-extreme,‏ hyperdisk-ml או hyperdisk-throughput
    • IOPS_LIMIT: אופציונלי: בדיסקים מסוג Hyperdisk Balanced או Hyperdisk Extreme, זהו מספר פעולות הקלט/פלט לשנייה (IOPS) שהדיסק יכול לבצע.
    • THROUGHPUT_LIMIT: אופציונלי: עבור נפחי אחסון מסוג Hyperdisk Balanced,‏ Hyperdisk ML או Hyperdisk Throughput, זהו מספר שלם שמייצג את קצב העברת הנתונים המקסימלי, שנמדד ב-MiB לשנייה, שהדיסק יכול לספק.
    • DISK_ACCESS_MODE: אופציונלי: איך מופעים של מחשוב יכולים לגשת לנתונים בדיסק. הערכים הנתמכים הם:

      • READ_WRITE_SINGLE, לגישת קריאה וכתיבה ממופע אחד. (זוהי ברירת המחדל)
      • READ_WRITE_MANY, (Hyperdisk Balanced ו-Hyperdisk Balanced High Availability בלבד) לגישה בו-זמנית לקריאה ולכתיבה מכמה מופעים.
      • READ_ONLY_MANY, (Hyperdisk ML בלבד) לגישה בו-זמנית לקריאה בלבד ממספר מכונות וירטואליות.

      במאמר יצירת דיסק אזורי מוסבר איך מגדירים את מצב הגישה לדיסקים מסוג Hyperdisk Balanced High Availability.

  2. אופציונלי: משתמשים בפקודה gcloud compute disks describe DISK_NAME כדי לראות תיאור של הדיסק.

  3. אחרי שיוצרים את הדיסק, אפשר לצרף אותו למכונה.

REST

  1. יוצרים בקשת POST ליצירת Hyperdisk אזורי באמצעות ה-method‏ disks.insert. צריך לכלול את המאפיינים name,‏ sizeGb,‏ type,‏ provisionedIops ו-provisionedThroughput. כדי ליצור את הדיסק הזה כדיסק ריק ולא מעוצב שאינו דיסק אתחול, אל תציינו תמונת מקור או קובץ snapshot של מקור.

    POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    {
       "name": "DISK_NAME",
       "sizeGb": "DISK_SIZE",
       "type": "https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
       "provisionedIops": "IOPS_LIMIT",
       "provisionedThroughput": "THROUGHPUT_LIMIT",
       "accessMode": "DISK_ACCESS_MODE"
    }
    

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

    • PROJECT_ID: מזהה הפרויקט
    • ZONE: האזור שבו נמצאים המכונה והדיסק החדש
    • DISK_NAME: השם של הדיסק החדש
    • DISK_SIZE (לא חובה): גודל הדיסק החדש. הערך חייב להיות מספר שלם שאחריו יחידת גודל של GB (גיגה-בייט) או TB (טרה-בייט).
    • DISK_TYPE: סוג הדיסק. כדי ליצור נפח אחסון מסוג Hyperdisk, משתמשים באחד מהערכים הבאים: hyperdisk-balanced,‏ hyperdisk-extreme,‏ hyperdisk-ml או hyperdisk-throughput.
    • IOPS_LIMIT: אופציונלי: עבור Hyperdisk Balanced ו-Hyperdisk Extreme, זהו מספר פעולות הקלט/פלט בשנייה שהדיסק יכול לטפל בהן.
    • THROUGHPUT_LIMIT: אופציונלי: עבור נפחי אחסון מסוג Hyperdisk Balanced,‏ Hyperdisk ML או Hyperdisk Throughput, זהו מספר שלם שמייצג את התפוקה המקסימלית, שנמדדת ב-MiB לשנייה, שהדיסק יכול לספק.
    • DISK_ACCESS_MODE: אופציונלי: איך מופעים של מחשוב יכולים לגשת לנתונים בדיסק. הערכים הנתמכים הם:

      • READ_WRITE_SINGLE, לגישת קריאה וכתיבה ממופע אחד. (זוהי ברירת המחדל)
      • READ_WRITE_MANY, (Hyperdisk Balanced ו-Hyperdisk Balanced High Availability בלבד) לגישה בו-זמנית לקריאה ולכתיבה מכמה מופעים.
      • READ_ONLY_MANY, (Hyperdisk ML בלבד) לגישה בו-זמנית לקריאה בלבד ממספר אינסטנסים.

      במאמר יצירת דיסק אזורי מוסבר איך מגדירים את מצב הגישה לדיסקים מסוג Hyperdisk Balanced High Availability.

  2. אופציונלי: משתמשים ב-‎compute.disks.get method כדי לראות תיאור של הדיסק.

  3. אחרי שיוצרים את הדיסק, אפשר לצרף את הדיסק לכל מופע שפועל או שהופסק.

המשך

// createHyperdisk creates a new Hyperdisk in the specified project and zone.
func createHyperdisk(w io.Writer, projectId, zone, diskName string) error {
	//   projectID := "your_project_id"
	//   zone := "europe-central2-b"
	//   diskName := "your_disk_name"

	ctx := context.Background()
	client, err := compute.NewDisksRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewDisksRESTClient: %v", err)
	}
	defer client.Close()

	// use format "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-throughput)".
	diskType := fmt.Sprintf("zones/%s/diskTypes/hyperdisk-balanced", zone)

	// Create the disk
	disk := &computepb.Disk{
		Name:   proto.String(diskName),
		Type:   proto.String(diskType),
		SizeGb: proto.Int64(10),
		Zone:   proto.String(zone),
	}

	req := &computepb.InsertDiskRequest{
		Project:      projectId,
		Zone:         zone,
		DiskResource: disk,
	}

	op, err := client.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("Insert disk request failed: %v", err)
	}

	// Wait for the insert disk operation to complete
	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Hyperdisk created: %v\n", diskName)
	return nil
}

Java


import com.google.cloud.compute.v1.Disk;
import com.google.cloud.compute.v1.DisksClient;
import com.google.cloud.compute.v1.InsertDiskRequest;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateHyperdisk {
  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to use.
    String projectId = "YOUR_PROJECT_ID";
    // Name of the zone in which you want to create the disk.
    String zone = "europe-central2-b";
    // Name of the disk you want to create.
    String diskName = "YOUR_DISK_NAME";
    // The type of disk you want to create. This value uses the following format:
    // "zones/{zone}/diskTypes/{disktype}".
    // disktype is one of hyperdisk-balanced, hyperdisk-extreme, hyperdisk-throughput
    // hyperdisk-ml, hyperdisk-balanced-high-availability
    // For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
    String diskType = String.format("zones/%s/diskTypes/hyperdisk-balanced", zone);
    // Size of the new disk in gigabytes.
    long diskSizeGb = 10;
    // Optional: For Hyperdisk Balanced or Hyperdisk Extreme disks,
    // this is the number of I/O operations per second (IOPS) that the disk can handle
    long provisionedIops = 3000;
    // Optional: For Hyperdisk Balanced or Hyperdisk Throughput volumes,
    // this is an integer that represents the throughput,
    // measured in MiB per second, that the disk can handle.
    long provisionedThroughput = 140;

    createHyperdisk(projectId, zone, diskName, diskType, diskSizeGb,
            provisionedIops, provisionedThroughput);
  }

  // Creates a hyperdisk in a project
  public static Disk createHyperdisk(String projectId, String zone, String diskName,
                                     String diskType, long diskSizeGb, long provisionedIops,
                                     long provisionedThroughput)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (DisksClient client = DisksClient.create()) {
      // Create a disk.
      Disk disk = Disk.newBuilder()
              .setZone(zone)
              .setName(diskName)
              .setType(diskType)
              .setSizeGb(diskSizeGb)
              .setProvisionedIops(provisionedIops)
              .setProvisionedThroughput(provisionedThroughput)
              .build();

      InsertDiskRequest request = InsertDiskRequest.newBuilder()
              .setProject(projectId)
              .setZone(zone)
              .setDiskResource(disk)
              .build();

      // Wait for the insert disk operation to complete.
      Operation operation = client.insertAsync(request).get(1, TimeUnit.MINUTES);

      if (operation.hasError()) {
        System.out.println("Disk creation failed!");
        throw new Error(operation.getError().toString());
      }

      // Wait for server update
      TimeUnit.SECONDS.sleep(10);

      Disk hyperdisk = client.get(projectId, zone, diskName);

      System.out.printf("Hyperdisk '%s' has been created successfully", hyperdisk.getName());

      return hyperdisk;
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

// Instantiate a diskClient
const disksClient = new computeLib.DisksClient();
// Instantiate a zoneOperationsClient
const zoneOperationsClient = new computeLib.ZoneOperationsClient();

/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// Project ID or project number of the Google Cloud project you want to use.
const projectId = await disksClient.getProjectId();

// The zone where your VM and new disk are located.
// zone = 'europe-central2-b';

// The name of the new disk
// diskName = 'disk-name';

// The type of disk. This value uses the following format:
// "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-ml|hyperdisk-throughput)".
// For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
const diskType = `zones/${zone}/diskTypes/hyperdisk-balanced`;
// Size of the new disk in gigabytes.
const diskSizeGb = 10;
// Optional: For Hyperdisk Balanced or Hyperdisk Extreme disks,
// this is the number of I/O operations per second (IOPS) that the disk can handle.
const provisionedIops = 3000;
// Optional: For Hyperdisk Balanced or Hyperdisk Throughput volumes,
// this is an integer that represents the throughput,
// measured in MiB per second, that the disk can handle.
const provisionedThroughput = 140;

async function callCreateComputeHyperdisk() {
  // Create a disk
  const disk = new compute.Disk({
    sizeGb: diskSizeGb,
    name: diskName,
    zone,
    type: diskType,
    provisionedIops,
    provisionedThroughput,
  });

  const [response] = await disksClient.insert({
    project: projectId,
    zone,
    diskResource: disk,
  });

  let operation = response.latestResponse;

  // Wait for the create disk operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await zoneOperationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log(`Disk: ${diskName} created.`);
}

await callCreateComputeHyperdisk();

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

פירמוט הכונן והתקנתו

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

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