קונטיינרים של תוכנה הם דרך נוחה להריץ את האפליקציות שלכם בכמה מופעים מבודדים של מרחב משתמש. אפשר להריץ קונטיינרים בתמונות ציבוריות של מכונות וירטואליות ב-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 שמותקנות מראש. משפחות התמונות הציבוריות הבאות מיועדות להרצת קונטיינרים:
- מערכת הפעלה שמותאמת לקונטיינרים של Google
- כולל: Docker, Kubernetes
- פרויקט תמונות:
cos-cloud - סדרת תמונות:
cos-stable
- Fedora CoreOS
- כולל: Podman, Docker
- פרויקט תמונות:
fedora-coreos-cloud - סדרת תמונות:
fedora-coreos-stable
- Ubuntu
- כולל: LXD
- פרויקט תמונות:
ubuntu-os-cloud - סדרת תמונות:
ubuntu-2004-lts
אם אתם צריכים להריץ כלים וטכנולוגיות ספציפיים של קונטיינרים על קובצי אימג' שלא כוללים אותם כברירת מחדל, אתם יכולים להתקין את הטכנולוגיות האלה באופן ידני.
התקנת טכנולוגיות של קונטיינרים במופעים
כדי להפעיל קונטיינר יחיד במכונה, אתם יכולים לציין קובץ אימג' של קונטיינר כשאתם יוצרים מכונה. Compute Engine מספק באופן אוטומטי קובץ אימג' של מערכת ההפעלה שמותאמת לקונטיינרים עדכני עם Docker מותקן, ומפעיל את הקונטיינר כשה-VM מופעל. מידע נוסף זמין במאמר פריסת קונטיינרים במכונות וירטואליות .
לחלופין, אתם יכולים להריץ את עומסי העבודה של הקונטיינרים ב-Compute Engine באמצעות כל טכנולוגיות הקונטיינרים וכלי התזמור שאתם צריכים. אפשר ליצור מכונה מתמונת VM ציבורית ואז להתקין את טכנולוגיות הקונטיינרים הרצויות. לדוגמה:
- להתקין את Docker במכונות של Compute Engine כדי שתוכלו להריץ את קובצי האימג' של קונטיינרים של Docker במכונות האלה.
- מתקינים את Podman במכונות של Compute Engine כחלופה לזמן הריצה של קונטיינר Docker.
- מתקינים את Kubernetes במכונות כדי לספק תזמור קונטיינרים גם לקונטיינרים של Docker וגם לקונטיינרים של Open Container Initiative (OCI).
במקרים מסוימים, יכול להיות שתצטרכו גרסאות ספציפיות של הטכנולוגיות האלה כדי לוודא שהן פועלות יחד בצורה תקינה. לדוגמה, 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 בשלב הזה.
המאמרים הבאים
- יוצרים מכונה ומפעילים אותה כדי להריץ אפליקציות של קונטיינרים.
- מידע על מכונות Compute Engine
- מידע נוסף על Google Kubernetes Engine, שמאפשר להריץ קונטיינרים ב- Google Cloud בלי לנהל בעצמכם מכונות של Compute Engine.
- מידע נוסף על Kubernetes
- איך משתמשים ב-Artifact Registry כדי לאחסן באופן פרטי את קובצי האימג' של הקונטיינרים ב- Google Cloud.