קונטיינרים ב-Compute Engine

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

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

הרצת קונטיינרים ב-Compute Engine כשצריך שליטה מלאה בסביבת הקונטיינרים ובכלי תזמור הקונטיינרים.

לחלופין, אתם יכולים להשתמש ב-Google Kubernetes Engine‏ (GKE) כדי לפשט את משימות הניהול של האשכולות ותזמור הקונטיינרים, כך שלא תצטרכו לנהל את המכונות הווירטואליות הבסיסיות. ‫GKE מספק סביבה מנוהלת לפריסה, לניהול ולהתאמה לעומס (scaling) של אפליקציות בקונטיינרים באמצעות התשתית של Google.

סביבת GKE מורכבת ממספר מכונות (באופן ספציפי, מכונות של Compute Engine) שמקובצות יחד כדי ליצור אשכול. כשמריצים אשכול GKE, נהנים מיתרונות של תכונות מתקדמות לניהול אשכולות, כמו איזון עומסים, מאגרי צמתים, תיקון אוטומטי של צמתים, התאמה אוטומטית לעומס ושדרוגים, ורישום ביומן ומעקב Google Cloud שמסופקים על ידי GKE.

איך יוצרים אשכול GKE עם מאגרי צמתים שמריצים את Microsoft Windows Server

נסו בעצמכם

אנחנו ממליצים למשתמשים חדשים ב-Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של Compute Engine בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300 $להרצה, לבדיקה ולפריסה של עומסי העבודה.

אני רוצה לנסות את Compute Engine בחינם

טכנולוגיות קונטיינרים שפועלות ב-Compute Engine

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

  • ‫Docker ו-Podman הן שתי טכנולוגיות פופולריות של קונטיינרים שמאפשרות להריץ אפליקציות בקונטיינרים.
  • ‫Kubernetes היא פלטפורמה לתזמור קונטיינרים, שמאפשרת לנהל ולהתאים את קנה המידה של הקונטיינרים שפועלים בכמה מכונות או בסביבת ענן היברידי.
  • קונטיינרים ב-Compute Engine מספקים דרך קלה לפריסת קונטיינרים במכונות וירטואליות ב-Compute Engine או בקבוצות של מופעי מכונה מנוהלים.
  • אתם יכולים להמיר את המערכות הקיימות לתמונות LXD ולהריץ אותן במכונות וירטואליות של Compute Engine כדי לקבל פתרון למיגרציה מסוג שיטת Lift-and-shift (העברה בלי שינויים). ‫LXD פועל על תמונות של Ubuntu.

בנוסף, אפשר להשתמש ב-Artifact Registry כדי לנהל גרסאות של קובצי אימג' של קונטיינרים. ‫Artifact Registry משמש כמיקום מרכזי לאחסון ולניהול של קובצי אימג' של קונטיינרים לפני שפורסים את קובצי האימג' האלה ב-Kubernetes ב-Compute Engine או באשכולות של Google Kubernetes Engine.

תמונות של מכונות וירטואליות שמותאמות לקונטיינרים

ב-Compute Engine יש כמה תמונות VM ציבוריות שאפשר להשתמש בהן כדי ליצור מכונות ולהריץ את עומסי העבודה של הקונטיינרים. בחלק מהתמונות הציבוריות של המכונות הווירטואליות יש מערכת הפעלה מינימליסטית שמותאמת לקונטיינרים, שכוללת גרסאות חדשות יותר של Docker, ‏ Podman או Kubernetes שמותקנות מראש. משפחות התמונות הציבוריות הבאות מיועדות להרצת קונטיינרים:

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

התקנת טכנולוגיות של קונטיינרים במופעים

כדי להפעיל קונטיינר יחיד במכונה, אתם יכולים לציין קובץ אימג' של קונטיינר כשאתם יוצרים מכונה. Compute Engine מספק באופן אוטומטי קובץ אימג' של מערכת ההפעלה שמותאמת לקונטיינרים עדכני עם Docker מותקן, ומפעיל את הקונטיינר כשה-VM מופעל. מידע נוסף זמין במאמר פריסת קונטיינרים במכונות וירטואליות .

לחלופין, אתם יכולים להריץ את עומסי העבודה של הקונטיינרים ב-Compute Engine באמצעות כל טכנולוגיות הקונטיינרים וכלי התזמור שאתם צריכים. אפשר ליצור מכונה מתמונת VM ציבורית ואז להתקין את טכנולוגיות הקונטיינרים הרצויות. לדוגמה:

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

התקנת Docker בתמונות של Windows Server

גרסה Windows Server 2016 וגרסאות מאוחרות יותר כוללות תמיכה ב-container. אם אתם מתכננים להריץ קונטיינרים של Docker במכונה של Windows Server, אתם יכולים להתקין את Docker בתמונת בסיס של Windows Server או להשתמש בתמונות של Marketplace מ-Mirantis.

אם רוצים להתקין את Docker CE בתמונת הבסיס של Windows Server, צריך לפעול לפי השלבים שמפורטים בהמשך.

יוצרים מכונה של Windows Server באמצעות תמונה ציבורית של Windows Server 2019 או גרסה חדשה יותר. כדי לקבל את התמיכה הטובה ביותר במאגרי תגים, מומלץ להשתמש בגרסת LTSC העדכנית ביותר של Windows Server. מידע נוסף על LTSC זמין במאמר בנושא ערוצי שירות של Windows Server.

התקנת Docker

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

שלבי הגדרה נוספים

בשלב הזה אפשר להשתמש ב-Docker כדי להריץ קונטיינרים במופע. לדוגמה, הפקודה הבאה מורידה את קובץ האימג' של קונטיינר Windows‏ nanoserver ומריצה שורת פקודה בתוך קונטיינר nanoserver:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

ערך ברירת המחדל של MTU ברשת של Docker הוא 1,500 בייט. אם הגדרתם את ה-MTU של רשת ה-VPC ל-1,500 בייטים, אתם יכולים להתעלם משאר החלק הזה. עם זאת, אם אתם משתמשים ב-MTU של VPC שמוגדר כברירת מחדל של 1,460 בייטים ברשת, תצטרכו לבצע הגדרות נוספות בכל מכונה.

מגדירים את ה-MTU לכל ממשקי הרשת (גם Ethernet וגם vEthernet) לערך 1460 על ידי הרצת הפקודות הבאות בטרמינל PowerShell בכל מכונה:

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1     306804     668688  Ethernet
  1460                1          0       1282  vEthernet (nat)

גם אחרי שינוי ה-MTU של המופע, יכול להיות שהקישוריות מהקונטיינרים לאינטרנט לא תהיה יציבה, כי כברירת מחדל, ממשק הרשת של הקונטיינר משתמש גם הוא ב-MTU של 1500. בקטע container MTU מפורטות פקודות להגדרת MTU נכון לכל מאגר.

יכול להיות שתצטרכו להריץ מחדש את פקודות ה-MTU האלה מדי פעם כשאתם מגדירים את הרשת של Docker. פרטים נוספים מופיעים בקטע בעיות מוכרות.

הפעלת קונטיינרים של Windows

יש הרבה מקורות מידע שיעזרו לכם להתחיל לעבוד עם קונטיינרים של Windows:

  • מיקרוסופט מספקת תיעוד מקיף בנושא קונטיינרים של Windows.
  • אפשר להשתמש ב-Docker Hub כמאגר לאחסון ולשליפה של קונטיינרים של Windows.

בעיות מוכרות במאגרי Windows

הוצאה משימוש של Windows Server 2019 לקובצי אימג' של קונטיינרים

‫Google הציעה משפחה של תמונות Windows Server עם Mirantis Container Runtime (לשעבר Docker EE) שהותקן מראש:

  • ‫Windows
    • כולל: Docker
    • פרויקט תמונות: windows-cloud
    • סדרת תמונות: windows-2019-core-for-containers

בתחילת 2023, מיקרוסופט הפסיקה להפיץ את Mirantis Container Runtime ל-Windows Server ולתמוך בו. ‫Google יכלה להמשיך לפרסם את סדרת התמונות הזו עד 30 באוקטובר 2023, אבל עכשיו סדרת התמונות הזו הוצאה משימוש וכל התמונות בסדרה סומנו כלא רלוונטיות.

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

תמונות בהתאמה אישית שנוצרו מהתמונות האלה לפני 30 באוקטובר 2023 ימשיכו לפעול. עם זאת, תמונות בהתאמה אישית לא יקבלו באופן אוטומטי עדכונים של Windows Patch Tuesday, וגם לא יקבלו גרסאות מעודכנות של Mirantis Container Runtime.

אם אתם רוצים להמשיך להשתמש בתמונות עם Mirantis Container Runtime שהותקן מראש, Mirantis Inc מציעה תמונות ב-Google Cloud Marketplace. העלות של תמונות ה-VM האלה כוללת תמיכה ורישוי של Mirantis Container Runtime ישירות מ-Mirantis. לקוחות שמעוניינים להשתמש ב-Mirantis Container Runtime עצמאי יכולים גם להוריד אותו ישירות מהאתר של Mirantis.

אם רוצים לעבור לזמן ריצה חלופי של מאגר כמו Docker CE, צריך לפעול לפי ההוראות למעלה.

קונטיינרים לא תואמים בין גרסאות שונות של Windows

קונטיינרים שנבנו בגרסאות קודמות של Windows לא פועלים במכונות וירטואליות של Compute Engine שמריצות גרסאות עדכניות יותר של Windows. כברירת מחדל, Docker שולף את גרסת Windows Server 2019 של מאגר. כלומר, אם מריצים את הפקודה הבאה במופע שבו פועל Windows Server בגרסה 1709 ומעלה, מתקבלת שגיאה:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver cmd.exe
docker: Error response from daemon: container
9a1eb8bbcba4e91792be65f3c40b5a1aee062f02fbc60a78444b47d043438069 encountered an
error during CreateContainer: failure in a Windows system call: The operating
system of the container does not match the operating system of the host.
(0xc0370101)

מידע נוסף זמין בדף תאימות גרסאות של קונטיינרים של Windows של מיקרוסופט. כדי לעקוף את חוסר התאימות של גרסת הקונטיינר של Windows, צריך לציין את התג שתואם לגרסת Windows כשמפעילים קונטיינרים. לדוגמה, במופע של Windows Server, גרסה 20H2, משתמשים בפקודה הבאה כדי להריץ שורת פקודה במאגר nanoserver של גרסה 20H2 במקום במאגר ברירת המחדל 2019 LTSC ‏ (1809):

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

חוסר תאימות של MTU משפיע על הקישוריות של מכונות וקונטיינרים

כשיוצרים רשת קונטיינרים במכונת Windows באמצעות הפקודות docker network create או New-VMSwitch, ערך ה-MTU של ממשק הרשת של המכונה מוגדר בדרך כלל ל-1500. גם ממשק הרשת שמוגדר כברירת מחדל בתוך מאגר Docker חדש משתמש בדרך כלל ב-MTU של 1500. אם לרשת ה-VPC יש MTU של 1460, יכול להיות שתיתקלו בבעיות הבאות:

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

  • יכול להיות שפענוח ה-DNS בתוך הקונטיינר ייכשל.

  • פענוח ה-DNS הושלם, אבל יכול להיות שהקמת חיבור HTTP מהקונטיינר לאינטרנט תיכשל.

הפתרון המומלץ למגבלות האלה כולל שני שלבים: הגדרת ה-MTU לממשקי הרשת של המופע לערך 1460 והגדרת ה-MTU לממשקי הרשת של הקונטיינר לערך 1460. לחלופין, אפשר להגדיר את ה-MTU של ה-VPC ל-1500, אבל בשביל זה צריך לעצור או להעביר את כל המכונות הווירטואליות.

1. הגדרת MTU לממשקי הרשת של מופע Windows

מריצים את הפקודה הבאה במסוף PowerShell במכונת Windows כדי להגדיר את ה-MTU לכל ממשקי הרשת (גם Ethernet וגם vEthernet):

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

כדי לוודא שערכי ה-MTU של ממשק האתרנט וה-vEthernet של המכונה מוגדרים ל-1460, משתמשים בפקודה הבאה:

PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1  628295912    2613170  Ethernet
  1460                1      37793     223909  vEthernet (nat)

אם אתם לא מצליחים להריץ את הפקודות האלה כי אתם לא יכולים יותר להתחבר למכונה באמצעות RDP, אתם יכולים להתחבר למכונה דרך המסוף הטורי, להפעיל את שורת הפקודה cmd ולהריץ שם את הפקודות netsh כדי לתקן את ה-MTU. כדי להימנע מכך, מומלץ להריץ פקודות של docker network ... או New-VMSwitch כחלק מסקריפט שמריץ גם את פקודת התיקון של MTU.

2. הגדרת ה-MTU לממשקי הרשת של קונטיינר Windows

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

PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

אפשר גם להריץ את הפקודה הזו במכונה של Windows כדי להגדיר את ה-MTU לכל הקונטיינרים שפועלים:

PS C:\> Get-NetIPInterface -IncludeAllCompartments |
  Where-Object InterfaceAlias -like "vEthernet*" |
  Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460

הפעלת מאגרי Hyper-V נכשלת

מאגרי תגים של Hyper-V לא נתמכים ב-Compute Engine בשלב הזה.

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