בדף הזה מוסבר איך לפרוס אפליקציית Linux ללא מצב (stateless) באמצעות Google Kubernetes Engine (GKE). אפשר גם ללמוד איך פורסים אפליקציית Windows בלי שמירת מצב.
סקירה כללית
אפליקציות בלי שמירת מצב הן אפליקציות שלא שומרות נתונים או מצב אפליקציה באשכול או באחסון מתמיד. במקום זאת, הנתונים ומצב האפליקציה נשארים אצל הלקוח, מה שהופך אפליקציות בלי שמירת מצב לניתנות להרחבה יותר. לדוגמה, אפליקציית קצה קדמי היא בלי שמירת מצב: אתם פורסים כמה רפליקות כדי להגדיל את הזמינות שלה, ומצמצמים את מספר הרפליקות כשהביקוש נמוך. לרפליקות אין צורך בזהויות ייחודיות.
Kubernetes משתמש בבקר Deployment כדי לפרוס אפליקציות חסרות מצב כPods אחידים ולא ייחודיים. פריסות מנהלות את המצב הרצוי של האפליקציה: כמה Pods צריכים להריץ את האפליקציה, איזו גרסה של קובץ אימג' של קונטיינר צריכה לפעול, איך צריך לתייג את ה-Pods וכו'. אפשר לשנות את המצב הרצוי באופן דינמי באמצעות עדכונים של מפרט ה-Pod של הפריסה.
אפליקציות בלי שמירת מצב שונות מאפליקציות עם שמירת מצב, שמשתמשות באחסון מתמיד כדי לשמור נתונים ובStatefulSets כדי לפרוס Pods עם זהויות ייחודיות.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
מוודאים שהאפליקציה שמופעלת בקונטיינר מאוחסנת במאגר תמונות, כמו Artifact Registry.
אם אתם חדשים ב-GKE, כדאי להשלים את המדריך לתחילת העבודה, שבו תפעילו את GKE API ותלמדו איך המוצר פועל.
המבנה של פריסה
זוהי דוגמה לקובץ מניפסט פשוט של פריסה. הפריסה הזו יוצרת שלושה פודים משוכפלים עם התווית run=my-app שמריצים את התמונה hello-app שמאוחסנת ב-Artifact Registry:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
run: my-app
template:
metadata:
labels:
run: my-app
spec:
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
בדוגמה הזו:
-
.spec.replicas: הוא מספר ה-Pods המשוכפלים שהפריסה מנהלת. -
.spec.template.metadata.labels: התווית שניתנת לכל Pod, והפריסה משתמשת בה כדי לנהל את ה-Pods. -
.spec.template.spec: מפרט הפוד, שמגדיר איך כל פוד צריך לפעול. spec.containersכולל את שם הקונטיינר להרצה בכל Pod ואת קובץ האימג' של הקונטיינר שצריך להריץ.
מידע נוסף על מפרט הפריסה זמין במאמר בנושא הפניית API.
יצירת פריסה
כדי ליצור פריסה, משתמשים באחת מהשיטות הבאות:
- אפשר להשתמש בתכונת הפריסה בתפריט Workloads במסוף כדי ליצור פריסה פשוטה מקובץ אימג' של קונטיינר שאוחסן ב-Artifact Registry. Google Cloud
אפשר לכתוב מניפסט פריסה ולהריץ את הפקודה
kubectl applyכדי ליצור את המשאב.
kubectl apply
אפשר ליצור ולעדכן פריסות מקובצי מניפסט באופן הצהרתי באמצעות kubectl apply. בשיטה הזו, העדכונים שבוצעו במשאבים פעילים נשמרים בלי למזג את השינויים בחזרה לקובצי המניפסט.
כדי ליצור פריסה מקובץ המניפסט שלה, מריצים את הפקודה הבאה:
kubectl apply -f DEPLOYMENT_FILE
מחליפים את DEPLOYMENT_FILE בקובץ המניפסט, כמו config.yaml.
אפשר גם להשתמש ב-kubectl apply -f DIRECTORY/ כדי ליצור את כל האובייקטים (חוץ מאובייקטים קיימים) שמוגדרים בקובצי מניפסט שמאוחסנים בספרייה.
המסוף
כדי ליצור פריסה, מבצעים את השלבים הבאים:
נכנסים לדף Workloads במסוף Google Cloud .
לוחצים על add_box פריסה.
בקטע Specify container (ציון מאגר תגים), בוחרים באחת מהאפשרויות הבאות:
Existing container image (קובץ אימג' קיים של קונטיינר) כדי לבחור קובץ אימג' של קונטיינר שזמין מ-Artifact Registry או מ-DockerHub. בקטע Image path (נתיב התמונה), מזינים את הנתיב לקובץ אימג' של קונטיינר ואת הגרסה.
קובץ אימג' חדש של קונטיינר כדי להשתמש בקובץ אימג' שנוצר באמצעות Cloud Source Repositories ו-Cloud Build.
אפשר גם להגדיר את הפריסה באמצעות:
- משתני סביבה להעברה לקונטיינר.
- פקודות ראשוניות להתאמה אישית של נקודת הכניסה של מאגר התגים בזמן הריצה.
לוחצים על Done (סיום) ואז על Continue (המשך).
בקטע Configuration, נותנים לפריסה Application name ומציינים את Namespace של Kubernetes שבו רוצים לפרוס אותה.
אופציונלי: בקטע Labels, אפשר להוסיף Labels של Kubernetes לפריסה.
כדי לשמור את קובץ ה-YAML שיוצר את הפריסה הזו כדי לעדכן אותו בהמשך, לוחצים על הצגת קובץ ה-YAML. מעתיקים את ה-YAML ומדביקים אותו בקובץ, שומרים את הקובץ ולוחצים על סגירה בתיבת הדו-שיח פלט YAML.
בתפריט הנפתח Kubernetes Cluster, בוחרים את האשכול הרצוי.
לוחצים על פריסה.
בדיקת הפריסה
אחרי שיוצרים פריסה, אפשר להשתמש באחת מהשיטות הבאות כדי לבדוק אותה:
- אפשר להשתמש בתפריט Workloads
אפשר להשתמש ב-
kubectl describeוב-kubectl get
kubectl
כדי לקבל מידע מפורט על הפריסה, מריצים את הפקודה הבאה:
kubectl describe deployment DEPLOYMENT_NAME
מחליפים את DEPLOYMENT_NAME בשם הפריסה.
כדי להציג את רשימת ה-Pods שנוצרו על ידי ה-Deployment, מריצים את הפקודה הבאה:
kubectl get pods -l KEY=VALUE
בפקודה הזו, הדגל -l מורה ל-kubectl לאחזר את כל ה-Pods עם תווית של זוג מפתח/ערך. לדוגמה, אם תייגתם את הפריסה run: my-app,
תריצו את הפקודה kubectl get pods -l run=my-app כדי לראות את ה-Pods עם התווית הזו.
כדי לקבל מידע על Pod ספציפי:
kubectl describe pod POD_NAME
כדי להציג את המניפסט של פריסה, מריצים את הפקודה הבאה:
kubectl get deployments DEPLOYMENT_NAME -o yaml
הפקודה הזו מציגה את התצורה הפעילה של הפריסה בפורמט YAML.
המסוף
כדי לבדוק פריסה, פועלים לפי השלבים הבאים:
נכנסים לדף Workloads במסוף Google Cloud .
ברשימת עומסי העבודה, לוחצים על השם של הפריסה שרוצים לבדוק.
בדף Deployment details, מבצעים אחת מהפעולות הבאות:
- לוחצים על הכרטיסייה היסטוריית גרסאות כדי לראות את היסטוריית הגרסאות של הפריסה.
- לוחצים על הכרטיסייה אירועים כדי לראות את כל האירועים שקשורים לפריסה.
- לוחצים על הכרטיסייה Logs (יומנים) כדי לראות את יומני הפעילות של מאגר התגים בפריסה.
- לוחצים על הכרטיסייה YAML כדי לראות, להעתיק ולהוריד את מניפסט ה-YAML של הפריסה.
עדכון הפריסה
אפשר להפיץ עדכונים למפרט ה-Pod של פריסה, כמו התמונה, השימוש במשאבים או הבקשות למשאבים או ההגדרה.
אפשר לעדכן פריסה באחת מהדרכים הבאות:
- אפשר להשתמש בתפריט Rolling update ובכלי לעריכת YAML מתוך תפריט Workloads במסוףGoogle Cloud .
- אפשר לבצע שינויים בקובץ המניפסט ולהחיל אותם באמצעות
kubectl apply. - אפשר לעדכן את השדות
image,resourcesאוselectorבמפרט של ה-Pod באמצעותkubectl set. אפשר לעדכן פריסה ישירות מהמעטפת או בכלי עריכה מועדף באמצעות
kubectl edit.
kubectl apply
אפשר לעדכן את הפריסה על ידי החלה של קובץ מניפסט חדש או מעודכן. האפשרות הזו שימושית לביצוע שינויים שונים בפריסה, למשל שינוי גודל או ציון גרסה חדשה של האפליקציה.
כדי לעדכן פריסה, מריצים את הפקודה הבאה:
kubectl apply -f DEPLOYMENT_FILE
מחליפים את DEPLOYMENT_FILE בקובץ המניפסט המעודכן.
הפקודה kubectl apply מחילה קובץ מניפסט על משאב. אם המשאב שצוין לא קיים, הפקודה יוצרת אותו.
kubectl set
אפשר להשתמש ב-kubectl set כדי לשנות את התמונה, המשאבים (בקשות או מגבלות) או שדות הבחירה של פריסת Deployment.
כדי לשנות את האימג' של פריסה, מריצים את הפקודה הבאה:
kubectl set image deployment DEPLOYMENT_NAME IMAGE IMAGE:TAG
לדוגמה, כדי לעדכן פריסה מגרסה nginx 1.7.9 לגרסה 1.9.1, מריצים את הפקודה הבאה:
kubectl set image deployment nginx nginx=nginx:1.9.1
המסוף
כדי לגשת לתפריט עדכון הדרגתי של הפריסה:
נכנסים לדף Workloads במסוף Google Cloud .
ברשימת עומסי העבודה, לוחצים על השם של הפריסה שרוצים לשנות.
לוחצים על list פעולות > עדכון בהדרגה.
מגדירים את הפרמטרים האופציונליים הבאים לאסטרטגיית העדכון:
- מינימום שניות מוכנות: מציין את מספר השניות המינימלי שצריך לעבור עד ש-Pods שנוצרו לאחרונה יהיו מוכנים להיחשב כזמינים.
- Maximum surge: מציין את המספר המקסימלי של Pods שאפשר ליצור מעבר למספר הרצוי של Pods. הערך יכול להיות מספר מוחלט או אחוז.
- מקסימום לא זמין: מציין את המספר המקסימלי של פודים שיכולים להיות לא זמינים במהלך תהליך העדכון. הערך יכול להיות מספר מוחלט או אחוז.
בקטע Container images (קובצי אימג' של קונטיינרים), מזינים את נתיב האימג' ואת הגרסה של קובץ האימג' המעודכן של הקונטיינר.
לוחצים על עדכון.
חזרה לגרסה קודמת של עדכון
אפשר לבטל עדכון באמצעות kubectl rollout undo.
אפשר לחזור לגרסה הקודמת של עדכון שנמצא בתהליך או שהושלם:
kubectl rollout undo deployment my-deployment
אפשר גם לחזור לגרסה ספציפית:
kubectl rollout undo deployment my-deployment --to-revision=3
שינוי גודל הפריסה
אפשר לשנות את גודל הפריסה באופן ידני באמצעות מסוף Google Cloud או kubectl scale.
מידע נוסף על פריסות עם התאמה אוטומטית לעומס
kubectl
kubectl scale אפשר להשתמש בכל שלב כדי לשנות את גודל הפריסה.
כדי לשנות את קנה המידה של פריסה באופן ידני, מריצים את הפקודה הבאה:
kubectl scale deployment DEPLOYMENT_NAME --replicas NUMBER_OF_REPLICAS
מחליפים את NUMBER_OF_REPLICAS במספר הרצוי של רפליקות של ה-Pods.
המסוף
כדי לשנות את גודל הפריסה, מבצעים את השלבים הבאים:
נכנסים לדף Workloads במסוף Google Cloud .
ברשימת עומסי העבודה, לוחצים על השם של הפריסה שרוצים לשנות.
לוחצים על list פעולות > שינוי גודל > עריכת העותקים
מזינים את המספר החדש של עותקים לפריסה.
לוחצים על קנה מידה.
מחיקת פריסה
אפשר למחוק פריסה באמצעות מסוף Google Cloud או kubectl delete.
kubectl
כדי למחוק פריסה, מריצים את הפקודה הבאה:
kubectl delete deployment DEPLOYMENT_NAME
המסוף
כדי למחוק פריסה, פועלים לפי השלבים הבאים:
נכנסים לדף Workloads במסוף Google Cloud .
ברשימת עומסי העבודה, בוחרים פריסה אחת או יותר למחיקה.
לוחצים על delete מחיקה.
כשמופיעה בקשה לאישור, לוחצים על מחיקה.