בעזרת תמונות מרובות ארכיטקטורות, אתם יכולים לשדרג את מאגרי הצמתים של Windows Server ב-Google Kubernetes Engine (GKE) לגרסת Windows Server המועדפת עליכם בלי לבנות מחדש את התמונה ולשנות את מפרטי ה-Pod. לדוגמה:
- גרסה 1.15 של GKE תומכת ב-Windows Server 1809
- GKE גרסה 1.16 תומכת ב-Windows Server 1909
כדי לשדרג באופן אוטומטי מגרסה אחת של GKE לגרסה מאוחרת יותר, צריך ליצור קובצי אימג' עם כמה ארכיטקטורות לעומסי העבודה ב-Windows. כדי ליצור קובץ אימג' מרובה-ארכיטקטורות, צריך ליצור קובץ אימג' לכל גרסה של Windows Server, ואז ליצור מניפסט שמפנה לקובצי האימג' האלה לכל גרסה של Windows Server. אם אתם רוצים שליטה מלאה בתהליך היצירה והבנייה של התמונות, אתם יכולים ליצור אותן באופן ידני. לחלופין, אתם יכולים להשתמש ב-Cloud Build כדי ליצור באופן אוטומטי את קובצי האימג' של Windows Server עם כמה ארכיטקטורות.
מטרות
במדריך הזה נסביר איך ליצור תמונות מרובות ארכיטקטורות של Windows Server באופן ידני או באמצעות Cloud Build.יוצרים את התמונות באופן ידני:
- יוצרים 2 קובצי אימג' של Docker עם גרסאות או סוגים שונים של Windows Server, למשל Long-Term Servicing Channel (LTSC) 2019 ו-LTSC 2022.
- יוצרים מכונה וירטואלית של Windows Server.
- יוצרים מניפסט ושולחים אותו למרשם.
יוצרים את קובצי האימג' באמצעות Cloud Build:
- מכינים את הסביבה על ידי יצירת פרויקט, הפעלת ממשקי API והענקת הרשאות.
- יוצרים אפליקציה, קובצי Dockerfile וקובצי build.
- מריצים פקודה כדי ליצור את קובץ האימג'.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:- מתקינים את Google Cloud CLI כדי להריץ פקודות
gcloud. - מתקינים את Docker כדי ליצור קונטיינרים.
- מתקינים את Go כדי ליצור קבצים בינאריים של Windows Server.
- במדריך הזה משתמשים ב-Artifact Registry כמאגר. מוודאים שיצרתם את המאגר שלכם ב-Docker.
יצירת תמונות מרובות ארכיטקטורות באופן ידני
כשיוצרים באופן ידני קובצי אימג' עם כמה ארכיטקטורות, אפשר ליצור קובץ אימג' שכולל כל גרסה של Windows Server שצריך. כדי ליצור קובץ אימג' עם כמה ארכיטקטורות באופן ידני:
- יוצרים קובץ אימג' של Docker עם ארכיטקטורה אחת ב-LTSC 2019. פרטים על יצירת קובצי אימג' של Docker מופיעים במאמר פריסת אפליקציית Windows Server.
לדוגמה,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2019. - יצירת קובץ אימג' של Docker LTSC 2022 עם ארכיטקטורה יחידה. לדוגמה,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2022 - יוצרים מכונה וירטואלית של Windows Server, למשל גרסה 20H2. אפשר לעיין במדריך למתחילים לשימוש במכונה וירטואלית של Windows Server.
- משתמשים ב-RDP כדי להתחבר למכונה הווירטואלית.
- פותחים חלון PowerShell כדי להריץ את הפקודות בשלבים הבאים.
מפעילים את התכונה הניסיונית
docker manifest. מניפסט של Docker הוא רשימה של קובצי אימג' שצריך להעלות למאגר:PS C:\> $env:DOCKER_CLI_EXPERIMENTAL = 'enabled'יוצרים את המניפסט של ריבוי הארכיטקטורות:
docker manifest create ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-2019 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-2022 `דוחפים את מניפסט התמונה החדש שנוצר עם כמה ארכיטקטורות למאגר Artifact Registry:
docker manifest push ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0כדי לוודא שתמונת ה-multi-arch נוצרה ונשלחה בהצלחה, עוברים אל
REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/fooולוחצים על התמונה. שלוש התמונות יופיעו בתוך הקובץ:foo:1.0-2019foo:1.0-2022foo:1.0-20h2foo:1.0
עכשיו אפשר להפנות לתמונה מרובת ארכיטקטורות REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0 במפרטי ה-Pod. כך תוכלו להשתמש בבטחה בשדרוג אוטומטי של מאגרי צמתים של GKE Windows.
יצירת קובצי אימג' מרובי-ארכיטקטורה באמצעות Cloud Build gke-windows-builder
כדי להקל על השלבים של בנייה ידנית, אפשר להשתמש ב-gke-windows-builder שמבוסס על OSS gke-windows-builder. אתם יכולים להשתמש ב-gke-windows-builder עם Cloud Build כדי ליצור באופן אוטומטי קובצי אימג' של Windows Server עם כמה ארכיטקטורות. GKE מעדכן את כלי ה-builder כך שיכלול גרסאות חדשות של Windows LTSC שנתמכות כשהן יוצאות. יתרון נוסף בשימוש בכלי הוא שלא צריך ליצור מכונה וירטואלית של Windows עם Powershell כדי לבנות את קובצי האימג'. ה-VM של Windows מוחלף בקונטיינר של Docker שמריץ את הפקודות בשבילכם ב-Cloud Build.
כדי לעזור לך להבין איך ה-builder פועל, אפשר לפעול לפי הדוגמה הזו כדי לבנות תמונה מרובת ארכיטקטורות של 'Hello World'. אפשר לבצע את השלבים האלה בשרתי Linux או Windows.
הכנת הסביבה
כדי להכין את הסביבה:
- יוצרים ספרייה של סביבת העבודה במחשב שלכם, לדוגמה:
~/gke-windows-builder/hello-world. - יוצרים פרויקט או בוחרים פרויקט קיים לצורך המדריך הזה.
- מוודאים שהחיוב מופעל בפרויקט.
מפעילים בפרויקט את Compute Engine, Cloud Build ו-Artifact Registry APIs. הפעלת gke-windows-builder מתבצעת באמצעות Cloud Build, וקובצי האימג' של הקונטיינרים מרובי הארכיטקטורות שנוצרים מועברים בדחיפה ל-Artifact Registry. כדי שהכלי יוכל ליצור ולנהל מכונות וירטואליות של Windows Server, צריך להשתמש ב-Compute Engine.
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com \ artifactregistry.googleapis.com cloudbuild.googleapis.comצריך להקצות לחשבון השירות של Cloud Build את התפקידים הבאים בניהול הזהויות והרשאות הגישה (IAM) באמצעות Google Cloud CLI:
הגדרת משתנים:
export PROJECT=$(gcloud info --format='value(config.project)') export MEMBER=$(gcloud projects describe $PROJECT --format 'value(projectNumber)')@cloudbuild.gserviceaccount.comהקצאת תפקידים. התפקידים האלה נדרשים כדי שהכלי לבניית תמונות יוכל ליצור את המכונות הווירטואליות של Windows Server, להעתיק את סביבת העבודה לדלי ב-Cloud Storage, להגדיר את הרשתות כדי ליצור את תמונת Docker ולהעביר את התמונה שנוצרה ל-Artifact Registry:
gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/compute.instanceAdmin' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/iam.serviceAccountUser' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/compute.networkViewer' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/storage.admin' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/artifactregistry.writer' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/cloudbuild.builds.editor'
מוסיפים כלל של חומת האש בשם
allow-winrm-ingressכדי לאפשר ל-WinRM להתחבר למכונות וירטואליות של Windows Server ולהריץ גרסת build של Docker:gcloud compute firewall-rules create allow-winrm-ingress --allow=tcp:5986 --direction=INGRESSיוצרים מאגר Docker ב-Artifact Registry לפרויקט. אם אתם משתמשים חדשים במאגרי Docker ב-Artifact Registry, אנחנו ממליצים להשלים קודם את המדריך למתחילים ל-Docker. מריצים את הפקודה הבאה כדי ליצור את המאגר:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker --location=REGISTRY_REGION \ --description="Docker repository"מחליפים את מה שכתוב בשדות הבאים:
-
REPOSITORY: שם כמוwindows-multi-arch-images. -
REGISTRY_REGION: מיקום תקף ב-Artifact Registry.
-
יצירת הקובץ הבינארי hello.exe בסביבת העבודה
במדריך הזה ניצור אפליקציית "hello world" פשוטה, שנכתבה ב-Go. הקוד של האפליקציה לדוגמה זמין ב-GitHub.
משכפלים את המאגר שמכיל את הקוד לדוגמה של המדריך הזה למכונה המקומית באמצעות הפקודות הבאות:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/windows/windows-multi-archהקובץ
hello.goמדפיס את המילים Hello World:יוצרים את הקובץ הבינארי של
hello.exe:GOOS=windows go build hello.go
קובץ ה-hello.exe הבינארי יופיע במרחב העבודה.
יצירת Dockerfile וקבצים לבנייה בסביבת העבודה
בקטע הזה תשתמשו ב-Dockerfile כדי ליצור כל קובץ אימג' של Windows Server בארכיטקטורה אחת, ואז תשתמשו בקובץ build כדי להפעיל את Cloud Build. ה-build משלב את התמונות של ארכיטקטורה יחידה לתמונה של ארכיטקטורה מרובה.
Dockerfileהוא מסמך טקסט שמכיל הוראות ל-Docker ליצירת תמונה. gke-windows-builder מחליף אתWINDOWS_VERSIONבגרסה ספציפית של Windows Server כדי לבצע את ה-build של האימג'. לדוגמה, ה-builder יפעיל את הפקודהdocker build -t multi-arch-helloworld:latest_20h2 --build-arg WINDOWS_VERSION=20H2 .ב-Windows Server 20H2.באותה ספרייה שבה נמצא הקובץ
Dockerfile, הקובץcloudbuild.yamlהוא קובץ תצורת ה-build. מחליפים את <REPOSITORY> ואת <REGISTRY_REGION> בשם ובאזור של מאגר Artifact Registry שיצרתם בשלב הקודם. בזמן ה-build, Cloud Build מחליף באופן אוטומטי את$PROJECT_IDבמזהה הפרויקט.
התמונה נוצרת
עכשיו אפשר ליצור את התמונה ולצפות ביומנים כדי לוודא שהבנייה הושלמה בהצלחה.
כדי ליצור את האימג', מריצים את הפקודה הבאה:
gcloud builds submit --config=cloudbuild.yaml .יופיעו יומנים כמו בדוגמה הבאה. השורה האחרונה ביומן מראה שה-build הצליח:
Creating temporary tarball archive of 2 file(s) totalling 492 bytes before compression. Uploading tarball of [.] to [gs://PROJECT_ID_cloudbuild/source/1600082502.509759-b949721a922d462c94a75da9be9f1181.tgz] Created [https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds/ec333452-1301-47e8-90e2-716aeb2f5650]. Logs are available at [https://console.cloud.google.com/cloud-build/builds/ec333452-1301-47e8-90e2-716aeb2f5650?project=840737568665]. ------------------------ REMOTE BUILD OUTPUT--------------------------------------- ... ... Created manifest list REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest sha256:3ecbbc9f5144f358f81f7c7f1a7e28f069c98423d59c40eaff72bf184af0be02 2020/09/14 11:34:25 Instance: 35.184.178.49 shut down successfully PUSH DONE ----------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS ec333452-1301-47e8-90e2-716aeb2f5650 2020-09-14T11:21:43+00:00 12M43S gs://PROJECT_ID_cloudbuild/source/1600082502.509759-b949721a922d462c94a75da9be9f1181.tgz - SUCCESS
הרגע יצרתם את קובץ האימג' באמצעות קובץ הגדרות ה-build והעברתם אותו בדחיפה ל-Artifact Registry בכתובת REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest.
פריסת התמונה
כדי לפרוס את תמונת Windows מרובת הארכיטקטורות באשכול, אפשר לעיין במאמר פריסת אפליקציית Windows Server כדי ללמוד איך לפרוס את התמונה.
שימוש מתקדם ב-gke-windows-builder
כדי להתאים אישית את ההתנהגות של gke-windows-builder, אפשר להוסיף דגלים לקטע args בקובץ התצורה של ה-build cloudbuild.yaml. בקטע הזה מפורטים כמה דגלים להתנהגויות נפוצות, אבל זו לא רשימה מלאה. כדי לראות את הרשימה המלאה של הדגלים שנתמכים ב-gke-windows-builder, מריצים את הפקודה הבאה בשרת Linux או ב-Cloud Shell:
docker run -it us-docker.pkg.dev/gke-windows-tools/docker-repo/gke-windows-builder:latest --help
כדי להאיץ את ה-builds, אתם יכולים להשתמש בסוג מכונה גדול יותר למכונות Windows:
- --machineType
- 'n1-standard-8'
במקום ליצור את קובץ האימג' לכל הגרסאות של Windows ש-GKE תומך בהן, אפשר לבחור גרסאות ספציפיות של Windows Server ליצירה באמצעות הדגל --versions:
- --versions
- '20H2,ltsc2019'
אם יש הרבה קבצים בסביבת העבודה, גרסת ה-build של התמונה תהיה אמינה יותר אם תגדירו את כלי ה-builder להעתקת סביבת העבודה דרך Cloud Storage ולא דרך WinRM.
יוצרים קטגוריה בפרויקט, למשל gs://{your project}_builder, ומגדירים את הדגל --workspace-bucket:
- --workspace-bucket
- '{your project}_builder'
כדי להריץ את מופעי ה-Builder של Windows בפרויקט שירות VPC משותף, משתמשים בפלגים הבאים ששולטים בהגדרת הרשת של המופע:
- --subnetwork-project
- 'shared-vpc-host-project'
- --subnetwork
- 'host-project-subnet-shared-with-service-project'
הסרת המשאבים
אחרי שמסיימים את המדריך, אפשר למחוק את המשאבים שנוצרו, כדי שהם יפסיקו להשתמש במכסה ולצבור חיובים. בסעיפים הבאים מוסבר איך למחוק או להשבית את המשאבים האלו.
המערכת מוחקת את התמונה
כדי למחוק את multiarch-helloworld התמונות ב-Artifact Registry, אפשר לעיין במאמר בנושא מחיקת תמונות.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
אפשר לעיין במדריכים נוספים בנושא Kubernetes Engine.
כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.