במאמר הזה מוסבר איך לבצע מיגרציה ממאזן העומסים Seesaw אל מאזן העומסים MetalLB בגרסאות 1.16 עד 1.29. אם האשכולות שלכם הם בגרסה 1.30 ומעלה, מומלץ לפעול לפי ההוראות במאמר תכנון העברת אשכול לתכונות מומלצות.
יש כמה יתרונות לשימוש ב-MetalLB בהשוואה לאפשרויות אחרות לאיזון עומסים.
1.28 ו-1.29: GA
1.16: גרסת טרום-השקה (Preview)
כדי לבדוק את externalTrafficPolicy, מריצים את הפקודה הבאה:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get svc -A -o yaml | grep "externalTrafficPolicy: Local"
לקבלת עזרה בפתרון הבעיה הזו, אפשר לפנות לתמיכה של Google.
הערות לגבי משך השבתה
יש השבתה של עומס העבודה במהלך ההעברה. ההערות הבאות רלוונטיות רק לאשכולות אדמין ללא זמינות גבוהה (non-HA), כי מאזן העומסים SeeSaw לא תומך באשכולות אדמין עם זמינות גבוהה.
כשמעבירים אשכול אדמין:
יש השבתה של מישור הבקרה באשכולות משתמשים של kubeception בזמן ההעברה של
controlPlaneVIP. זמן ההשבתה צריך להיות פחות מ-10 דקות, אבל משך ההשבתה תלוי בתשתית שלכם.יש זמן השבתה למישור הבקרה של אשכול האדמין, כי צריך ליצור מחדש את צומת האדמין הראשי עם
controlPlaneVIPשמצורף ישירות למכונה הווירטואלית. זמן ההשבתה אמור להיות פחות מ-20 דקות, אבל משך ההשבתה תלוי בתשתית שלכם.
כשמעבירים אשכול משתמשים, יש הפסקה זמנית בשירות של כתובות ה-IP הווירטואליות אחרי שמאזן העומסים של Seesaw מושבת ולפני שרכיבי ה-Pod של MetalLB מופעלים. התהליך הזה נמשך בדרך כלל כדקה.
העברה של אשכול משתמשים
צריך לבחור מאגר צמתים ולהפעיל אותו לשימוש עם MetalLB. MetalLB ייפרס בצמתים במאגר הצמתים הזה.
בקובץ ההגדרה של אשכול המשתמשים, בוחרים מאגר צמתים ומגדירים את
enableLoadBalancer ל-true:
nodePools: - name: pool-1 replicas: 3 enableLoadBalancer: true
מעדכנים את האשכול:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
מחליפים את מה שכתוב בשדות הבאים:
ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין
USER_CLUSTER_CONFIG: הנתיב של קובץ התצורה של אשכול המשתמשים
לאחר מכן, מסירים את הקטעים של Seesaw מהקובץ ומוסיפים קטע של MetalLB.
ואז מעדכנים שוב את האשכול:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
מוודאים שרכיבי MetalLB פועלים בצורה תקינה:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pods \
--namespace kube-system --selector app=metallb
בפלט מוצגים Pods של בקר MetalLB ורמקול. לדוגמה:
metallb-controller-744884bf7b-rznr9 1/1 Running metallb-speaker-6n8ws 1/1 Running metallb-speaker-nb52z 1/1 Running metallb-speaker-rq4pp 1/1 Running
אחרי העברה מוצלחת, צריך למחוק ידנית את מכונות ה-VM של Seesaw, שכבר כובו, עבור אשכול המשתמשים. אפשר למצוא את שמות המכונות הווירטואליות של Seesaw בקטע vmnames בקובץ seesaw-for-[USERCLUSTERNAME].yaml בתיקיית התצורה.
דוגמה: אשכול משתמשים, כתובות IP סטטיות
נניח שיש לכם אשכול משתמשים שמשתמש בכתובות IP סטטיות לצמתים של האשכול. נניח גם שלקלאסטר יש שני שירותים מסוג LoadBalancer, ושהכתובות החיצוניות של השירותים האלה הן 172.16.21.41 ו-172.16.21.45.
משנים את קובץ התצורה של אשכול המשתמשים באופן הבא:
- משאירים את הקטע
network.hostConfig. - מגדירים את
loadBalancer.kindלהיותMetalLB. - להסיר את הקטע
loadBalancer.seesaw. - מוסיפים קטע
loadBalancer.metalLB.
דוגמה:
network:
hostConfig:
dnsServers:
- "172.16.255.1"
- "172.16.255.2"
ntpServers:
- "216.239.35.0"
loadBalancer:
vips:
controlPlaneVIP: "172.16.20.30"
ingressVIP: "172.16.20.31"
kind: MetalLB Seesaw
seesaw:
ipBlockFilePath: "user-cluster-1-ipblock.yaml"
vrid: 1
masterIP: ""
cpus: 4
memoryMB: 3072
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "172.16.20.31/32"
- "172.16.20.40 - 172.16.21.49"
נקודות מרכזיות מהדוגמה הקודמת:
למרות שהאשכול לא ישתמש יותר במאזן העומסים של Seesaw, צריך את הקטע
network.hostConfigכי הצמתים של האשכול משתמשים בכתובות IP סטטיות.הערך של
ingressVIPמופיע במאגר הכתובות של MetalLB.כתובות ה-IP החיצוניות, 172.16.21.41 ו-172.16.21.45, של השירותים הקיימים מסוג
LoadBalancerכלולות במאגר הכתובות של MetalLB.
דוגמה: אשכול משתמש kubeception, DHCP
נניח שיש לכם אשכול משתמשים שמשתמש ב-DHCP לצמתים שלו. נניח גם שלקלאסטר יש שני שירותים מסוג LoadBalancer, והכתובות החיצוניות של השירותים האלה הן 172.16.21.61 ו-172.16.21.65.
משנים את קובץ התצורה של אשכול המשתמשים באופן הבא:
- להסיר את הקטע
network.hostConfig. - מגדירים את
loadBalancer.kindלהיותMetalLB. - להסיר את הקטע
loadBalancer.seesaw. - מוסיפים קטע
loadBalancer.metalLB.
דוגמה:
enableControlplaneV2: false network:hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0"loadBalancer: vips: controlPlaneVIP: "172.16.20.50" ingressVIP: "172.16.20.51" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-2-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.20.51/32" - "172.16.20.60 - 172.16.21.69"
נקודות מרכזיות מהדוגמה הקודמת:
האשכול לא ישתמש יותר במאזן העומסים של Seesaw, ולא ישתמש בכתובות IP סטטיות לצמתי האשכול. לכן, אין צורך בקטע
network.hostConfig.הערך של
ingressVIPמופיע במאגר הכתובות של MetalLB.כתובות ה-IP החיצוניות, 172.16.21.61 ו-172.16.21.65, של השירותים הקיימים מסוג
LoadBalancerכלולות במאגר הכתובות של MetalLB.
דוגמה: Controlplane V2 user cluster, DHCP
נניח שיש לכם אשכול משתמשים שמופעל בו Controlplane V2, והוא משתמש ב-DHCP עבור צמתי העובדים שלו. נניח גם שלקלאסטר יש שני שירותים מסוג
LoadBalancer, והכתובות החיצוניות של השירותים האלה הן 172.16.21.81 ו-172.16.21.85.
משנים את קובץ התצורה של אשכול המשתמשים באופן הבא:
- משאירים את הקטע
network.hostconfig. - מגדירים את
loadBalancer.kindלהיותMetalLB. - להסיר את הקטע
loadBalancer.seesaw. - מוסיפים קטע
loadBalancer.metalLB.
דוגמה:
enableControlplaneV2: true
network:
hostConfig:
dnsServers:
- "172.16.255.1"
- "172.16.255.2"
ntpServers:
- "216.239.35.0"
loadBalancer:
vips:
controlPlaneVIP: "172.16.20.70"
ingressVIP: "172.16.20.71"
kind: MetalLB Seesaw
seesaw:
ipBlockFilePath: "user-cluster-2-ipblock.yaml"
vrid: 1
masterIP: ""
cpus: 4
memoryMB: 3072
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "172.16.20.71/32"
- "172.16.20.80 - 172.16.21.89"
נקודות מרכזיות מהדוגמה הקודמת:
האשכול לא ישתמש יותר בכתובות IP סטטיות לצמתי העובדים, אבל הוא ישתמש בכתובות IP סטטיות לצמתי מישור הבקרה. לכן צריך להוסיף את הקטע
network.hostConfig.הערך של
ingressVIPמופיע במאגר הכתובות של MetalLB.כתובות ה-IP החיצוניות, 172.16.21.81 ו-172.16.21.85, של השירותים הקיימים מסוג
LoadBalancerכלולות במאגר הכתובות של MetalLB.
העברה של אשכול אדמין
בקובץ התצורה של אשכול האדמין, מגדירים את loadBalancer.kind ל-MetalLB ומסירים את הקטע loadBalancer.seesaw.
מעדכנים את האשכול:
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
מחליפים את מה שכתוב בשדות הבאים:
ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין
ADMIN_CLUSTER_CONFIG: הנתיב של קובץ ההגדרות של אשכול האדמין
מוודאים שרכיבי MetalLB פועלים בצורה תקינה:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
--namespace kube-system --selector app=metallb
בפלט מוצגים Pods של בקר MetalLB ורמקול. לדוגמה:
metallb-controller-744884bf7b-rznr9 1/1 Running metallb-speaker-6n8ws 1/1 Running metallb-speaker-nb52z 1/1 Running metallb-speaker-rq4pp 1/1 Running
אחרי מיגרציה מוצלחת, צריך למחוק ידנית את מכונות ה-VM של Seesaw, שכבר כובו, עבור אשכול האדמין. אפשר למצוא את שמות המכונות הווירטואליות של Seesaw בקטע vmnames בקובץ seesaw-for-gke-admin.yaml בתיקיית התצורה.
דוגמה: אשכול אדמין, כתובות IP סטטיות
נניח שיש לכם אשכול אדמין שמשתמש בכתובות IP סטטיות לצמתי האשכול.
משנים את קובץ התצורה של אשכול האדמין באופן הבא:
- משאירים את הקטע
network.hostConfig. - מגדירים את
loadBalancer.kindלהיותMetalLB. - להסיר את הקטע
loadBalancer.seesaw.
דוגמה:
network:
hostConfig:
dnsServers:
- "172.16.255.1"
- "172.16.255.2"
ntpServers:
- "216.239.35.0"
loadBalancer:
vips:
controlPlaneVIP: "172.16.20.30"
kind: MetalLB Seesaw
seesaw:
ipBlockFilePath: "user-cluster-1-ipblock.yaml"
vrid: 1
masterIP: ""
cpus: 4
memoryMB: 3072
נקודה חשובה מהדוגמה הקודמת:
- למרות שהאשכול לא ישתמש יותר במאזן העומסים של Seesaw, צריך את הקטע
network.hostConfigכי הצמתים של האשכול משתמשים בכתובות IP סטטיות.
דוגמה: אשכול אדמין, DHCP
נניח שיש לכם אשכול אדמין שמשתמש ב-DHCP לצמתים של האשכול.
משנים את קובץ התצורה של אשכול האדמין באופן הבא:
- להסיר את הקטע
network.hostConfig. - מגדירים את
loadBalancer.kindלהיותMetalLB. - להסיר את הקטע
loadBalancer.seesaw.
דוגמה:
network:hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0"loadBalancer: vips: controlPlaneVIP: "172.16.20.30" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-1-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072
נקודה חשובה מהדוגמה הקודמת:
- האשכול לא ישתמש יותר במאזן העומסים של Seesaw, ולא ישתמש בכתובות IP סטטיות לצמתי האשכול. לכן, אין צורך בקטע
network.hostConfig.
פתרון בעיות
אם gkectl update נכשל במהלך העברת אשכול המשתמשים, ורכיבי ה-Pod של MetalLB לא פועלים באשכול המשתמשים, צריך להפעיל ידנית את מכונות ה-VM של Seesaw באשכול המשתמשים.
הפעולה הזו תגרום להקמה מחדש של תנועה לכתובות ה-VIP שמשמשות כרגע. אבל יכול להיות שהמכונות הווירטואליות של Seesaw לא ישרתו כתובות VIP שנוצרו לאחרונה אם load-balancer-seesaw Pod לא פועל. במקרה כזה, צריך ליצור כרטיס תמיכה.
אם gkectl update נכשל במהלך העברת אשכול האדמין, והפודים של MetalLB לא פועלים באשכול האדמין, צריך להפעיל ידנית את מכונות ה-VM של Seesaw באשכול האדמין. יכול להיות שהפעולה הזו תאפשר לתנועה להגיע לכתובות ה-VIP של מישור הבקרה שמשמשות כרגע את אשכולות המשתמשים, כדי שהם יפעלו שוב. אבל יכול להיות שכתובת ה-VIP של מישור הבקרה של אשכול האדמין עצמו לא תפעל. במקרה כזה, צריך לערוך את קובץ ה-kubeconfig של אשכול האדמין כדי להשתמש ישירות בכתובת ה-IP של צומת מישור הבקרה של אשכול האדמין.
בנוסף, במרחב השמות kube-system, משנים את kube-apiserver סוג השירות
מ-ClusterIP ל-LoadBalancer. אם צריך, יוצרים כרטיס תמיכה.