arrow_back

ניקוי דיסקים שלא משויכים לאף מכונה וירטואלית או שלא נמצאים בשימוש

Join Sign in
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

ניקוי דיסקים שלא משויכים לאף מכונה וירטואלית או שלא נמצאים בשימוש

Lab 1 hour universal_currency_alt 5 Credits show_chart Intermediate
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP648

Google Cloud מעבדות ללימוד עצמי של

סקירה כללית

בשיעור Lab זה תשתמשו ב-Cloud Functions וב-Cloud Scheduler כדי לזהות ולנקות את משאבי הענן שלא נוצלו. הפעם תגדירו פונקציה ב-Cloud Functions לזיהוי ולניקוי של דיסקים שלא משויכים לאף מכונה וירטואלית ושאינם מצורפים.

הפעולות שתבצעו:

  • יצירת שני דיסקים לאחסון מתמיד (persistent disk).
  • יצירת מכונה וירטואלית (VM) שמשתמשת באחד מהדיסקים לאחסון.
  • ניתוק הדיסק מה-VM.
  • בדיקת קוד הפונקציה ב-Cloud Functions.
  • פריסת הפונקציה ב-Cloud Functions.
  • בדיקת הפונקציה ב-Cloud Functions על ידי שימוש במשימות של Cloud Scheduler.

ארכיטקטורה

בתרשים הבא מפורטת הארכיטקטורה שבה תשתמשו בחלק הראשון של שיעור ה-Lab, כשתגדירו פונקציה ב-Cloud Functions כדי לזהות ולנקות דיסק אחסון מתמיד (persistent disk) שלא משויך לאף מכונה וירטואלית או שאינו בשימוש.

UnusedDisks

הגדרה ודרישות

בסעיף הזה תגדירו את התשתית ואת הזהויות הנדרשות להשלמת שיעור ה-Lab.

לפני שלוחצים על הלחצן Start Lab (התחלת המעבדה)

עליכם לקרוא את ההוראות האלו. המעבדות מוגבלות בזמן ואי אפשר להשהות אותן. הטיימר מתחיל כשלוחצים על Start Lab ומראה את משך הזמן שבו תוכלו להשתמש במשאבים ב-Google Cloud.

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

מה צריך?

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

  • גישה לדפדפן אינטרנט סטנדרטי (מומלץ להשתמש בדפדפן Chrome).
  • זמן להשלמת המעבדה.

הערה: אם כבר יש לכם פרויקט או חשבון Google Cloud אישי משלכם, אין להשתמש בו במעבדה הזו.

הערה: אם משתמשים במכשיר עם Chrome OS, צריך לפתוח חלון אנונימי כדי להריץ את המעבדה הזו.

איך מתחילים שיעור מעשי ונכנסים אל Google Cloud Console

  1. לוחצים על הלחצן Start Lab (התחלת השיעור המעשי). אם זה שיעור בתשלום, יקפוץ חלון שבו בוחרים אמצעי תשלום. מימין יש חלונית עם פרטי כניסה זמניים שמולאו מראש. צריך להשתמש בפרטים האלו בשיעור המעשי הזה.

    פתיחת Google Console

  2. מעתיקים את שם המשתמש ואז לוחצים על Open Google Console (פתיחת Google Console). יופעלו משאבים במעבדה, ואז ייפתח הדף Sign in (כניסה) בכרטיסייה נפרדת.

    כניסה

    טיפ: כדאי לפתוח את הכרטיסיות בחלונות נפרדים, אחד לצד השני.

  3. בדף Sign in (כניסה), מדביקים את שם המשתמש שהעתקתם מהחלונית Connection Details (פרטי התחברות). אחר כך מעתיקים ומדביקים את הסיסמה.

    חשוב: צריך להשתמש בפרטי הכניסה מהחלונית Connection Details. אין להשתמש בפרטי הכניסה של Qwiklabs. אם יש לכם חשבון Google Cloud משלכם, אל תשתמשו בו בשיעור המעשי הזה (כך תימנעו מחיוב בתשלום).

  4. לוחצים כדי לעבור את הדפים הבאים:

    • הסכמה לתנאים ולהגבלות.
    • אין להוסיף אפשרויות שחזור או אימות דו-שלבי (כי החשבון הזה זמני).
    • אין להירשם לתקופות ניסיון בחינם.

לאחר כמה דקות, Cloud Console ייפתח בכרטיסייה הזו.

הפעלת Cloud Shell

סביבת Cloud Shell היא מכונה וירטואלית שמותקנים בה כלים למפתחים. יש בה ספריית בית בנפח עקבי של 5GB והיא פועלת ב-Google Cloud. ב-Cloud Shell יש גישה לשורת הפקודה למשאבים שלכם ב-Google Cloud.

ב-Cloud Console, בסרגל הכלים שבפינה הימנית העליונה, לוחצים על הלחצן Activate Cloud Shell (הפעלת Cloud Shell).

הסמל של Cloud Shell

לוחצים על Continue (המשך).

cloudshell_continue.png

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

טרמינל Cloud Shell

gcloud הוא כלי שורת הפקודה של Google Cloud. הוא מותקן מראש ב-Cloud Shell ותומך בהשלמת פקודות.

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

gcloud auth list

(פלט)

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)

(פלט לדוגמה)

Credentialed accounts:
 - google1623327_student@qwiklabs.net

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

gcloud config list project

(פלט)

[core]
project = <project_ID>

(פלט לדוגמה)

[core]
project = qwiklabs-gcp-44776a13dea667a6

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

  1. ב-Cloud Shell, מפעילים את Cloud Scheduler API:

    gcloud services enable cloudscheduler.googleapis.com
    
  2. משכפלים את המאגר:

    git clone https://github.com/GoogleCloudPlatform/gcf-automated-resource-cleanup.git && cd gcf-automated-resource-cleanup/
    
  3. מגדירים משתני סביבה והופכים את תיקיית המאגר ל-$WORKDIR, שם תריצו את כל הפקודות הקשורות לשיעור ה-Lab הזה:

    export PROJECT_ID=$(gcloud config list --format 'value(core.project)' 2>/dev/null)
    WORKDIR=$(pwd)
    

יצירת דיסק אחסון מתמיד (persistent disk)

  1. ב-Cloud Shell, עוברים אל ספריית ה-PD שלא צורפה:

    cd $WORKDIR/unattached-pd
    
  2. מייצאים את שמות הדיסקים בתור משתנים:

    export ORPHANED_DISK=orphaned-disk
    export UNUSED_DISK=unused-disk
    
  3. יוצרים שני דיסקים לאחסון:

    gcloud compute disks create $ORPHANED_DISK --project=$PROJECT_ID --type=pd-standard --size=500GB --zone=us-central1-a
    
    gcloud compute disks create $UNUSED_DISK --project=$PROJECT_ID --type=pd-standard --size=500GB --zone=us-central1-a
    

    בשיעור Lab זה נעשה שימוש באזור us-central1, אבל תוכלו לבחור אזור אחר ולהתייחס אליו בעקביות עד סוף השיעור.

  4. מאשרים שנוצרו שני דיסקים לאחסון:

    gcloud compute disks list
    

    הפלט שלכם אמור להיראות כך:

    NAME           LOCATION       LOCATION_SCOPE  SIZE_GB  TYPE         STATUS
    orphaned-disk  us-central1-a  zone            500      pd-standard  READY
    unused-disk    us-central1-a  zone            500      pd-standard  READY
    

בדיקה שהמשימה הושלמה

לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם יצרתם בהצלחה דיסק אחסון מתמיד (persistent disk), יופיע ציון בדיקה.

יצירת דיסק אחסון מתמיד (persistent disk)

יצירת VM ובדיקת דיסק האחסון

  1. ב-Cloud Shell, יוצרים מכונה:

    gcloud compute instances create disk-instance \
    --zone=us-central1-a \
    --machine-type=n1-standard-1 \
    --disk=name=$ORPHANED_DISK,device-name=$ORPHANED_DISK,mode=rw,boot=no
    
  2. בודקים את דיסק האחסון שצורף ל-VM:

    gcloud compute disks describe $ORPHANED_DISK --zone=us-central1-a --format=json | jq
    

    הפלט אמור להיראות כך:

    {
        "creationTimestamp": "2019-06-12T12:21:25.546-07:00",
        "id": "7617542552306904666",
        "kind": "compute#disk",
        "labelFingerprint": "42WmSpB8rSM=",
        "lastAttachTimestamp": "2019-06-12T12:24:53.989-07:00",
        "name": "orphaned-disk",
        "physicalBlockSizeBytes": "4096",
        "selfLink": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/disks/orphaned-disk",
        "sizeGb": "500",
        "status": "READY",
        "type": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/diskTypes/pd-standard",
        "users": [
            "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/instances/disk-instance"
        ],
        "zone": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a"
    }
    

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

    • users מזהה את מכונת ה-VM שהדיסק מצורף אליה.
    • lastAttachTimestamp מזהה מתי הדיסק צורף ל-VM בפעם האחרונה.

בדיקה שהמשימה הושלמה

לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם יצרתם בהצלחה מכונת VM בעזרת דיסק אחסון מתמיד (persistent disk), יופיע ציון בדיקה.

יצירת מכונת VM בעזרת דיסק אחסון מתמיד (persistent disk)
  1. מנתקים את דיסק האחסון שלא משויך לאף מכונה וירטואלית מה-VM:

    gcloud compute instances detach-disk disk-instance --device-name=$ORPHANED_DISK --zone=us-central1-a
    
  2. בודקים את האחסון שלא משויך לאף מכונה וירטואלית:

    gcloud compute disks describe $ORPHANED_DISK --zone=us-central1-a --format=json | jq
    

    הפלט אמור להיראות כך:

    {
    "creationTimestamp": "2019-06-12T12:21:25.546-07:00",
    "id": "7617542552306904666",
    "kind": "compute#disk",
    "labelFingerprint": "42WmSpB8rSM=",
    "lastAttachTimestamp": "2019-06-12T12:24:53.989-07:00",
    "lastDetachTimestamp": "2019-06-12T12:34:56.040-07:00",
    "name": "orphaned-disk",
    "physicalBlockSizeBytes": "4096",
    "selfLink": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/disks/orphaned-disk",
    "sizeGb": "500",
    "status": "READY",
    "type": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a/diskTypes/pd-standard",
    "zone": "https://www.googleapis.com/compute/v1/projects/automating-cost-optimization/zones/us-central1-a"
    }
    

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

    • בדיסק אין רישום של users, דבר שמצביע על כך שהוא אינו בשימוש כרגע.
    • קייימת רשומה מסוג lastDetachTimestamp שמציינת מתי הדיסק צורף ל-VM בפעם האחרונה, ולמעשה, מתי הייתה הפעם האחרונה שנעשה בו שימוש.
    • השדה lastAttachTimestamp עדיין מוצג.

בדיקה שהמשימה הושלמה

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

ניתוק מה-VM של הדיסק שלא משויך לאף מכונה וירטואלית

בדיקת קוד הפונקציה ב-Cloud Functions

  1. ב-Cloud Shell, יוצרים פלט של הקטע בקוד שמאחזר את כל הדיסקים של האחסון המתמיד (persistent disk) בפרויקט:

    cat $WORKDIR/unattached-pd/main.py | grep "(request)" -A 12
    

    הפלט שלכם אמור להיראות כך:

    def delete_unattached_pds(request):
    # get list of disks and iterate through it:
    disksRequest = compute.disks().aggregatedList(project=project)
    while disksRequest is not None:
        diskResponse = disksRequest.execute()
        for name, disks_scoped_list in diskResponse['items'].items():
            if disks_scoped_list.get('warning') is None:
                # got disks
                for disk in disks_scoped_list['disks']: # iterate through disks
                    diskName = disk['name']
                    diskZone = str((disk['zone'])).rsplit('/',1)[1]
                    print (diskName)
                    print (diskZone)
    

    הפונקציה משתמשת בשיטת aggregatedList כדי לכלול את כל הדיסקים של האחסון המתמיד (persistent disk) בפרויקט Google Cloud שבו הם פועלים, ומבצעת איטרציה באמצעות כל אחד מהדיסקים.

  2. יוצרים פלט של הקטע בקוד שבודק את השדה lastAttachTimestamp ומוחק את הדיסק אם הוא לא קיים:

    cat $WORKDIR/unattached-pd/main.py | grep "handle never" -A 11
    

    הפלט שלכם אמור להיראות כך:

    # handle never attached disk - delete it
       # lastAttachedTimestamp is not present
       if disk.get("lastAttachTimestamp") is None:
              print ("disk " + diskName + " was never attached - deleting")
               deleteRequest = compute.disks().delete(project=project,
                   zone=diskZone,
                   disk=diskName)
                  deleteResponse = deleteRequest.execute()
                  waitForZoneOperation(deleteResponse, project, diskZone)
               print ("disk " + diskName + " was deleted")
               Continue
    

    קטע זה מוחק את הדיסק אם lastAttachTimestamp לא מוצג — כלומר, הדיסק לא היה אף פעם בשימוש.

  3. יוצרים פלט של הקטע בקוד שמחשב את גיל הדיסק אם הוא ללא משויך לאף מכונה וירטואלית, יוצר ממנו קובץ snapshot ומוחק אותו:

    cat $WORKDIR/unattached-pd/main.py | grep "handle detached" -A 32
    

    הפלט שלכם אמור להיראות כך:

    # handle detached disk - snapshot and delete
                    # lastAttachTimestamp is present AND users is not present AND it meets the age criterium
                    if disk.get("users") is None \
                        and disk.get("lastDetachTimestamp") is not None \
                        and diskAge(disk['lastDetachTimestamp'])>=deleteAge:
    
                        print ("disk " + diskName + " has no users and has been detached")
                        print ("disk meets age criteria for deletion")
    
                        # take a snapshot
                        snapShotName = diskName + str(int(time.time()))
                        print ("taking snapshot: " + snapShotName)
                        snapshotBody = {
                            "name": snapShotName
                        }
                        snapshotRequest = compute.disks().createSnapshot(project=project,
                            zone=diskZone,
                            disk=diskName,
                            body=snapshotBody)
                        snapshotResponse = snapshotRequest.execute()
                        waitForZoneOperation(snapshotResponse, project, diskZone)
                        print ("snapshot completed")
    
                        # delete the disk
                        print ("deleting disk " + diskName)
                        deleteRequest = compute.disks().delete(project=project,
                            zone=diskZone,
                            disk=diskName)
                        deleteResponse = deleteRequest.execute()
                        waitForZoneOperation(deleteResponse, project, diskZone)
                        print ("disk " + diskName + " was deleted")
                        continue
    

    הקטע הזה של הקוד נמצא בשימוש כאשר לא רשומים משתמשים בדיסק ומופיע הקוד lastDetachTimestamp. המשמעות היא שהדיסק לא נמצא כרגע בשימוש, אך נעשה בו שימוש בשלב מסוים. במקרה כזה, הפונקציה ב-Cloud Functions יוצרת קובץ snapshot מהדיסק כדי לשמור נתונים ולאחר מכן מוחקת את הדיסק.

  4. ב-Cloud Shell, לוחצים על האפשרות Open Editor כדי לפתוח את העורך של Cloud Shell ולערוך את הקובץ main.py.

אם תתבקשו, עליכם ללחוץ על האפשרות Open in New Window.
  1. ניווט אל gcf-automated-resource-cleanup\unattached-pd:

  2. פותחים את הקובץ main.py:

  3. עורכים את שורה 15 בקובץ ומחליפים את automating-cost-optimization במזהה הפרויקט ב-Qwiklabs (הוא אמור להיות דומה למזהה הבא):

    project = 'qwiklabs-gcp-b5dbc291a25a68db'
    
  4. שומרים את הקובץ על ידי לחיצה על קובץ > שמירה.

פריסת פונקציה ב-Cloud Functions

  1. ב-Cloud Shell, פורסים את הפונקציה ב-Cloud Function:

    gcloud functions deploy delete_unattached_pds --trigger-http --runtime=python37
    
    אם מופיעה הודעת שגיאה, ממתינים רגע ומזינים מחדש את הפקודה. פריסת פונקציה ב-Cloud Functions עשויה לארוך בין 2 ל-5 דקות, תלוי באזור.
  2. לוכדים את כתובת האתר המשמשת כטריגר של הפונקציה ב-Cloud Functions כמשתנה סביבה:

    export FUNCTION_URL=$(gcloud functions describe delete_unattached_pds --format=json | jq -r '.httpsTrigger.url')
    

בדיקה שהמשימה הושלמה

לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם פרסתם בהצלחה את הפונקציה ב-Cloud Functions, יופיע ציון בדיקה.

פורסים את הפונקציה ב-Cloud Functions

הגדרה ובדיקה של הפונקציה ב-Cloud Functions

  1. ב-Cloud Shell, יוצרים משימה של Cloud Scheduler להרצת הפונקציה ב-Cloud Functions בשעה 02:00 מדי לילה:

    gcloud scheduler jobs create http unattached-pd-job \
    --schedule="* 2 * * *" \
    --uri=$FUNCTION_URL
    

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

בדיקה שהמשימה הושלמה

לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם יצרתם בהצלחה משימת Cloud Scheduler להרצת פונקציה ב-Cloud Functions, יופיע ציון בדיקה.

יצירת משימת Cloud Scheduler להרצת הפונקציה ב-Cloud Functions
  1. בודקים את המשימה על ידי הפעלת הטריגר באופן ידני:

    gcloud scheduler jobs run unattached-pd-job
    
  2. מאשרים את יצירת קובץ ה-snapshot של הדיסק שלא משויך לאף מכונה וירטואלית:

    gcloud compute snapshots list
    

    הפלט אמור להיראות כך:

    NAME                     DISK_SIZE_GB  SRC_DISK                           STATUS
    orphaned-disk1560455894  500           us-central1-a/disks/orphaned-disk  READY
    
  3. מאשרים את המחיקה של הדיסק שלא משויך לאף מכונה וירטואלית ושלא נעשה בו שימוש:

    gcloud compute disks list
    

    הפלט אמור להיראות כך:

    NAME                LOCATION       LOCATION_SCOPE  SIZE_GB  TYPE         STATUS
    disk-instance       us-central1-a  zone            10       pd-standard  READY
    
    

בדיקה שהמשימה הושלמה

לוחצים על Check my progress כדי לאמת שהשלמתם את המשימה. אם בדקתם בהצלחה את המשימה על ידי הפעלת הטריגר באופן ידני, יופיע ציון בדיקה.

בדיקת המשימה על ידי הפעלת הטריגר באופן ידני

כל הכבוד!

בשיעור Lab זה השלמתם את המשימות הבאות:

  • יצרתם שני דיסקים לאחסון מתמיד (persistent disk).
  • יצרתם VM שמשתמש באחד מהדיסקים.
  • ניתקתם את הדיסק מה-VM.
  • בדקתם את הקוד של הפונקציה ב-Cloud Functions.
  • פרסתם את הפונקציה ב-Cloud Functions.
  • בדקתם את הפונקציה ב-Cloud Functions על ידי שימוש במשימות Cloud Scheduler.

IC_OptimizingYourGCPCosts_V2_resized.png

סיום המשימה

שיעור Lab זה בלימוד עצמי הוא חלק מיחידת ה-Quest שנקראת האופטימיזציה של העלויות ב-Google Cloud ב-Qwiklabs. יחידת Quest היא סדרה של שיעורי Lab מעשיים קשורים שיוצרים מסלול לימוד. השלמת היחידה הזו מזכה אתכם בתג שמופיע למעלה, לציון ההישג שלכם. אתם יכולים להציג את התג או התגים באופן גלוי לכול ולקשר אותם לקורות החיים שלכם באינטרנט או לחשבון במדיה חברתית. רוצים לקבל קרדיט מיידי על השלמת שיעור ה-Lab הזה? הירשמו ליחידת ה-Quest הזו.
לצפייה במשימות Qwiklabs נוספות.

מעבר לשיעור ה-Lab הבא

המשיכו את יחידת ה-Quest עם שכבות רשת – אופטימיזציה של הוצאות ברשת או בדקו את ההצעות הבאות:

הדרכה והסמכה של Google Cloud

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

עדכון אחרון של המדריך: 26 בינואר 2021.
בדיקה אחרונה של שיעור ה-Lab: ב-2 ביוני 2020.

זכויות יוצרים 2024 Google LLC. כל הזכויות שמורות. Google והלוגו של Google הם סימנים מסחריים רשומים של Google LLC. שמות של חברות ומוצרים אחרים עשויים להיות סימנים מסחריים של החברות, בהתאמה, שאליהן הם משויכים.