סקירה כללית
בדף הזה מוסבר איך להעביר אשכולות משתמשים מגרסה 1.30 ומעלה לתכונות המומלצות הבאות:
- מעבירים ל-Dataplane V2 כממשק רשת קונטיינר (CNI).
- העברת אשכולות משתמשים באמצעות kubeception אל Controlplane V2.
מעבירים את ההגדרות של מאזן העומסים:
מההגדרה של מאזן העומסים המשולב F5 BIG-IP אל
ManualLBאו
ממאזן העומסים Seesaw שכלול בחבילה אל MetalLB.
הדף הזה מיועד לאדמינים ולמפעילים בתחום ה-IT שמנהלים את מחזור החיים של תשתית טכנולוגית בסיסית. מידע על התפקידים הנפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בGoogle Cloud תוכן, זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
שיטות מומלצות
מומלץ להעביר קודם את הסביבה הכי פחות קריטית, כמו סביבת בדיקה. אחרי שמוודאים שההעברה הצליחה, חוזרים על התהליך הזה לכל סביבה, ומעבירים את סביבת הייצור בסוף. כך תוכלו לוודא שההעברה הצליחה ושהעומסים שלכם פועלים בצורה תקינה, לפני שתעברו לסביבה הקריטית הבאה.
מומלץ ליצור אשכול משתמשים חדש עם Controlplane V2 מופעל כדי ללמוד על ההבדלים בארכיטקטורה עם אשכולות kubeception. האשכול החדש לא משפיע על עומסי העבודה שלכם. עם זאת, בתרחיש הגרוע ביותר, אם ההעברה תיכשל, יהיה לכם אשכול מוכן לעומסי העבודה.
מידע נוסף על תכנון העברה זמין במאמר תכנון העברה של אשכול לתכונות מומלצות.
דרישות
במיגרציה הזו:
- אשכול המשתמשים צריך להיות בגרסה 1.30 ומעלה.
- כל מאגרי הצמתים צריכים להיות באותה גרסה כמו אשכול המשתמשים.
- אם האשכול משתמש במאזן העומסים Seesaw, חשוב לוודא שאתם לא מסתמכים על Seesaw לשמירת כתובת ה-IP של הלקוח, כפי שמתואר בקטע הבא.
שמירה על כתובת ה-IP של הלקוח ב-Seesaw
כדי לבדוק את externalTrafficPolicy, מריצים את הפקודה הבאה:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get svc -A -o yaml | grep "externalTrafficPolicy: Local"
אם הבעיה הזו נמשכת, אפשר לפנות לתמיכה של Google.
הערכת משך הזמן שנדרש והגדרת חלון זמן לתחזוקה
כשמעדכנים את האשכול, כברירת מחדל, כל מאגרי הצמתים מתעדכנים במקביל. עם זאת, בכל מאגר צמתים, הצמתים מתעדכנים ברצף. לכן, זמן העדכון הכולל תלוי במספר הצמתים במאגר הצמתים הגדול ביותר. כדי לחשב אומדן גס לכל עדכון:
- אם מבצעים מיגרציה מ-Seesaw ל-MetalLB, צריך להקצות כ-15 דקות לעדכון כדי לבחור מאגר צמתים לאיזון העומסים של MetalLB. בעדכון הזה, רק מאגר הצמתים שנבחר יעודכן.
- לכל עדכון אחר בתהליך ההעברה, מכפילים את 15 הדקות במספר הצמתים במאגר הצמתים.
כדי להעריך את הזמן שנדרש, סופרים את מספר הפעמים שבהם צריך לעדכן את האשכול. השלבים הכלליים הבאים מראים מתי צריך להריץ את הפקודה
gkectl update cluster כדי לעדכן את האשכול:
- אם באשכול המשתמשים נעשה שימוש בהצפנה של סודות שמופעלת תמיד, צריך להשבית את התכונה ולהריץ את
gkectl update cluster. - אם הערך של
enableDataplaneV2באשכול המשתמשים לא מוגדר או מוגדר ל-false, מבצעים את שינויי ההגדרה ואז מריצים אתgkectl update clusterכדי לבצע מיגרציה ל-Dataplane V2. הכנה להעברה של מאזן עומסים ומישור בקרה:
- אם התיקון האוטומטי מופעל באשכול האדמין, צריך להשבית אותו. מריצים את הפקודה
gkectl update admin. העדכון הזה מסתיים במהירות כי הוא לא יוצר מחדש את הצמתים של אשכול האדמין. - אם אשכול המשתמשים משתמש ב-Seesaw, בוחרים מאגר צמתים לשימוש במאזן העומסים של MetalLB, ואז מריצים את הפקודה
gkectl update cluster. העדכון הזה מעדכן רק את הצמתים במאגר הצמתים שנבחר.
- אם התיקון האוטומטי מופעל באשכול האדמין, צריך להשבית אותו. מריצים את הפקודה
מבצעים את כל שינויי ההגדרות הנדרשים כדי לעדכן את מאזן העומסים ולעבור ל-Controlplane V2. מריצים את הפקודה
gkectl update cluster.אחרי ההעברה, אם השבתתם את ההצפנה של סודות במצב פעיל תמיד, תצטרכו להפעיל מחדש את התכונה ולהריץ את
gkectl update cluster.
הזמן הכולל להעברה תלוי במספר הפעמים שצריך להריץ את הפקודה
gkectl cluster update, וזה תלוי בהגדרות שלכם. לדוגמה, נניח שאתם מבצעים מיגרציה ל-Dataplane V2, ל-ControlPlane V2 ול-MetalLB.
נניח גם שיש 10 צמתים במאגר הצמתים הגדול ביותר ו-3 צמתים במאגר הצמתים ש-MetalLB ישתמש בו. כדי לחשב את הזמן המשוער להעברה, מוסיפים את הנתונים הבאים:
- 150 דקות להעברה ל-Dataplane V2 כי 15 דקות * 10 צמתים במאגר הגדול ביותר = 150 דקות.
- 45 דקות למאגר הצמתים שמשמש את MetalLB כי 15 דקות * 3 צמתים במאגר הצמתים הזה = 45 דקות.
- 150 דקות לעדכון Controlplane V2 ו-MetalLB כי 15 דקות * 10 צמתים במאגר הגדול ביותר = 150 דקות.
הזמן הכולל להעברה הוא כ-345 דקות, ששווה ל-5 שעות ו-45 דקות.
במקרה הצורך, אפשר לבצע את ההעברה בשלבים. בדוגמה הקודמת, אפשר לבצע את המיגרציה ל-Dataplane V2 בחלון זמן לתחזוקה אחד, ואת שאר המיגרציה בחלון זמן לתחזוקה אחד או שניים.
תכנון זמן השבתה במהלך ההעברה
כשמתכננים את ההעברה, צריך להתכונן להשבתה מהסוגים הבאים:
- זמן השבתה של רמת הבקרה: הגישה לשרת Kubernetes API מושפעת במהלך ההעברה. אם אתם מבצעים מיגרציה ל-Controlplane V2, יהיה זמן השבתה של מישור הבקרה עבור אשכולות משתמשים של kubeception במהלך המיגרציה של
loadBalancer.vips.controlPlaneVIP. ההשבתה בדרך כלל נמשכת פחות מ-10 דקות, אבל משך ההשבתה תלוי בתשתית שלכם. - זמן השבתה של עומס העבודה: כתובות ה-IP הווירטואליות (VIP) שמשמשות את השירותים מהסוג: LoadBalancer לא זמינות. המצב הזה קורה רק במהלך העברה מ-Seesaw ל-MetalLB. תהליך ההעברה של MetalLB יפסיק את החיבורים לרשת לכל כתובות ה-VIP באשכול המשתמשים עבור שירותי Kubernetes מסוג LoadBalancer למשך כדקה עד עשר דקות. אחרי שההעברה תושלם, החיבורים יפעלו שוב.
בטבלה הבאה מוסבר איך ההעברה משפיעה:
| מאת | אל | גישה ל-Kubernetes API | עומסי עבודה של משתמשים |
|---|---|---|---|
אשכול Kubeception באמצעות Calico, שהערך שלו הוא
enableDataplaneV2 unset או false |
אשכול Kubeception עם Dataplane V2 | לא מושפע | לא מושפע |
אשכול Kubeception, שבו הערך של enableControlplaneV2 לא מוגדר או מוגדר ל-false עם MetalLB או ManualLB |
אשכול Controlplane V2 עם אותו סוג של מאזן עומסים | השפעה | לא מושפע |
אשכול Kubeception עם loadBalancer.kind: "F5BigIP" |
אשכול Controlplane V2 עם הגדרה ידנית של מאזן עומסים | השפעה | לא מושפע |
אשכול Kubeception עם loadBalancer.kind: "Seesaw" |
אשכול Controlplane V2 עם MetalLB | השפעה | השפעה |
- הושפע: יש הפרעה משמעותית בשירות במהלך ההעברה.
- לא מושפע: אין הפרעה בשירות או שההפרעה כמעט לא מורגשת.
הכנות להעברה
כדי שההעברה תתבצע בהצלחה, צריך לפעול לפי השלבים בקטעים הבאים.
הקצאה של כתובות IP חדשות
אם אתם מבצעים מיגרציה ל-Controlplane V2, הקצו כתובות IP סטטיות חדשות באותו VLAN כמו צמתי העובדים (הצמתים במאגרי הצמתים).
צריכה להיות לכם כתובת IP אחת בשביל
loadBalancer.vips.controlPlaneVIP.מקצים כתובת IP אחת לכל צומת של מישור הבקרה. מספר כתובות ה-IP שצריך להקצות תלוי בשאלה אם אשכול המשתמשים יהיה בעל זמינות גבוהה (HA) או לא.
- לא HA: כתובת IP אחת
- HA: שלוש כתובות IP
עדכון כללים לחומת אש
אם אתם עוברים ל-Controlplane V2, אתם צריכים לעדכן את כללי חומת האש באשכולות המשתמשים. צריך לוודא שכתובות ה-IP שהוקצו לאחרונה לצמתים של מישור הבקרה באשכול המשתמשים יכולות להגיע לכל ממשקי ה-API הנדרשים ולכל היעדים האחרים, כפי שמתואר במאמר כללי חומת אש לצמתים של אשכול משתמשים.
בדיקת הגרסאות של האשכול ומאגר הצמתים
מוודאים שכל מאגרי הצמתים משתמשים באותה גרסה כמו אשכול המשתמשים, שחייבת להיות גרסה 1.30 ומעלה. אם לא, משדרגים את מאגרי הצמתים ל-gkeOnPremVersion בקובץ ההגדרות של אשכול המשתמשים לפני שממשיכים בהעברה. כדי לבדוק את הגרסאות, מריצים את הפקודה הבאה:
gkectl version --kubeconfig ADMIN_CLUSTER_KUBECONFIG --details
מחליפים את ADMIN_CLUSTER_KUBECONFIG בנתיב לקובץ kubeconfig של אשכול האדמין.
בדיקת התקינות של האשכול
בודקים את תקינות האשכול ופותרים בעיות שזוהו על ידי הפקודה gkectl diagnose cluster:
gkectl diagnose cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--cluster-name USER_CLUSTER_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין. -
USER_CLUSTER_NAME: השם של אשכול המשתמשים.
השבתת תיקון אוטומטי באשכול האדמין
אם אתם מעבירים את אשכול המשתמשים לשימוש ב-Controlplane V2 והתיקון האוטומטי מופעל באשכול האדמין, צריך להשבית את התיקון האוטומטי. בודקים את השדה autoRepair.enabled בקובץ ההגדרות של אשכול הניהול. אם השדה הזה לא מוגדר או מוגדר לערך true,
מבצעים את השלבים הבאים:
בקובץ ההגדרות של אשכול הניהול, מגדירים את
autoRepair.enabledלערךfalse. לדוגמה:autoRepair: enabled: falseמעדכנים את אשכול האדמין:
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config ADMIN_CLUSTER_CONFIG
מחליפים את מה שכתוב בשדות הבאים:
-
ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין. -
ADMIN_CLUSTER_CONFIG: הנתיב לקובץ ההגדרות של אשכול האדמין.
אחרי שהמיגרציה תושלם, חשוב להפעיל מחדש את התיקון האוטומטי באשכול האדמין.
בדיקה אם יש בעיה בהצפנת סודות שמופעלת תמיד
אם מעבירים את אשכול המשתמשים לשימוש ב-Controlplane V2, צריך לבדוק אם יש בעיה בהצפנת סודות שמופעלת תמיד.
אם הפעלתם בעבר הצפנת סודות שפועלת תמיד באשכול המשתמשים, אתם צריכים לבצע את השלבים במאמר השבתת הצפנת סודות שפועלת תמיד ופענוח סודות לפני שתתחילו בהעברה. אחרת, לא ניתן לפענח סודות באשכול החדש של Controlplane V2.
לפני שמתחילים את ההעברה, מריצים את הפקודה הבאה כדי לבדוק אם הצפנת סודות שפועלת כל הזמן הופעלה אי פעם:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get onpremusercluster USER_CLUSTER_NAME \ -n USER_CLUSTER_NAME-gke-onprem-mgmt \ -o jsonpath={.spec.secretsEncryption}
אם הפלט של הפקודה הקודמת ריק, סימן שההצפנה של סודות במצב פעיל תמיד לא הופעלה אף פעם. אפשר להתחיל את ההעברה.
אם הפלט של הפקודה הקודמת לא ריק, סימן שההצפנה של סודות במצב פעיל תמיד הופעלה בעבר. לפני המעבר, צריך לבצע את השלבים שבקטע הבא כדי לוודא שאפשר לפענח סודות באשכול החדש של Controlplane V2.
בדוגמה הבאה מוצג פלט לא ריק:
{"generatedKeyVersions":{"keyVersions":[1]}}
השבתה של הצפנת סודות שמופעלת תמיד ופענוח סודות אם צריך
כדי להשבית את ההצפנה התמידית של סודות ולפענח סודות, מבצעים את השלבים הבאים:
כדי להשבית את ההצפנה של סודות שמופעלת תמיד, מוסיפים שדה
disabled: trueלקטעsecretsEncryptionבקובץ ההגדרות של אשכול המשתמשים:secretsEncryption: mode: GeneratedKey generatedKey: keyVersion: KEY_VERSION disabled: trueמעדכנים את האשכול:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIGמחליפים את מה שכתוב בשדות הבאים:
-
ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין -
USER_CLUSTER_CONFIG: הנתיב של קובץ התצורה של אשכול המשתמשים
-
כדי לבצע עדכון בהדרגה (rolling) ב-DaemonSet ספציפי, פועלים לפי השלבים הבאים:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ rollout restart statefulsets kube-apiserver \ -n USER_CLUSTER_NAME
כדי לקבל את המניפסטים של כל הסודות באשכול המשתמשים בפורמט YAML:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get secrets -A -o yaml > SECRETS_MANIFEST.yaml
כדי שכל הסודות יאוחסנו ב-etcd כטקסט פשוט, צריך להחיל מחדש את כל הסודות באשכול המשתמש:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ apply -f SECRETS_MANIFEST.yaml
עכשיו אפשר להתחיל את המיגרציה ל-Controlplane V2. אחרי שההעברה מסתיימת, אפשר להפעיל מחדש את ההצפנה של סודות במצב פעיל באשכול.
בדיקה אם יש בעיה ב-webhooks של עומסי עבודה שהוגדרו בצורה שגויה
אם מעבירים את אשכול המשתמשים לשימוש ב-Controlplane V2, צריך לבדוק אם יש בעיה בוווב-הוקים של עומסי העבודה שהוגדרו בצורה שגויה.
אם יש לכם webhooks שכוללים פודים של מערכת במרחב השמות kube-system, צריך להוסיף namespaceSelector כדי לסנן את מרחב השמות kube-system.
לדוגמה,
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values:
- kube-system
הפעלת מאגר צמתים לשימוש ב-MetalLB
אם אתם עוברים ממאזן העומסים של Seesaw שכלול בחבילה אל MetalLB, אתם צריכים לבצע את השלבים שבקטע הזה. האשכול משתמש ב-Seesaw אם loadBalancer.kind:
Seesaw נמצא בקובץ התצורה של אשכול המשתמשים. אם אתם מעבירים את ההגדרה המשולבת של F5 BIG-IP, דלגו לקטע הבא, מעבר ל-Dataplane V2.
בוחרים מאגר צמתים ומפעילים אותו לשימוש עם MetalLB. המיגרציה פורסת את MetalLB בצמתים במאגר הצמתים הזה.
בקטע nodePools בקובץ ההגדרות של אשכול המשתמשים, בוחרים מאגר צמתים או מוסיפים מאגר צמתים חדש ומגדירים את
enableLoadBalancerל-true. לדוגמה:nodePools: - name: pool-1 replicas: 3 enableLoadBalancer: trueמעדכנים את האשכול:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
מידע נוסף על MetalLB זמין במאמר איזון עומסים בחבילה עם MetalLB.
מעבר ל-Dataplane V2
לפני המיגרציה, מריצים את הפקודה הבאה כדי לבדוק אם DataPlane V2 מופעל באשכול:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get onpremusercluster USER_CLUSTER_NAME -n USER_CLUSTER_NAME-gke-onprem-mgmt -o yaml | grep enableDataplaneV2
אם Dataplane V2 כבר מופעל, אפשר לדלג לקטע הבא, הכנה להעברת מאזן העומסים.
כדי לבצע מיגרציה ל-Dataplane V2, יש לכם את האפשרויות הבאות:
משדרגים את האשכול לגרסה 1.31. הוראות מפורטות מופיעות במאמר בנושא הפעלת Dataplane V2.
עדכון האשכול 1.30.
בשני המקרים צריך להסיר באופן זמני את NetworkPolicy המפרט
כמו שמתואר בשלבים הבאים.
כדי לבצע מיגרציה ל-Dataplane V2, פועלים לפי השלבים הבאים. אם יש לכם חששות לגבי הסרה זמנית של מפרט NetworkPolicy, תוכלו לפנות לתמיכה של Google.
אם האשכול שלכם משתמש ב-NetworkPolicy, צריך להסיר זמנית את המפרט שלו מהאשכול, באופן הבא:
בודקים אם יש תווית שאינה של המערכת
NetworkPolicyשמוחלת על האשכול:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get networkpolicy -A -o wide | grep -v kube-systemאם הפלט של השלב הקודם לא היה ריק, שומרים כל
NetworkPolicyמפרט בקובץ כדי שאפשר יהיה להחיל מחדש את המפרט אחרי עדכון האשכול.kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get networkpolicy NETWORK_POLICY_NAME -n NETWORK_POLICY_NAMESPACE -o yaml > NETWORK_POLICY_NAME.yamlמחליפים את מה שכתוב בשדות הבאים:
-
NETWORK_POLICY_NAME: השם שלNetworkPolicyששומרים. -
NETWORK_POLICY_NAMESPACE: מרחב השמות שלNetworkPolicy.
-
מוחקים את
NetworkPolicyבאמצעות הפקודה הבאה:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete networkpolicy NETWORK_POLICY_NAME -n NETWORK_POLICY_NAMESPACE
כדי לעבור ל-Dataplane V2, מבצעים את השלבים הבאים:
מגדירים את
enableDataplaneV2ל-trueבקובץ ההגדרות של אשכול המשתמשים.כדי להפעיל את DataPlane V2, מעדכנים את האשכול:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIGאם הסרתם בשלב הקודם מפרטים של
NetworkPolicyשאינם מערכת, אחרי שהעדכון יסתיים, תצטרכו להחיל אותם מחדש באמצעות הפקודה הבאה:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f NETWORK_POLICY_NAME.yaml
אחרי שמבצעים את השלבים האלה, Dataplane V2 מופעל. בשלב הבא, מתכוננים להעברת האשכול למאזן העומסים המומלץ ול-Controlplane V2.
הכנה למיגרציה של מאזן העומסים
אם באשכולות המשתמשים שלכם נעשה שימוש במאזן העומסים Seesaw או ב-F5 BIG-IP משולב, צריך לבצע את השלבים שבקטע הזה כדי לבצע את השינויים הנדרשים בקובץ התצורה של אשכול המשתמשים. אחרת, מדלגים לקטע הבא, הכנה להעברה ל-Controlplane V2.
F5 BIG-IP
אם הקלאסטרים שלכם משתמשים בהגדרה המשולבת של F5 BIG-IP, כדי להתכונן להעברה אל ManualLB, צריך לבצע את השינויים הבאים בקובץ ההגדרות של קלאסטר המשתמשים:
- שינוי של
loadBalancer.kindל-"ManualLB". - משאירים את אותו הערך בשדה
loadBalancer.vips.ingressVIP. - אם אתם עוברים ל-Controlplane V2, צריך לשנות את הערך של השדה
loadBalancer.vips.controlPlaneVIPלכתובת ה-IP שהקציתם. אחרת, אפשר להשאיר את אותו ערך. - למחוק את כל הקטע
loadBalancer.f5BigIP.
בדוגמה הבאה של קובץ תצורה של אשכול משתמשים אפשר לראות את השינויים האלה:
loadBalancer: vips: controlPlaneVIP: 192.0.2.5 ingressVIP: 198.51.100.20 kind:"f5BigIP""ManualLB"f5BigIP: address: "203.0.113.2" credentials: fileRef: path: "my-config-folder/user-creds.yaml" entry: "f5-creds" partition: "my-f5-user-partition"
Seesaw
אם באשכולות המשתמשים שלכם נעשה שימוש במאזן העומסים Seesaw, צריך לבצע את השלבים שבקטעים הבאים כדי להתכונן להעברה אל MetalLB.
ציון מאגרי כתובות
הבקר של MetalLB מקצה כתובות IP לשירותים. כשמפתח אפליקציות יוצר Service מסוג LoadBalancer באשכול משתמשים, בקר MetalLB מקצה באופן אוטומטי כתובת IP ל-Service. הבקר MetalLB בוחר כתובת IP ממאגר כתובות שאתם מציינים.
כדי לוודא שיש מספיק כתובות IP באשכול המשתמשים, כדאי לקחת בחשבון את המספר המקסימלי של שירותי LoadBalancer שצפויים להיות פעילים. לאחר מכן, מציינים מספיק כתובות IP בקטע loadBalancer.metalLB.addressPools בקובץ התצורה של אשכול המשתמשים.
הכתובות במאגר צריכות להיות בפורמט CIDR או בפורמט טווח. כדי לציין כתובת יחידה, משתמשים ב-CIDR של /32. לדוגמה:
addresses:
- "192.0.2.0/26"
- "192.0.2.64-192.0.2.72"
- "192.0.2.75/32"
החרגה של כתובות IP שמשמשות למטרות אחרות
אל תכללו את כתובות ה-IP הבאות במאגר כתובות כלשהו:
כתובות VIP במישור הבקרה:
כתובות IP של צומתי מישור הבקרה:
כתובות ה-IP של השער:
כתובות IP לשירותים:
כתובות IP של Pods:
כתובות ה-IP של צומתי העובדים באשכול המשתמשים
כתובות ה-IP של שרתי vCenter, שרתי DNS, שרתי NTP ותחנת העבודה של האדמין
עדכון קובץ ההגדרה של האשכול
מעדכנים את קובץ התצורה של האשכול כדי להסיר את הקטע Seesaw ולהוסיף קטע MetalLB, באופן הבא:
- מגדירים את
loadBalancer.kindלהיות"MetalLB". - אפשר להשאיר את אותו ערך בשדה
loadBalancer.vips.ingressVIP. - מוסיפים את כתובת ה-VIP של ה-ingress אל מאגר כתובות של MetalLB.
- אם אתם עוברים ל-Controlplane V2, צריך לשנות את הערך של השדה
loadBalancer.vips.controlPlaneVIPלכתובת ה-IP שהקציתם. אחרת, אפשר להשאיר את אותו ערך. - מסירים את הקטע
loadBalancer.seesaw. - מוסיפים קטע
loadBalancer.metalLB.
החלק הבא בקובץ ההגדרות של אשכול משתמשים מציג את השינויים האלה ואת ההגדרות של MetalLB:
- מאגר כתובות שהבקר של MetalLB יכול לבחור מתוכו ולהקצות ל-Services מסוג LoadBalancer. כתובת ה-IP הווירטואלית של הכניסה, שבמקרה הזה היא
198.51.100.10, נמצאת במאגר הזה בפורמט של טווח,198.51.100.10/32. - כתובת ה-VIP שמוגדרת לשרת ה-API של Kubernetes באשכול המשתמשים.
- כתובת ה-VIP של הכניסה שהגדרתם לשרת ה-Proxy של הכניסה.
- מאגר צמתים שמופעל בו שימוש ב-MetalLB. במהלך ההעברה, MetalLB נפרס בצמתים במאגר הצמתים הזה.
loadBalancer:
vips:
controlPlaneVIP: "198.51.100.50"
ingressVIP: "198.51.100.10"
kind: "MetalLB" "Seesaw"
seesaw:
ipBlockFilePath: "user-cluster-2-ipblock.yaml"
vrid: 1
masterIP: ""
cpus: 4
memoryMB: 3072
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "198.51.100.10/32"
- "198.51.100.80 - 198.51.100.89"
הכנה למיגרציה ל-Controlplane V2
אם Controlplane V2 לא מופעל באשכול:
- מעדכנים את קובץ ההגדרות של אשכול המשתמשים.
- אם נעשה שימוש באיזון עומסים ידני (
loadBalancer.kind: "ManualLB") באשכול, צריך לעדכן גם את ההגדרה במאזן העומסים.
השלבים האלה מתוארים בקטעים הבאים.
אם ב-cluster כבר מופעל Controlplane V2, אפשר לדלג אל הקטע העברת ה-cluster של המשתמשים.
עדכון קובץ התצורה של אשכול המשתמשים
מבצעים את השינויים הבאים בקובץ התצורה של אשכול המשתמשים הקיים:
- מגדירים את
enableControlplaneV2לערך true. - אופציונלי, אפשר להגדיר זמינות גבוהה (HA) למישור הבקרה של אשכול המשתמשים Controlplane V2. כדי לשנות מאשכול ללא זמינות גבוהה לאשכול עם זמינות גבוהה, משנים את הערך של
masterNode.replicasמ-1 ל-3. - מוסיפים את כתובת ה-IP הסטטית (או הכתובות) של הצמתים במישור הבקרה של אשכול המשתמשים לקטע
network.controlPlaneIPBlock.ips. כתובת ה-IP (או הכתובות) של הצמתים במישור הבקרה צריכה להיות באותו VLAN כמו הצמתים של העובדים. חובה לציין את שמות המארחים. - ממלאים את
netmaskואתgatewayבקטעnetwork.controlPlaneIPBlock. - אם הקטע
network.hostConfigריק, ממלאים אותו. - מוודאים שבשדה
loadBalancer.vips.controlPlaneVIPמופיעה כתובת ה-IP החדשה של ה-VIP של מישור הבקרה. כתובת ה-IP צריכה להיות באותו VLAN כמו כתובות ה-IP של צומת מישור הבקרה. - אם באשכול המשתמשים נעשה שימוש באיזון עומסים ידני, צריך להגדיר את הערכים
loadBalancer.manualLB.controlPlaneNodePortו-loadBalancer.manualLB.konnectivityServerNodePortל-0. הם לא נדרשים כש-Controlplane V2 מופעל, אבל הערך שלהם חייב להיות 0. - אם באשכול המשתמשים נעשה שימוש באיזון עומסים ידני, צריך להגדיר את מאזן העומסים כמו שמתואר בקטע הבא.
שינוי המיפויים במאזן העומסים לפי הצורך
אם אשכול המשתמשים כבר משתמש באיזון עומסים ידני, צריך להגדיר כמה מיפויים במאזן העומסים. אם אתם מבצעים מיגרציה מההגדרה המשולבת של F5 BIG-IP לאיזון עומסים ידני, אתם לא צריכים לבצע שינויים בהגדרות של מאזן העומסים, ואתם יכולים לדלג אל הקטע הבא, העברת אשכול המשתמשים.
לכל כתובת IP שציינתם בקטע network.controlPlaneIPBlock, צריך להגדיר את המיפויים הבאים במאזן העומסים עבור הצמתים של מישור הבקרה:
(ingressVIP:80) -> (NEW_NODE_IP_ADDRESS:ingressHTTPNodePort)
(ingressVIP:443) -> (NEW_NODE_IP_ADDRESS:ingressHTTPSNodePort)
המיפויים האלה נדרשים לכל הצמתים באשכול המשתמשים, גם לצמתים של מישור הבקרה וגם לצמתים של העובדים. מכיוון ש-NodePort מוגדרים באשכול, Kubernetes פותח את ה-NodePort בכל הצמתים באשכול, כך שכל צומת באשכול יכול לטפל בתנועה במישור הנתונים.
אחרי שמגדירים את המיפויים, מאזן העומסים מאזין לתעבורה בכתובת ה-IP שהגדרתם ל-VIP של הכניסה לאשכול המשתמשים ביציאות HTTP ו-HTTPS רגילות. מאזן העומסים מנתב בקשות לכל צומת באשכול. אחרי שהבקשה מנותבת לאחד מצמתי האשכול, רשת Kubernetes פנימית מנתבת את הבקשה אל יעד ה-Pod.
העברת אשכול המשתמשים
קודם כל, בודקים בקפידה את כל השינויים שביצעתם בקובץ התצורה של אשכול המשתמשים. כל ההגדרות של מאזן העומסים ושל Controlplane V2 הן קבועות, אלא אם מעדכנים את האשכול לצורך ההעברה.
כדי לעדכן את האשכול, מריצים את הפקודה הבאה:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--config USER_CLUSTER_CONFIG
העברה של מישור הבקרה גרסה 2
במהלך ההעברה של Controlplane V2, העדכון מבצע את הפעולות הבאות:
- יוצר את מישור הבקרה של אשכול חדש עם ControlPlane V2 מופעל.
- הפקודה מפסיקה את מישור הבקרה של Kubernetes באשכול kubeception.
- מצלם תמונת מצב של etcd של אשכול kubeception.
- מכבה את הצמתים של מישור הבקרה של אשכול המשתמש של kubeception. עד שההעברה תושלם, הצמתים לא יימחקו כי כך אפשר לשחזר את הכשל על ידי חזרה לאשכול kubeception הזה.
- משחזר את נתוני האשכול במישור הבקרה החדש, באמצעות תמונת המצב של etcd שנוצרה בשלב קודם.
- מחבר את הצמתים של מאגר הצמתים של אשכול kubeception למישור הבקרה החדש, שאפשר לגשת אליו באמצעות
controlPlaneVIPהחדש. - מבצע התאמה בין אשכול המשתמשים המשוחזר לבין מצב הסיום של האשכול עם ControlPlane V2 מופעל.
שימו לב לנקודות הבאות:
- במהלך ההעברה לא צפוי זמן השבתה לעומסי העבודה של אשכולות המשתמשים.
- במהלך ההעברה, מישור הבקרה של אשכול המשתמשים מושבת לזמן קצר. באופן ספציפי, רמת הבקרה לא זמינה בין הפסקת רמת הבקרה של Kubernetes באשכול kubeception לבין השלמת החיבור של הצמתים במאגר הצמתים של אשכול kubeception לרמת הבקרה החדשה. (בבדיקות, זמן ההשבתה הזה היה פחות מ-7 דקות, אבל משך הזמן בפועל תלוי בתשתית שלכם).
- בסיום ההעברה, הצמתים של מישור הבקרה של אשכולות kubeception של המשתמש נמחקים. אם הערך של network.ipMode.type באשכול האדמין מוגדר ל-
"static", אפשר לעשות שימוש חוזר בחלק מכתובות ה-IP הסטטיות שלא נמצאות בשימוש. אפשר להשתמש בפקודהkubectl get nodes -o wideכדי לראות את רשימת האובייקטים של הצמתים באשכול הניהול ולבדוק אילו כתובות IP נמצאות בשימוש. כדי להשתמש מחדש בכתובות ה-IP האלה, מסירים אותן מקובץ ההגדרות של אשכול האדמין ומריצים את הפקודהgkectl update admin. - בסוף המיגרציה, צמתי העובדים עוברים עדכון בהדרגה. מחכים שכל הצמתים יהיו מוכנים לפני שממשיכים לשלבים שאחרי ההעברה שמפורטים בקטע הבא.
- אחרי ההעברה, כתובת ה-VIP הישנה של מישור הבקרה עדיין פועלת, אבל היא לא יציבה. אל תסתמכו על זה. חשוב לעדכן בהקדם האפשרי את כל התלות בכתובת ה-VIP הישנה כך שתשתמשו בכתובת ה-VIP החדשה.
אחרי המיגרציה
אחרי שהעדכון מסתיים, מבצעים את השלבים הבאים:
מוודאים שקלאסטר המשתמשים פועל:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIGהפלט אמור להיראות כך:
cp-vm-1 Ready control-plane,master 18m cp-vm-2 Ready control-plane,master 18m cp-vm-3 Ready control-plane,master 18m worker-vm-1 Ready 6m7s worker-vm-2 Ready 6m6s worker-vm-3 Ready 6m14sאם עברתם ל-Controlplane V2, צריך לעדכן את כללי חומת האש באשכול האדמין כדי להסיר את הצמתים של מישור הבקרה של אשכול המשתמשים kubeception.
אם השבתתם את ההצפנה של סודות תמיד, הפעילו מחדש את התכונה.
- בקובץ ההגדרות של אשכול המשתמשים, מסירים את השדה
disabled: true. מעדכנים את אשכול המשתמשים:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
- בקובץ ההגדרות של אשכול המשתמשים, מסירים את השדה
אם השבתתם את התיקון האוטומטי באשכול האדמין, תצטרכו להפעיל מחדש את התכונה.
בקובץ ההגדרות של אשכול האדמין, מגדירים את
autoRepair.enabledל-true.מעדכנים את האשכול:
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config ADMIN_CLUSTER_CONFIG
העברה של מאזן עומסים
אם העברתם את מאזן העומסים, צריך לוודא שרכיבי מאזן העומסים פועלים בצורה תקינה.
העברה של MetalLB
אם עברתם ל-MetalLB, צריך לוודא שהרכיבים של 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 שבספריית התצורה.
העברה של F5 BIG-IP
אחרי המעבר לאיזון עומסים ידני, התעבורה אל האשכולות לא מופרעת. הסיבה לכך היא שמשאבי F5 הקיימים עדיין קיימים, כפי שאפשר לראות בהרצת הפקודה הבאה:
kubectl --kubeconfig CLUSTER_KUBECONFIG \
api-resources --verbs=list -o name | xargs -n 1 kubectl --kubeconfig
CLUSTER_KUBECONFIG get --show-kind --ignore-not-found
--selector=onprem.cluster.gke.io/legacy-f5-resource=true -A
הפלט הצפוי אמור להיראות כך:
Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE NAME TYPE DATA AGE
kube-system secret/bigip-login-sspwrd Opaque 4 14h
NAMESPACE NAME SECRETS AGE
kube-system serviceaccount/bigip-ctlr 0 14h
kube-system serviceaccount/load-balancer-f5 0 14h
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system deployment.apps/k8s-bigip-ctlr-deployment 1/1 1 1 14h
kube-system deployment.apps/load-balancer-f5 1/1 1 1 14h
NAME ROLE AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding ClusterRole/bigip-ctlr-clusterrole 14h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding ClusterRole/load-balancer-f5-clusterrole 14h
NAME CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole 2024-03-25T05:16:40Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole 2024-03-25T05:16:41Z