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

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

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

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

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

סביבת GKE מורכבת ממספר מכונות (במיוחד, מכונות Compute Engine) שמקובצות יחד ויוצרות אשכול. כשמריצים אשכול GKE, נהנים מתכונות מתקדמות לניהול אשכולות, כמו איזון עומסים, מאגרי צמתים, תיקון אוטומטי של צמתים, התאמה אוטומטית לעומס ושדרוגים, ורישום ביומן ומעקב ש Cloud de Confiance מסופקים על ידי 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 ציבוריות שבהן אפשר להשתמש כדי ליצור מכונות ולהריץ את עומסי העבודה של הקונטיינרים. חלק מתמונות המכונות הווירטואליות הציבוריות האלה כוללות מערכת הפעלה מינימליסטית שעברה אופטימיזציה לקונטיינרים, שכוללת גרסאות חדשות יותר של Docker, ‏ Podman או Kubernetes שהותקנו מראש. משפחות התמונות הציבוריות הבאות מיועדות להרצת קונטיינרים:

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

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

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

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

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

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

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

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

מתחילים ביצירת מכונה של Windows Server באמצעות קובץ אימג' ציבורי של Windows Server 2019 ואילך. כדי לקבל את התמיכה הטובה ביותר ב-containers, מומלץ להשתמש בגרסת 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 ל-1460 בכל ממשקי הרשת (גם Ethernet וגם vEthernet) על ידי הרצת הפקודות הבאות בטרמינל 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

הוצאה משימוש של 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 בשלב זה.

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