יצירת קובצי אימג' מרובי-ארכיטקטורה של Windows Server

במדריך הזה מוצגות דרכים לנהל את המורכבות של יצירת תמונות שמותאמות לכמה גרסאות של Windows Server. לקונטיינרים של Windows Server יש דרישות תאימות לגרסה שמונעות הפעלה של קונטיינרים ביותר מגרסה אחת של מארח Windows Server. עם זאת, Docker ב-Windows Server תומך בתמונות של קונטיינרים מרובי-ארכיטקטורה (או מרובי-פלטפורמה) שיכולות לפעול בכמה גרסאות של Windows Server.

בעזרת תמונות מרובות ארכיטקטורות, אתם יכולים לשדרג את מאגרי הצמתים של Windows Server ב-Google Kubernetes Engine ‏ (GKE) לגרסת Windows Server המועדפת עליכם בלי לבנות מחדש את התמונה ולשנות את מפרטי ה-Pod. לדוגמה:

  • גרסה 1.15 של GKE תומכת ב-Windows Server 1809
  • גרסה 1.16 של GKE תומכת ב-Windows Server 1909

כדי לשדרג מגרסת GKE אחת לגרסה מאוחרת יותר באופן אוטומטי, צריך ליצור תמונות מרובות ארכיטקטורות עבור עומסי העבודה של Windows. כדי ליצור קובץ אימג' מרובה ארכיטקטורות, צריך ליצור קובץ אימג' לכל גרסה של Windows Server, ואז ליצור מניפסט שמפנה לקובצי האימג' האלה לכל גרסה של Windows Server. אם אתם רוצים שליטה מלאה בתהליך היצירה ותהליך build של התמונות, אתם יכולים ליצור אותן ידנית. לחלופין, אפשר להשתמש ב-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 זכאים לתקופת ניסיון בחינם.

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

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

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

  1. מתקינים את Google Cloud CLI כדי להריץ פקודות gcloud.
  2. מתקינים את Docker כדי ליצור קונטיינרים.
  3. מתקינים את Go כדי ליצור קבצים בינאריים של Windows Server.
  4. במדריך הזה נעשה שימוש ב-Artifact Registry כמאגר. מוודאים שיצרתם את המאגר ב-Docker.

יצירת תמונות מרובות ארכיטקטורות באופן ידני

כשיוצרים קובצי אימג' מרובי-ארכיטקטורה באופן ידני, אפשר ליצור קובץ אימג' שכולל את כל הגרסאות של Windows Server שאתם צריכים. כדי ליצור תמונה עם כמה ארכיטקטורות באופן ידני:

  1. יצירת קובץ אימג' של Docker LTSC 2019 עם ארכיטקטורה יחידה. פרטים על יצירת תמונות Docker מופיעים במאמר פריסת אפליקציית Windows Server. לדוגמה, us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2019.
  2. יצירת קובץ אימג' של Docker LTSC 2022 עם ארכיטקטורה יחידה. לדוגמה, us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2022
  3. יוצרים מכונה וירטואלית של Windows Server, למשל גרסה 20H2. אפשר לעיין במדריך למתחילים לשימוש במכונה וירטואלית של Windows Server.
  4. משתמשים ב-RDP כדי להתחבר ל-VM.
  5. פותחים חלון PowerShell כדי להריץ את הפקודות בשלבים הבאים.
  6. מפעילים את התכונה הניסיונית docker manifest. מניפסט של Docker הוא רשימה של קובצי אימג' שצריך להעביר בדחיפה למרשם:

    PS C:\> $env:DOCKER_CLI_EXPERIMENTAL = 'enabled'
    
  7. יוצרים את מניפסט ה-multi-arch:

    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 `
    
  8. מעבירים את מניפסט האימג' החדש עם כמה ארכיטקטורות למאגר ב-Artifact Registry:

     docker manifest push `
       REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0
    
  9. כדי לוודא שהתמונה מרובת הארכיטקטורות נוצרה והועלתה בהצלחה, עוברים אל REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo ולוחצים על התמונה. 3 התמונות יופיעו בתוך:

    • foo:1.0-2019
    • foo:1.0-2022
    • foo:1.0-20h2
    • foo:1.0

עכשיו אפשר להפנות לתמונה מרובת ארכיטקטורות REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0 במפרטי ה-Pod. כך תוכלו להשתמש בשדרוג אוטומטי של מאגרי צמתים של GKE Windows בצורה בטוחה.

יצירת קובצי אימג' מרובי-ארכיטקטורה באמצעות Cloud Build gke-windows-builder

כדי להקל על השלבים של בנייה ידנית, אפשר להשתמש ב-gke-windows-builder שמבוסס על gke-windows-builder של OSS. אפשר להשתמש ב-gke-windows-builder עם Cloud Build כדי ליצור באופן אוטומטי קובצי אימג' של Windows Server מרובי-ארכיטקטורה. מערכת GKE מעדכנת את כלי ה-builder כדי לכלול גרסאות חדשות נתמכות של Windows LTSC כשהן יוצאות. יתרון נוסף בשימוש בכלי הוא שלא צריך ליצור מכונה וירטואלית משלכם ב-Windows עם Powershell כדי לבנות את קובצי האימג'. מכונת ה-VM של Windows מוחלפת בקונטיינר Docker שמריץ את הפקודות בשבילכם ב-Cloud Build.

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

הכנת הסביבה

כדי להכין את הסביבה, פועלים לפי השלבים הבאים:

  1. יוצרים ספרייה של סביבת עבודה במחשב שלכם, לדוגמה: ~/gke-windows-builder/hello-world.
  2. יוצרים פרויקט או בוחרים פרויקט קיים לצורך המדריך הזה.
  3. מוודאים שהחיוב מופעל בפרויקט.
  4. מפעילים בפרויקט את Compute Engine, ‏ Cloud Build ו-Artifact Registry APIs. הפעלת gke-windows-builder מתבצעת באמצעות Cloud Build, וקובצי האימג' של הקונטיינרים מרובי-הארכיטקטורה שנוצרים מועברים בדחיפה ל-Artifact Registry. הכלי לבנייה צריך את Compute Engine כדי ליצור ולנהל מכונות וירטואליות של Windows Server.

    gcloud services enable compute.googleapis.com cloudbuild.googleapis.com \
      artifactregistry.googleapis.com cloudbuild.googleapis.com
    
  5. צריך להקצות לחשבון השירות של Cloud Build את התפקידים הבאים בניהול הזהויות והרשאות הגישה (IAM) באמצעות Google Cloud CLI:

    1. הגדרת משתנים:

      export PROJECT=$(gcloud info --format='value(config.project)')
      export MEMBER=$(gcloud projects describe $PROJECT --format 'value(projectNumber)')@cloudbuild.gserviceaccount.com
      
    2. להקצות תפקידים. התפקידים האלה נדרשים כדי שהכלי ליצירת תמונות יוכל ליצור את המכונות הווירטואליות של 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'
      
  6. מוסיפים כלל חומת אש בשם allow-winrm-ingress כדי לאפשר ל-WinRM להתחבר למכונות וירטואליות של Windows Server ולהריץ בניית Docker:

    gcloud compute firewall-rules create allow-winrm-ingress --allow=tcp:5986 --direction=INGRESS
    
  7. יוצרים מאגר Docker ב-Artifact Registry עבור הפרויקט. אם אף פעם לא השתמשתם במאגרי Docker ב-Artifact Registry, כדאי קודם לעיין במדריך למתחילים ל-Docker. מריצים את הפקודה הבאה כדי ליצור את המאגר:

    gcloud artifacts repositories create REPOSITORY \
      --repository-format=docker --location=REGISTRY_REGION \
      --description="Docker repository"
    

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

יצירת הקובץ הבינארי hello.exe בסביבת העבודה

במדריך הזה, יוצרים אפליקציית hello world פשוטה שנכתבה ב-Go. הקוד של האפליקציה לדוגמה זמין ב-GitHub.

  1. משכפלים את המאגר שמכיל את הקוד לדוגמה של המדריך הזה למכונה המקומית באמצעות הפקודות הבאות:

     git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
     cd kubernetes-engine-samples/windows/windows-multi-arch
    
  2. הקובץ hello.go מדפיס את המילים Hello World:

    package main
    
    import "fmt"
    
    func main() {
    	fmt.Println("Hello World!")
    }
    
  3. יוצרים את הקובץ הבינארי hello.exe:

    GOOS=windows go build hello.go
    

הקובץ הבינארי hello.exe יופיע בסביבת העבודה.

יצירת קובץ Dockerfile וקבצים לבנייה בסביבת העבודה

בקטע הזה משתמשים ב-Dockerfile כדי ליצור כל קובץ אימג' של Windows Server single-arch, ואז משתמשים בקובץ build כדי להפעיל את Cloud Build. ה-build משלב את התמונות של ארכיטקטורה יחידה לתמונה של ארכיטקטורות מרובות.

  1. Dockerfile הוא מסמך טקסט שמכיל הוראות ל-Docker ליצירת תמונה. ‫gke-windows-builder מחליף את WINDOWS_VERSION בגרסה ספציפית של Windows Server כדי לבנות את התמונה. לדוגמה, ה-builder יפעיל את docker build -t multi-arch-helloworld:latest_20h2 --build-arg WINDOWS_VERSION=20H2 . ב-Windows Server 20H2.

    ARG WINDOWS_VERSION=
    FROM mcr.microsoft.com/windows/servercore:${WINDOWS_VERSION}
    COPY hello.exe /hello.exe
    USER ContainerUser
    ENTRYPOINT ["hello.exe"]
  2. באותה ספרייה שבה נמצא הקובץ Dockerfile, הקובץ cloudbuild.yaml הוא קובץ תצורה של ה-build. מחליפים את <REPOSITORY> ואת <REGISTRY_REGION> בשם ובאזור של מאגר Artifact Registry שיצרתם בשלב הקודם. בזמן ה-build, מערכת Cloud Build מחליפה באופן אוטומטי את $PROJECT_ID במזהה הפרויקט.

    timeout: 3600s
    steps:
    - name: 'us-docker.pkg.dev/gke-windows-tools/docker-repo/gke-windows-builder:latest'
      args:
      - --container-image-name
      # Replace <REGISTRY_REGION> and <REPOSITORY>.
      - '<REGISTRY_REGION>-docker.pkg.dev/$PROJECT_ID/<REPOSITORY>/multiarch-helloworld:latest'
      # Specify specific variants of images to be built. Or, remove the following 2 lines to default to all available variants.
      - --versions
      - '20H2,ltsc2019'

יצירת התמונה

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

  1. כדי ליצור את האימג', מריצים את הפקודה הבאה:

    gcloud builds submit --config=cloudbuild.yaml .
    
  2. יוצגו יומנים כמו בדוגמה הבאה. השורה האחרונה ביומן מראה שהבנייה הצליחה:

    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

כדי להאיץ את תהליך ה-build, אפשר להשתמש בסוג מכונה גדול יותר עבור מופעי Windows:

  - --machineType
  - 'n1-standard-8'

במקום ליצור את קובץ האימג' לכל הגרסאות של Windows ש-GKE תומך בהן, אפשר לבחור גרסאות ספציפיות של Windows Server ליצירה באמצעות הדגל --versions:

  - --versions
  - '20H2,ltsc2019'

אם בסביבת העבודה יש הרבה קבצים, כדאי להגדיר את כלי ה-build להעתקת סביבת העבודה דרך Cloud Storage ולא דרך WinRM, כדי שה-build של התמונה יהיה אמין יותר. יוצרים קטגוריה בפרויקט, למשל 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, אפשר לעיין במאמר בנושא מחיקת תמונות.

מחיקת הפרויקט

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

כדי למחוק את הפרויקט:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

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