כדי ליצור מכונה וירטואלית (VM) של Windows ב- Cloud de Confiance by S3NS, צריך להשתמש בקובץ אימג' של מכונה וירטואלית שבו מותקנים מראש Windows או Windows Server. Cloud de Confiance מספק קובצי אימג' ציבוריים לגרסאות נפוצות של Windows Server, אבל קובצי האימג' האלה מתאימים רק לרישוי על פי דרישה. כדי להשתמש ברישיון Windows משלכם (BYOL), אתם צריכים לייבא תמונה קיימת או ליצור תמונה בהתאמה אישית.
במדריך הזה מוסבר איך ליצור תמונה בהתאמה אישית באמצעות אותם כלים ותהליכים שבהם Cloud de Confiance משתמשת כדי ליצור את התמונות הציבוריות.
כדי להשלים את המדריך הזה, תצטרכו:
- קובץ ISO שמכיל את מדיום ההתקנה של Windows או Windows Server.
- אם רוצים, אפשר להוסיף חבילת עדכון אחת או יותר של Windows (בפורמט
.msu) להחלה על התמונה.
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Cloud de Confiance כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Cloud de Confiance by S3NS
gcloud
-
התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud init
-
- הגדרת אזור ותחום כברירת מחדל
הסבר על תהליך build
כדי להתקין את Windows מאפס, אחת הגישות הנפוצות היא אתחול של המחשב מקובץ DVD או ISO שמכיל את קובצי ההתקנה של Windows. בניגוד לחלק מההיפר-ויזורים המקומיים, ב-Compute Engine אי אפשר לבצע אתחול מקובץ ISO.
לכן, כדי להתקין את Windows מאפס, צריך לפעול בדרך אחרת, שכוללת את השלבים הבאים:
- יצירת דיסק חדש.
- חילוץ תמונת Windows (
install.wimמאמצעי ההתקנה) לדיסק. - הוספת מנהלי התקנים נדרשים, הגדרת Windows Setup כך שיפעל ללא השגחה והפיכת הדיסק לדיסק שאפשר לבצע ממנו אתחול.
- מבצעים אתחול מהדיסק החדש כדי להפעיל את תוכנית ההתקנה של Windows.
- התקנת תוכנה נוספת, כולל סוכן מערכת ההפעלה של האורח.
- יצירת תמונה מהדיסק.
במקום לבצע את השלבים האלה באופן ידני, במדריך הזה מוסבר איך אפשר להשתמש ב-Cloud Build, בכלי daisy ובזרימות העבודה לדוגמה שזמינות ב-GitHub כדי לבצע את התהליך באופן אוטומטי.
daisy הוא כלי שורת פקודה בקוד פתוח שמאפשר להריץ תהליכי עבודה. תזרימי עבודה נכתבים כקובצי JSON ומכילים רצף של שלבים. כל שלב כזה מתאר פעולה ב-Compute Engine – למשל, יצירת דיסק או כיבוי של מכונה וירטואלית. לכן, תהליכי עבודה של Daisy מתאימים לאוטומציה של השלבים הנדרשים ליצירת תמונת Windows מאפס.
תהליכי העבודה של Daisy ליצירת תמונות Windows בהתאמה אישית יוצרים שתי מכונות וירטואליות זמניות.
מופע המכונה הווירטואלית הראשון (עם הקידומת bootstrap) מבצע את השלבים הנדרשים ליצירת דיסק שאפשר לאתחל ממנו. המכונה הווירטואלית השנייה (עם הקידומת install) מריצה את ההגדרה של Windows ומבצעת את כל השלבים שנותרו.
הכנת הפרויקט ליצירת תמונות
כדי למנוע מהכלי Daisy להפריע למכונות וירטואליות קיימות או לתשתית, צריך ליצור פרויקט ייעודי לבניית תמונות:
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
השלבים הבאים משתנים בהתאם למערכת ההפעלה שמותקנת במחשב המקומי: Windows או Linux:
Windows
- במחשב המקומי, פותחים חלון של Windows PowerShell.
מפעילים משתנה:
$PROJECT_ID = "
PROJECT_ID"כאשר
PROJECT_IDהוא מזהה הפרויקט של פרויקטCloud de Confiance שיצרתם בקטע הקודם.מאחלים עוד משתנה כך שיכיל את מספר הפרויקט:
$PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
Linux
- במחשב המקומי, פותחים חלון טרמינל.
מפעילים משתנה:
PROJECT_ID=
PROJECT_IDכאשר
PROJECT_IDהוא מזהה הפרויקט של פרויקטCloud de Confiance שיצרתם בקטע הקודם.מאחלים עוד משתנה כך שיכיל את מספר הפרויקט:
PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
העלאת קובצי התקנה
עכשיו אוספים את כל קובצי ההתקנה שנדרשים לתמונה המותאמת אישית ומעלים אותם לקטגוריה של Cloud Storage. אחסון הקבצים בקטגוריה של Cloud Storage מבטיח שdaisy יוכל לגשת לקבצים, וגם מכונות ה-VM הזמניות שdaisy משתמש בהן כדי ליצור את האימג'.
בשלבים הבאים, מחליפים את UNIQUE_SUFFIX ברצף קצר של תווים רנדומליים כדי ליצור שם ייחודי לקטגוריה. לדוגמה, משתמשים ב-PROJECT_ID-media-a7g19. הוספת סיומת אקראית לשם הקטגוריה עוזרת למנוע השתלטות על קטגוריות, נקודת חולשה שבה תוקף יכול להשיג שליטה בתהליך build שלכם על ידי תפיסת בעלות מראש על קטגוריה עם שם צפוי.
במחשב המקומי, מורידים את חבילות ההתקנה הנדרשות:
יוצרים קטגוריה חדשה של Cloud Storage לאחסון קובצי ההתקנה:
gcloud storage buckets create gs://$PROJECT_ID-media-
UNIQUE_SUFFIX--project=$PROJECT_IDמקצים ל-Cloud Build את התפקיד צפייה באובייקט אחסון כדי שהוא יוכל לקרוא את קובצי ההתקנה:
gcloud storage buckets add-iam-policy-binding gs://$PROJECT_ID-media-
UNIQUE_SUFFIX--member=serviceAccount:$PROJECT_NUMBER@cloudbuild.s3ns-system.iam.gserviceaccount.com --role=roles/storage.objectViewerמעלים את חבילת ההתקנה של PowerShell:
gcloud storage cp
POWERSHELL_PACKAGEgs://$PROJECT_ID-media-UNIQUE_SUFFIX/PowerShell.msi
POWERSHELL_PACKAGEהוא הנתיב לחבילת ההתקנה של PowerShell.מעלים את חבילת ההתקנה של .NET Framework:
gcloud storage cp
DOTNET_PACKAGEgs://$PROJECT_ID-media-UNIQUE_SUFFIX/dotnet-sdk.exe
DOTNET_PACKAGEהוא הנתיב לחבילת ההתקנה של NET Framework.מעלים את חבילת ההתקנה של ה-CLI של gcloud:
gcloud storage cp
CLOUDSDK_PACKAGEgs://$PROJECT_ID-media-UNIQUE_SUFFIX/GoogleCloudSDKInstaller.exe
CLOUDSDK_PACKAGEהוא הנתיב לחבילת ההתקנה של ה-CLI של gcloud.מעלים את קובץ ה-ISO שמכיל את מדיום ההתקנה של Windows:
gcloud storage cp
ISOgs://$PROJECT_ID-media-UNIQUE_SUFFIX/כאשר
ISOהוא השם של קובץ ה-ISO.אפשר להעלות חבילות עדכון נוספות:
gcloud storage cp
UPDATE_DIR/*.msu gs://$PROJECT_ID-media-UNIQUE_SUFFIX/updates/כאשר
UPDATE_DIRהיא הספרייה שמכילה את חבילות העדכון.
עכשיו אפשר ליצור את התמונה המותאמת אישית.
יצירת התמונה
ביצוע תהליך העבודה daisy כדי ליצור קובץ אימג' בהתאמה אישית נמשך עד ארבע שעות.
במקום להריץ את daisy באופן מקומי, יוצרים עכשיו תצורת build של Cloud Build כדי לאפשר ל-Cloud Build להריץ את תהליך העבודה ברקע.
במחשב המקומי, משכפלים את מאגר Git שמכיל את תהליכי העבודה
daisyליצירת תמונות של Windows:git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
עוברים לספרייה
windows:cd compute-image-tools/daisy_workflows/image_build/windows/
בספרייה
windows, מוצאים מבחר של קבצים עם הסיומת.wf.json. הקבצים האלה מכילים הגדרות של תהליכי עבודה ב-Daisy לגרסאות נפוצות של Windows:גרסת Windows קובץ של תהליך עבודה Windows Server Core 2022 (64 ביט) windows-server-2022-dc-core-uefi-byol.wf.jsonWindows Server 2019 (64 ביט) windows-server-2019-dc-uefi-byol.wf.jsonWindows Server Core 2019 (64-bit) windows-server-2019-dc-core-uefi-byol.wf.jsonWindows Server 2016 (64 ביט) windows-server-2016-dc-uefi-byol.wf.jsonWindows Server Core 2016 (64 ביט) windows-server-2016-dc-core-uefi-byol.wf.jsonWindows 11 21H2 (64 ביט) windows-11-21h2-ent-x64-uefi.wf.jsonWindows 11 22H2 (64 ביט) windows-11-22h2-ent-x64-uefi.wf.jsonWindows 11 23H2 (64 ביט) windows-11-23h2-ent-x64-uefi.wf.jsonWindows 10 21H2 (64 ביט) windows-10-21h2-ent-x64-uefi.wf.jsonWindows 10 22H2 (64 ביט) windows-10-22h2-ent-x64-uefi.wf.jsonפותחים את קובץ תהליך העבודה שהכי מתאים לגרסת Windows שרוצים להתקין. אם צריך, משנים את ההגדרות של מהדורת Windows (
edition) ומפתח הרישיון (product_key) בקובצי תהליך העבודה כך שיתאימו למדיה להתקנה.אם אתם לא בטוחים מה שם המהדורה הנכון, פותחים שורת פקודה של PowerShell עם הרשאות אדמין ומריצים את הפקודות הבאות כדי לראות רשימה של כל המהדורות שנתמכות על ידי מדיום ההתקנה:
$IsoFile = "
ISO" $Mount = Mount-DiskImage -ImagePath (Resolve-Path $IsoFile) $DriveLetter = ($Mount | Get-Volume).DriveLetter Get-WindowsImage -ImagePath "$($DriveLetter):\sources\install.wim" | select ImageName Dismount-DiskImage -InputObject $Mount | Out-Nullמחליפים את הערך ב-
ISOבנתיב המקומי לתמונת ה-ISO.בספרייה
windows, יוצרים קובץ חדש בשםcloudbuild.yamlומדביקים בו את הקוד הבא:timeout: 14400s # 4 hour timeout for entire build steps: - name: 'gcr.io/compute-image-tools/daisy' timeout: 14400s # 4 hour timeout for build step waitFor: ['-'] args: - -project=$PROJECT_ID - -zone=us-central1-a - -var:updates=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/updates/ - -var:pwsh=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/PowerShell.msi - -var:dotnet48=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/dotnet-sdk.exe - -var:cloudsdk=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/GoogleCloudSDKInstaller.exe - -var:media=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/ISO-WORKFLOWמחליפים את:
-
ISO: השם של קובץ ה-ISO ב-Cloud Storage. -
WORKFLOW: שם קובץ זרימת העבודה שמתאים לגרסת Windows שבה אתם משתמשים.
-
שולחים את ה-build ל-Cloud Build:
gcloud builds submit --project $PROJECT_ID --async
התהליך יימשך עד ארבע שעות. אפשר לעקוב אחרי הסטטוס של הבנייה ב Cloud de Confiance מסוף בקטע Cloud Build > History.
שימוש בתמונה מותאמת אישית
אחרי שה-build מסתיים, אפשר למצוא את קובץ האימג' המותאם אישית של BYOL בCloud de Confiance מסוף בקטע Compute Engine > Images.
כדי להבדיל בין כמה גרסאות של אותה תמונה, תהליך הבנייה מטמיע חותמת זמן בשם התמונה, למשל windows-server-2019-dc-v1613488342.
בנוסף, התהליך משייך את התמונה למשפחת תמונות בהתאמה אישית, לדוגמה windows-server-2019.
כדי ליצור מכונה וירטואלית שמשתמשת באימג' BYOL בהתאמה אישית, צריך להקצות את המכונה הווירטואלית בשרת לדייר יחיד (sole-tenant).
פתרון בעיות
אם אתם חושדים שתהליך build נכשל או לא מתקדם, תוכלו להשתמש בגישות הבאות כדי לאבחן את המצב:
- מוודאים שהעליתם את חבילות ההתקנה ואת קובץ ה-ISO הנכונים.
- מוודאים שבחרתם תהליך עבודה שמתאים לגרסת Windows של קובץ ה-ISO.
- בודקים את יומן ה-build ב-Cloud Build ומחפשים הודעות שגיאה.
- אם נראה שה-build נתקע, בודקים את הפלט של היציאה הטורית של המכונה הווירטואלית שנוצרה על ידי ה-build ומחפשים הודעות שגיאה.