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

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

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

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

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

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

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

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

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

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

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

קובצי אימג' של מכונות וירטואליות שמותאמים לקונטיינרים

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

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

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

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

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

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

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