בדף הזה מוסברות הדרישות לאיזון עומסים כשמשתמשים באיזון עומסים ידני. בניגוד לאיזון עומסים בחבילה, שבו Google Distributed Cloud פורס מאזני עומסים לצמתי אשכולות עבור מישור הבקרה ותעבורת מישור הנתונים, באיזון עומסים ידני אתם מגדירים פתרונות משלכם לאיזון עומסים עבור מישור הבקרה ותעבורת מישור הנתונים.
צריך להגדיר מאזן עומסים חיצוני למישור הבקרה לפני שיוצרים אשכול Bare Metal. אפשר להשתמש במאזן העומסים של מישור הבקרה החיצוני גם לתנועה במישור הנתונים, או להגדיר מאזן עומסים נפרד למישור הנתונים. לדוגמה, אפשר להשתמש במאזן עומסים בתוך האשכול כמו MetalLB לתנועת נתונים.
בנוסף להסבר על הדרישות לאיזון עומסים, בדף הזה מוסבר איך להגדיר איזון עומסים ידני באמצעות F5 BIG-IP.
דרישות מוקדמות
בקטעים הבאים מתוארים התנאים המוקדמים להגדרת איזון עומסים ידני.
כתובת IP נדרשת
צריך לתכנן את כתובות ה-VIP לפני שיוצרים אשכול. לכל האשכולות צריך להיות VIP למישור הבקרה. לכל אשכולות המשתמשים צריך להיות כתובת VIP שנייה לשירות ה-Ingress.
כתובות IP וירטואליות אלה יכולות להיות בכל תת-רשת של IPv4 שניתן לנתב ממאזן העומסים. צריך שתהיה אפשרות להגיע ל-VIP של מישור הבקרה מכל הצמתים באשכול ומעמדת העבודה של האדמין שבה מריצים את bmctl.
כשיוצרים את האשכול, שירות ה-ingress נפרס באמצעות כתובת ה-VIP שצוינה בקובץ התצורה של האשכול. אפשר להגדיר איזון עומסים לכתובת ה-IP הזו אחרי יצירת האשכול.
אתם צריכים לדעת את כתובות ה-IP שתשתמשו בהן עבור הצמתים שישמשו כצמתים של מישור הבקרה.
דרישות למאזן עומסים חיצוני של מישור הבקרה
צריך להגדיר את מאזן העומסים של מישור הבקרה לפני שיוצרים את האשכול. מאזן העומסים של מישור הבקרה צריך לעמוד בדרישות הבאות:
- שירות וירטואלי (frontend) ל-VIP של מישור הבקרה. יציאת ההאזנה שמוגדרת כברירת מחדל במישור הבקרה היא 443. אבל אם מציינים יציאה אחרת, השדה
loadBalancer.ports.controlPlaneLBPortבקובץ התצורה של האשכול משתמש ביציאה הזו בשביל השירות הווירטואלי. - קבוצת קצה עורפי שמכילה את כל כתובות ה-IP של צמתי מישור הבקרה של האשכול. יציאת ה-backend שמישור הבקרה מאזין לה היא 6444.
- בדיקת תקינות שמנטרת את צמתי ה-Backend. בבדיקת התקינות צריך להשתמש ב-HTTPS ולבדוק את נקודת הקצה
/readyzביציאה 6444. בבדיקת התקינות צריך לוודא שנקודת הקצה הזו מחזירה את קוד הסטטוס 200 כדי שהצומת ייחשב תקין.
אם מאזן העומסים החיצוני לא מוגדר בצורה נכונה, סביר להניח שהאתחול של האשכול ייכשל. בדיקת Preflight מאמתת שמאזן העומסים החיצוני מוגדר בצורה נכונה, כולל אימות של בדיקת תקינות של נקודת הקצה /readyz על ידי מאזן העומסים.
איפוס חיבורים לצמתים שנכשלו (מומלץ)
בנוסף לדרישות הקודמות, מומלץ להגדיר את איזון העומסים כך שיאפס את חיבורי הלקוח כשהוא מזהה כשל בצומת קצה עורפי. בלי ההגדרה הזו, לקוחות של שרת Kubernetes API יכולים להפסיק להגיב למשך כמה דקות כשמופעלת ירידה של מופע שרת, מה שעלול לגרום לחוסר יציבות במישור הבקרה של Kubernetes.
- ב-F5 BIG-IP, ההגדרה הזו נקראת Action On Service Down בדף ההגדרות של מאגר השרתים העורפיים.
- ב-HAProxy, ההגדרה הזו נקראת on-marked-down shutdown-sessions בהגדרות של שרת הקצה העורפי.
- אם אתם משתמשים במאזן עומסים אחר, כדאי לעיין במסמכים כדי למצוא את ההגדרה המקבילה.
הגדרת האשכול
לפני שיוצרים אשכול Google Distributed Cloud, יוצרים קובץ תצורה של האשכול באמצעות bmctl. עורכים את הקובץ הזה כדי להפעיל איזון עומסים ידני באשכול:
- מגדירים את השדה
loadBalancer.modeלערךmanual. - מגדירים את השדה
loadBalancer.vips.controlPlaneVIPלכתובת ה-VIP שהגדרתם במאזן העומסים. - מסירים את הקטע
loadBalancer.addressPoolsאו הופכים אותו לתגובה.
אחרי שמסיימים לערוך את קובץ התצורה, כולל שדות שלא קשורים לאיזון עומסים, צריך להריץ את בדיקות ההכנה כדי לוודא שכתובת ה-VIP של מישור הבקרה מוגדרת בצורה נכונה במאזן העומסים:
bmctl check preflight -c CLUSTER_NAME
מחליפים את CLUSTER_NAME בשם האשכול.
תמיכה בשירותי LoadBalancer באשכולות משתמשים
צריך להגדיר איזון עומסים כדי לתמוך בשירותי LoadBalancer של Kubernetes. במצב ידני של איזון עומסים, Google Distributed Cloud לא מקצה באופן אוטומטי מאזני עומסים, ולכן שירותי LoadBalancer לא פועלים אלא אם מקצים ומגדירים מאזני עומסים שיפנו לשירותים.
בנוסף, Google Distributed Cloud פורס באופן אוטומטי שירות Ingress בכל אשכולות המשתמשים באמצעות שירות LoadBalancer. כדי שהשירות LoadBalancer יהיה נגיש מבחוץ, צריך להגדיר מאזן עומסים שיפנה לשירות.
האפשרויות לתמיכה בשירותי LoadBalancer כוללות:
- מגדירים ידנית את מאזן העומסים לכל שירות LoadBalancer באשכול. דוגמה לשימוש ב-F5 BIG-IP מופיעה במאמר הגדרת תמיכה בשירותי LoadBalancer.
- מתקינים באשכול בקר של מאזן עומסים שמגדיר את מאזן העומסים החיצוני כשיוצרים שירותים של LoadBalancer.
- מתקינים פתרון לאיזון עומסים בתוך האשכול, כמו MetalLB.
איזון עומסים ידני באמצעות F5 BIG-IP
בקטע הזה מוסבר איך להגדיר איזון עומסים ידני באמצעות F5 BIG-IP כמאזן העומסים החיצוני. אם אתם משתמשים במאזן עומסים אחר, תוכלו להיעזר במסמכים של מאזן העומסים הזה ולהשתמש בשלבים האלה כמודל.
הגדרת מאזן העומסים של מישור הבקרה
צריך להגדיר את איזון העומסים של מישור הבקרה לפני שיוצרים אשכול. אחרי שמבצעים את השלבים האלה, אפשר להגדיר את האשכול וליצור אותו.
יצירת מחיצה לאשכול
לכל אשכול צריכה להיות מחיצה משלו. משתמשים בכלי ההגדרה של BIG-IP כדי ליצור מחיצה:
- עוברים אל מערכת > משתמשים > רשימת מחיצות.
- לוחצים על יצירה.
- מזינים שם למחיצה.
- לוחצים על סיום.
בשלבים הבאים יוצרים אובייקטים במחיצה הזו. חשוב לוודא שהמחיצה הזו נבחרה בתפריט הנפתח בפינה השמאלית העליונה של ממשק המשתמש בכל אחת מהמשימות הבאות, כדי שכל אובייקט ייווצר במחיצה הזו.
יצירת מעקב
יוצרים monitor כדי לבצע בדיקות תקינות בצמתי מישור הבקרה:
- עוברים אל תנועה מקומית > אמצעי בקרה.
- לוחצים על יצירה.
- מזינים שם לניטור (לדוגמה, https_readyz).
- מגדירים את הסוג ל-HTTPS.
- בשדה מחרוזת לשליחה, מזינים
GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close. - בשדה מחרוזת קבלה, מזינים
HTTP/1.1 200. - לוחצים על סיום.
יצירת צמתים
יוצרים צומת שמצביע על הצמתים של מישור הבקרה. אם באשכול שלכם יש רמת בקרה של זמינות גבוהה (HA) עם כמה צמתים של רמת הבקרה, צריך ליצור אובייקט צומת לכל צומת של רמת הבקרה.
- עוברים אל תנועה מקומית > צמתים > רשימת צמתים.
- לוחצים על יצירה.
- מזינים שם לצומת.
- מזינים את כתובת ה-IP של הצומת בשדה 'כתובת'.
- לוחצים על סיום.
יצירת מאגר עורפי
יוצרים מאגר לצמתי מישור הבקרה:
- עוברים אל תנועה מקומית > מאגרי כתובות > רשימת מאגרי כתובות.
- לוחצים על יצירה.
- בתפריט הנפתח הגדרות, בוחרים באפשרות מתקדמות.
- מזינים שם למאגר.
- בוחרים את הכלי למעקב אחרי תקינות המערכת שיצרתם קודם.
- מגדירים את Action On Service Down (פעולה במקרה של השבתת שירות) לערך Reject (דחייה) (מידע נוסף על ההגדרה הזו מופיע בקטע איפוס חיבורים לצמתים שנכשלו).
- מוסיפים את הצומת של מישור הבקרה למאגר. אם באשכול יש כמה צמתים של מישור הבקרה, צריך לחזור על השלבים האלה לכל צומת:
- בקטע New Members (חברים חדשים), לוחצים על Node List (רשימת צמתים) ואז בוחרים את צומת מישור הבקרה שנוצר קודם.
- בשדה יציאת שירות מזינים 6444.
- לוחצים על הוספה.
יצירת שרת וירטואלי
יוצרים שרת וירטואלי למישור הבקרה:
- עוברים אל Local Traffic > Virtual Servers > Virtual Server List (תנועה מקומית > שרתים וירטואליים > רשימת שרתים וירטואליים).
- לוחצים על יצירה.
- מזינים שם לשרת הווירטואלי.
- מגדירים את Type (סוג) לערך Standard (רגיל).
- מזינים 0.0.0.0/0 בשדה כתובת מקור כדי לאפשר תנועה מכל מקור.
- מזינים את ה-VIP של מישור הבקרה ככתובת היעד.
- מזינים את יציאת מישור הבקרה בשדה יציאת השירות. ברירת המחדל היא 443, אבל אפשר להגדיר ערך אחר שצריך להיות זהה לערך שמוגדר בהגדרות האשכול עבור
loadBalancer.ports.controlPlaneLBPort. - בשדה Source Address Translation, בוחרים באפשרות Auto Map.
- בתפריט הנפתח Default Pool, בוחרים את המאגר שיצרתם קודם.
- לוחצים על סיום.
הגדרת תמיכה בשירותי LoadBalancer
במצב איזון עומסים ידני, Google Distributed Cloud לא מקצה באופן אוטומטי מאזני עומסים כדי לתמוך בשירותי LoadBalancer. מידע נוסף זמין במאמר תמיכה בשירותי LoadBalancer באשכולות משתמשים.
בקטע הזה מוסבר איך להגדיר באופן ידני מאזן עומסים של F5 BIG-IP לשירות LoadBalancer. חוזרים על השלבים האלה לכל שירות LoadBalancer שרוצים לחשוף.
דרישות מוקדמות
כדי להגדיר שירות LoadBalancer, צריך לדעת את כתובת ה-VIP שרוצים לחשוף דרך מאזן העומסים, את היציאה שרוצים לחשוף ואת NodePort ששירות LoadBalancer ב-Kubernetes משתמש בו.
אחרי שפורסים שירות LoadBalancer באשכול, צריך לקבוע את NodePort שמשמש לשירות LoadBalancer. הפקודה הבאה תציג את הפורטים של השירות:
kubectl --kubeconfig KUBECONFIG get service SERVICE_NAME -oyaml
מחליפים את מה שכתוב בשדות הבאים:
-
KUBECONFIGמחליפים בנתיב של קובץ ה-kubeconfig שבו רוצים להשתמש. -
SERVICE_NAMEבשם של שירות LoadBalancer.
הפלט של kubctl get service כולל את הקטע ports. כל רשומה של יציאה מציגה את nodePort שנחשף עבור היציאה בשירות, וזהו nodePort שאליו מגדירים את קצה העורף של מאזן העומסים. בדוגמה הבאה של פלט אפשר לראות את המבנה של הקטע ports:
spec:
clusterIP: 172.26.232.107
externalTrafficPolicy: Cluster
loadBalancerIP: 21.0.101.77
ports:
- name: status-port
nodePort: 30281
port: 15021
protocol: TCP
targetPort: 15021
- name: http
nodePort: 30124
port: 80
protocol: TCP
targetPort: 80
- name: https
nodePort: 31858
port: 443
protocol: TCP
targetPort: 443
יש יציאות לתנועת HTTP ו-HTTPS. אפשר לחשוף את אחת מהיציאות האלה או את שתיהן דרך איזון העומסים.
אם אתם חושפים את שירות הכניסה שמופעל אוטומטית בכל האשכולות, שירות איזון העומסים נקרא istio-ingress והוא במרחב השמות gke-system. כדי למצוא את היציאות שלו, מריצים את הפקודה הבאה:
kubectl --kubeconfig KUBECONFIG -n gke-system get service istio-ingress -oyaml
שירות ה-ingress מוגדר עם loadBalancerIP, שהיא כתובת ה-IP שסופקה בשדה loadBalancer.vips.ingressVIP בהגדרת האשכול הראשונית. צריך לחשוף את כתובת ה-VIP הזו כדי לחשוף את שירות ה-Ingress במאזן העומסים החיצוני.
יצירת מאגר עורפי
- עוברים אל Local Traffic > Pools > Pool List.
- לוחצים על יצירה.
- מזינים שם למאגר.
- בוחרים באפשרות tcp ככלי לניטור תקינות.
- מוסיפים צמתי עובדים למאגר הצמתים. חוזרים על השלבים האלה לכל צומת. אפשר להוסיף רמות בקרה וצמתי עובדים, כי אפשר לגשת ל-NodePort של Kubernetes בכל צומת באשכול.
- בקטע חברים חדשים, לוחצים על רשימת צמתים ואז בוחרים אחד מהצמתים שנוצרו קודם.
- בשדה יציאת שירות, מזינים את ערך NodePort של השירות.
- לוחצים על הוספה.
יצירת שרת וירטואלי
- עוברים אל Local Traffic > Virtual Servers > Virtual Server List (תנועה מקומית > שרתים וירטואליים > רשימת שרתים וירטואליים).
- לוחצים על יצירה.
- מזינים שם לשרת הווירטואלי.
- מגדירים את Type (סוג) לערך Standard (רגיל).
- מזינים 0.0.0.0/0 בשדה כתובת מקור כדי לאפשר תנועה מכל מקור.
- מזינים את כתובת ה-VIP של שירות מאזן העומסים בשדה כתובת היעד.
- מזינים את היציאה שנחשפת לשירות מאזן העומסים בתור יציאת השירות.
- בשדה Source Address Translation, בוחרים באפשרות Auto Map.
- בתפריט הנפתח Default Pool, בוחרים את המאגר שיצרתם קודם.
- לוחצים על סיום.