במאמר הזה מוסבר איך להפעיל כלי עצמאי כהכנה לשדרוג. לפני שמשדרגים אשכול אדמין או אשכול משתמשים ב-Google Distributed Cloud בגרסה 1.9 ובגרסאות מאוחרות יותר, מומלץ להריץ את כלי ההכנה לשדרוג.
כדי להריץ את הכלי, משתמשים בסקריפט bash שבמסמך הזה, שמבוסס על אלגוריתמים לגיבוב מאובטח (SHA) שמוגדרים כקשיחים. בכל גרסה של הכלי, המסמך הזה יעודכן עם ה-SHA החדש. הסקריפט יוצר Kubernetes Job כדי להריץ גרסה ספציפית של בדיקות מקדימות, בהתאם לגרסה שמשדרגים אליה.
בדיקות לפני שדרוג
לפני שמשדרגים אשכול משתמשים, הכלי בודק את הדברים הבאים:
| קטגוריה | תיאור |
|---|---|
| תקינות האשכול |
|
| הגדרות אישיות |
|
הכלי בודק את הדברים הבאים לפני שמשדרגים אשכול אדמין:
| קטגוריה | תיאור |
|---|---|
| תקינות האשכול | מאמת את PodDisruptionBudgets (PDBs) בכל מרחבי השמות של אשכול האדמין. |
| הגדרות אישיות |
|
הכנה להפעלת הכלי
משדרגים את תחנת העבודה של האדמין, אם עדיין לא עשיתם את זה.
מריצים את הפקודה
gkectl prepareכדי לייבא תמונות של מערכת ההפעלה אל vSphere, אם עדיין לא עשיתם זאת:gkectl prepare \ --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \ --kubeconfig ADMIN_CLUSTER_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
TARGET_VERSION: גרסת הפאץ' של Google Distributed Cloud שאליה רוצים לשדרג. הפורמט של מספר הגרסה צריך להיות גרסת תיקון מלאה, כמו1.13.10-gke.42.
ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ ה-kubeconfig של אשכול האדמין.
אם אתם משתמשים במאגר פרטי, הורידו את קובץ האימג' של הקונטיינר לבדיקה המוקדמת עם ה-digest של Docker שסופק, והעלו את קובץ האימג' למאגר הפרטי. אם אתם לא משתמשים במאגר פרטי, דלגו לשלב הבא.
export SRC_IMAGE=gcr.io/gke-on-prem-release/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234 export DST_IMAGE=REGISTRY_ADDRESS/preflight:$(date +%Y-%m%d-%H%M%S) docker pull $SRC_IMAGE docker tag $SRC_IMAGE $DST_IMAGE docker push $DST_IMAGEמחליפים את
REGISTRY_ADDRESSבכתובת של הרישום הפרטי.בסקריפט הבא של bash, מגדירים ערכים ל-placeholders האלה:
ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ ה-kubeconfig של אשכול האדמין.
REGISTRY_ADDRESS: אם אשכול האדמין משתמש במאגר פרטי, זוהי כתובת המאגר הפרטי שציינתם בשלב הקודם. אם אתם לא משתמשים במרשם פרטי, צריך לציין את המרשם הציבורי:gcr.io/gke-on-prem-release
#!/bin/bash UPGRADE_TARGET_VERSION=${1} CLUSTER_NAME=${2} ADMIN_KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG REGISTRY_ADDRESS=REGISTRY_ADDRESS pre_upgrade_namespace=kube-system if [[ -z "$CLUSTER_NAME" ]] then echo "Running the pre-ugprade tool before admin cluster upgrade" else echo "Running the pre-ugprade tool before user cluster upgrade" pre_upgrade_namespace=$CLUSTER_NAME-gke-onprem-mgmt fi kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: pre-upgrade-job namespace: $pre_upgrade_namespace EOF kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: creationTimestamp: null name: pre-upgrade-job-rolebinding-in-$pre_upgrade_namespace roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: onprem-user-cluster-controller-role subjects: - kind: ServiceAccount name: pre-upgrade-job namespace: $pre_upgrade_namespace EOF kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: batch/v1 kind: Job metadata: name: pre-upgrade-$(date +%Y-%m%d-%H%M%S) namespace: $pre_upgrade_namespace labels: onprem.cluster.gke.io/job-usage: preflight spec: ttlSecondsAfterFinished: 2592000 backoffLimit: 2 template: metadata: labels: onprem.cluster.gke.io/pod-usage: preflight spec: containers: - name: preflight image: $REGISTRY_ADDRESS/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234 imagePullPolicy: Always command: - /preflight - --upgrade-target-version - "$UPGRADE_TARGET_VERSION" - --cluster-name - "$CLUSTER_NAME" - --scenario - pre-upgrade restartPolicy: Never serviceAccountName: pre-upgrade-job imagePullSecrets: - name: private-registry-creds EOFשומרים את סקריפט ה-Bash שלמעלה בקובץ בשם
pre-upgrade.shוהופכים אותו לקובץ הפעלה:chmod +x pre-upgrade.sh
הפעלת הסקריפט
הארגומנטים שאתם מספקים כשמריצים את הסקריפט תלויים בשאלה אם אתם משדרגים אשכול משתמשים או אשכול אדמין:
- לפני שמשדרגים אשכול אדמין, מריצים את הסקריפט באופן הבא:
./pre-upgrade.sh TARGET_VERSION- לפני שמשדרגים אשכול משתמשים:
./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAMEמחליפים את
USER_CLUSTER_NAMEבשם של אשכול המשתמש שרוצים לשדרג.הפלט אמור להיראות כך:
job.batch/pre-upgrade-2023-0822-213551 createdמריצים את הפקודה הבאה ב-Pods שמנוהלים על ידי המשימה כדי לקבל רשימה של תוצאות האימות.
kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \ --kubeconfig ADMIN_CLUSTER_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
JOB_NAME: זהו שם המשימה שהסקריפט מוציא כפלט מהשלב הקודם.
JOB_NAMESPACE: הערך שאתם מגדירים תלוי בסוג האשכול שאתם משדרגים – אשכול אדמין או אשכול משתמשים. אם משדרגים אשכול אדמין, מציינים אתkube-system. אם משדרגים אשכול משתמשים, צריך לצייןUSER_CLUSTER_NAME-gke-onprem-mgmt.
ממתינים כמה דקות עד שהעבודה תושלם או עד שהיא תגיע למגבלת ההשהיה לפני ניסיון חוזר (backoff) ותיכשל. בתוצאות, בודקים אם יש סימון
Reasonליד בדיקה כלשהי עם הסטטוסWarning,UnknownאוFailure, כדי לראות אם אפשר לפתור את הבעיה.לפני שמשדרגים את האשכולות, מריצים את הפקודה הבאה כדי למחוק את המשימה:
kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG