‫Kubernetes 1.22 deprecated APIs

בדף הזה מוסבר איך להכין אשכולות לשדרוגים ל-GKE בגרסה 1.22. תוכלו למצוא לקוחות API שמבצעים קריאות לממשקי API שיצאו משימוש והוסרו בגרסה 1.22 ולעדכן את הלקוחות האלה כדי שישתמשו בממשקי API של GA. מידע מפורט יותר זמין במדריך למיגרציה של ממשקי API שיצאו משימוש ב-Kubernetes.

ממשקי API שהוסרו בגרסה 1.22

רוב ממשקי ה-API שהוצאו משימוש ב-Kubernetes גרסה 1.22 הם ממשקי Beta API לשעבר, שעברו מאז מגרסת בטא (v1beta1) לגרסת GA (v1). ממשקי ה-API בגרסת GA מספקים ערבויות תאימות לטווח ארוך יותר, ומומלץ להשתמש בהם במקום בממשקי ה-Beta API שהוצאו משימוש.

אפשר לבצע פעולות בכל האובייקטים הקיימים באמצעות ממשקי ה-API של GA.

פריטים מסוג webhook

גרסת הבטא של ממשק API של MutatingWebhookConfiguration ושל ValidatingWebhookConfiguration לא זמינה יותר החל מגרסה 1.22.

  • מעבירים את קובצי המניפסט ואת לקוחות ה-API לשימוש בגרסת ה-API‏ admissionregistration.k8s.io/v1.
  • בטבלה הבאה מתוארים השינויים הבולטים בגרסת GA API:

    שדה שינוי
    webhooks[*].failurePolicy ברירת המחדל השתנתה מ-Ignore ל-Fail.
    webhooks[*].matchPolicy ברירת המחדל השתנתה מ-Exact ל-Equivalent.
    webhooks[*].timeoutSeconds ברירת המחדל השתנתה מ-30s ל-10s.
    webhooks[*].sideEffects ערך ברירת המחדל הוסר, ועכשיו השדה הוא שדה חובה. מותר להשתמש רק ב-None וב-NoneOnDryRun.
    webhooks[*].admissionReviewVersions ערך ברירת המחדל הוסר והשדה הוא עכשיו שדה חובה (הגרסאות הנתמכות של AdmissionReview הן v1 ו-v1beta1).
    webhooks[*].name המזהה חייב להיות ייחודי ברשימה של אובייקטים שנוצרו באמצעות admissionregistration.k8s.io/v1.

CustomResourceDefinition

גרסת הבטא של API‏ CustomResourceDefinition לא זמינה יותר החל מגרסה 1.22.

  • מעבירים את קובצי המניפסט ואת לקוחות ה-API לשימוש בגרסת apiextensions.k8s.io/v1 של ה-API.
  • בטבלה הבאה מתוארים השינויים הבולטים בגרסת GA API:

    שדה שינוי
    spec.scope האפשרות Namespaced כבר לא מוגדרת כברירת מחדל. חובה לציין את הערך באופן מפורש.
    spec.version הוסר. במקום זאת, אתם צריכים להשתמש ב-spec.versions.
    spec.validation הוסר. במקום זאת, אתם צריכים להשתמש ב-spec.versions[*].schema.
    spec.subresources הוסר. במקום זאת, אתם צריכים להשתמש ב-spec.versions[*].subresources.
    spec.additionalPrinterColumns הוסר. במקום זאת, אתם צריכים להשתמש ב-spec.versions[*].additionalPrinterColumns.
    spec.conversion.webhookClientConfig הועבר אל spec.conversion.webhook.clientConfig.
    spec.conversion.conversionReviewVersions הועבר אל spec.conversion.webhook.conversionReviewVersions.
    spec.versions[*].schema.openAPIV3Schema עכשיו נדרש כשיוצרים אובייקטים של גרסה 1 של CustomResourceDefinition, והוא חייב להיות סכימה מבנית.
    spec.preserveUnknownFields הערך true אסור כשיוצרים אובייקטים בגרסה 1 של CustomResourceDefinition. הערך צריך להיות מוגדר בהגדרות הסכימה בתור x-kubernetes-preserve-unknown-fields: true.
    additionalPrinterColumns ב-additionalPrinterColumns פריטים, השם של השדה JSONPath שונה ל-jsonPath.

APIService

גרסת הבטא של API‏ APIService לא זמינה יותר החל מגרסה 1.22. מעבירים מניפסטים ולקוחות API לשימוש בגרסת API‏ apiregistration.k8s.io/v1.

TokenReview

גרסת הבטא של API‏ TokenReview לא זמינה יותר החל מגרסה 1.22. מעבירים את המניפסטים ואת לקוחות ה-API לשימוש בגרסת API‏ authentication.k8s.io/v1.

משאבי SubjectAccessReview

גרסת הבטא של ה-API של LocalSubjectAccessReview,‏ SelfSubjectAccessReview ו-SubjectAccessReview לא זמינה יותר החל מגרסה 1.22.

  • מעבירים את קובצי המניפסט ואת לקוחות ה-API לשימוש בגרסת ה-API‏ authorization.k8s.io/v1.
  • בטבלה הבאה מתוארים השינויים הבולטים בגרסת GA API:

    שדה שינוי
    spec.group השם החדש הוא spec.groups.

CertificateSigningRequest

גרסת הבטא של API‏ CertificateSigningRequest לא זמינה יותר החל מגרסה 1.22.

  • צריך להעביר את קובצי המניפסט ואת לקוחות ה-API לשימוש בגרסת API‏ certificates.k8s.io/v1.
  • בטבלה הבאה מתוארים השינויים הבולטים בגרסת GA API:

    שדה שינוי
    spec.signerName השדה הזה נדרש ללקוחות API שמבקשים אישורים (ראו חתימות ידועות של Kubernetes), ואסור ליצור בקשות ל-kubernetes.io/legacy-unknown דרך certificates.k8s.io/v1 API.
    spec.usages השדה הזה נדרש ללקוחות API שמבקשים אישורים. בשדה הזה לא יכולים להיות ערכים כפולים, והוא יכול להכיל רק שימושים מוכרים.
    status.conditions עבור לקוחות API שמאשרים או חותמים על אישורים, השדה הזה לא יכול להכיל סוגים כפולים.
    status.conditions[*].status השדה הזה נדרש עכשיו ללקוחות API שמאשרים או חותמים על אישורים.
    status.certificate עבור לקוחות API שמאשרים או חותמים על אישורים, השדה הזה צריך להיות בקידוד PEM ולהכיל רק בלוקים של CERTIFICATE.

פרק זמן לעיבוד

גרסת הבטא של API‏ Lease לא זמינה יותר החל מגרסה 1.22. צריך להעביר את קובצי המניפסט ואת לקוחות ה-API לשימוש בגרסת API‏ coordination.k8s.io/v1.

Ingress (זמין עד גרסה 1.23 לאשכולות שנוצרו בגרסה 1.21 או בגרסאות קודמות)

גרסאות הבטא של ממשקי ה-API (‏extensions/v1beta1 ו-networking.k8s.io/v1beta1) של Ingress לא מוגשות יותר לאשכולות GKE שמריצים גרסה 1.22 ואילך, אם האשכול נוצר בגרסה 1.22 ואילך.

עם זאת, באשכולות שנוצרו ב-GKE בגרסה 1.21 או בגרסאות קודמות ושודרגו לגרסה 1.22 בגרסת התיקון 1.22.7-gke.300 או בגרסאות חדשות יותר, עדיין אפשר להשתמש בגרסאות הבטא של ה-API עד שהאשכול ישודרג לגרסה 1.23. זהו חריג חד-פעמי עבור אשכולות ישנים, כדי לתת לכם יותר זמן להעביר את האשכולות שלכם משימוש בגרסאות ה-API האלה, שהוסרו מ-Kubernetes בקוד פתוח בגרסה 1.22.

אשכולות שמריצים את GKE בגרסה 1.23 ואילך לא יפעילו יותר את ממשקי ה-API של Ingress בטא שהוצאו משימוש. אי אפשר יותר להחיל מניפסטים שמשתמשים בגרסאות האלה של API. אובייקטים שנשמרו בעבר ממשיכים לפעול, ואפשר לצפות בהם ולעדכן אותם באמצעות גרסאות ה-API החדשות, לפני השדרוג לגרסה 1.23 ואחריו.

  • מעבירים את המניפסטים ואת לקוחות ה-API לשימוש בגרסת API‏ networking.k8s.io/v1.
  • בטבלה הבאה מתוארים השינויים הבולטים בגרסת GA API:

    שדה שינוי
    spec.backend השם החדש הוא spec.defaultBackend.
    בק-אנד serviceName השם החדש הוא service.name.
    servicePort השמות של שדות מספריים ב-Backend servicePort ישתנו ל-service.port.number. השם של שדות מחרוזת ב-backend‏ servicePort משתנה ל-service.port.name.
    pathType עכשיו נדרש לכל נתיב שצוין. הערך יכול להיות: Prefix,‏ Exact או ImplementationSpecific. כדי להתאים להתנהגות הלא מוגדרת של v1beta1, משתמשים ב-ImplementationSpecific.

המניפסטים הבאים מתארים את אותו Ingress ב-v1 וב-v1beta1:

מניפסט v1beta1

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example
spec:
  backend:
    serviceName: default-backend
    servicePort: 80
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

מניפסט גרסה 1

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
spec:
  defaultBackend:
    service:
      name: default-backend
      port:
        number: 80
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: ImplementationSpecific
        backend:
          service:
            name: test
            port:
              number: 80

אפשר להשתמש בשאילתה הבאה כדי לזהות לקוחות שניגשים לממשקי ה-API של Ingress v1beta1 באשכולות שבהם מופעל Google Cloud Observability:

resource.type="k8s_cluster"
resource.labels.cluster_name="$CLUSTER_NAME"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.request.apiVersion=("extensions/v1beta1" OR "networking.k8s.io/v1beta1")
protoPayload.request.kind="Ingress"
NOT ("kube-system")

IngressClass

גרסת הבטא של API‏ IngressClass לא זמינה יותר החל מגרסה 1.22. מעבירים מניפסטים ולקוחות API לשימוש בגרסת API‏ networking.k8s.io/v1.

משאבי RBAC

גרסת ה-API בטא של ClusterRole,‏ ClusterRoleBinding,‏ Role ו-RoleBinding לא זמינה יותר החל מגרסה 1.22. מעבירים את קובצי המניפסט ואת לקוחות ה-API לשימוש בגרסת ה-API‏ rbac.authorization.k8s.io/v1.

PriorityClass

גרסת הבטא של API‏ PriorityClass לא זמינה יותר החל מגרסה 1.22. מעבירים את קובצי המניפסט ואת לקוחות ה-API לשימוש בגרסת ה-API‏ scheduling.k8s.io/v1.

משאבי אחסון

גרסת ה-API בטא של CSIDriver,‏ CSINode,‏ StorageClass ו-VolumeAttachment לא זמינה יותר החל מגרסה 1.22. מעבירים את קובצי המניפסט ואת לקוחות ה-API לשימוש בגרסת API‏ storage.k8s.io/v1.

חיפוש אשכולות באמצעות ממשקי API שהוצאו משימוש

בתובנות לגבי הוצאה משימוש אפשר לראות באילו אשכולות נעשה שימוש בממשקי API שהוצאו משימוש. תובנות לגבי הוצאה משימוש מספקות גם מידע כמו אילו לקוחות API קוראים לממשקי ה-API שהוצאו משימוש באשכול שלכם.

אפשר גם להשתמש ביומני ביקורת כדי לגלות אילו לקוחות מבצעים קריאות לממשקי API שיצאו משימוש.

איתור לקוחות API שמבצעים קריאות כתיבה ל-API שיצאו משימוש

במקרה של אשכולות שמופעל בהם Google Cloud Observability, אפשר להשתמש בשאילתת יומן הביקורת של פעילות האדמין הבאה כדי להציג את השימוש בממשקי API שהוצאו משימוש על ידי סוכני משתמש שלא מנוהלים על ידי Google:

resource.type="k8s_cluster"
labels."k8s.io/removed-release"="DEPRECATED_API_MINOR_VERSION"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.authenticationInfo.principalEmail!~("system:serviceaccount:kube-system:")

מחליפים את DEPRECATED_API_MINOR_VERSION בגרסה המשנית שבה הוסר ה-API שהוצא משימוש, לדוגמה 1.22.

יומני הביקורת Admin Activity מופעלים אוטומטית באשכולות GKE. בעזרת השאילתה הזו, ביומנים מוצגים סוכני משתמש שמבצעים קריאות כתיבה לממשקי ה-API שהוצאו משימוש.

איתור לקוחות API שמבצעים קריאות קריאה ל-API שהוצאו משימוש

כברירת מחדל, ביומני הביקורת מוצגות רק קריאות כתיבה אל ממשקי ה-API שהוצאו משימוש. כדי להציג גם קריאות קריאה לממשקי API שיצאו משימוש, צריך להגדיר יומני ביקורת של גישה לנתונים.

פועלים לפי ההוראות להגדרת יומני ביקורת של גישה לנתונים באמצעות מסוף Google Cloud . במסוף Google Cloud , בוחרים באפשרות Kubernetes Engine API. בכרטיסייה Log Types (סוגי יומנים) בחלונית המידע, בוחרים באפשרות Admin Read ובאפשרות Data Read.

אחרי שמפעילים את היומנים האלה, אפשר להשתמש בשאילתה המקורית כדי לראות גם קריאות קריאה וגם קריאות כתיבה לממשקי ה-API שהוצאו משימוש.

שדרוג רכיבים של צד שלישי

תובנות לגבי הוצאה משימוש יכולות להציג תוצאות לגבי סוכנים של צד שלישי שמבצעים קריאות לממשקי API שהוצאו משימוש באשכול שלכם.

כדי לפתור את הבעיות שזוהו בתובנות האלה, אפשר לנסות את השלבים הבאים:

  1. כדאי לבדוק עם ספק התוכנה של הצד השלישי אם יש גרסה מעודכנת.
  2. משדרגים את תוכנת הצד השלישי לגרסה העדכנית ביותר. אם אי אפשר לשדרג את התוכנה, כדאי לבדוק אם שדרוג GKE לגרסה שבה הוסרו ממשקי ה-API שהוצאו משימוש ישבית את השירות.

מומלץ לבצע את השדרוג הזה ואת שדרוג הגרסה של GKE באשכול staging כדי לעקוב אחרי שיבושים לפני שמשדרגים את אשכולות הייצור.

הכנה לשדרוג לגרסה 1.22

אין צורך למחוק וליצור מחדש אף אחד מאובייקטי ה-API. כבר עכשיו אפשר לקרוא ולעדכן את כל האובייקטים הקיימים של API שנשמרו באמצעות הגרסאות החדשות של ה-API. עם זאת, מומלץ להעביר את הלקוחות ואת קובצי המניפסט לפני השדרוג ל-Kubernetes 1.22. מידע נוסף זמין בקטע 'מה צריך לעשות' במדריך להעברת API שהוצא משימוש ב-Kubernetes.

אתם יכולים לראות תובנות והמלצות לגבי הוצאה משימוש כדי לקבוע אם באשכול שלכם נעשה שימוש בתכונה או ב-API של Kubernetes שהוצאו משימוש. תובנות לגבי הוצאה משימוש מבוססות על קריאות API שנצפו ל-APIs שהוצאו משימוש על ידי סוכני משתמש, ולא על ההגדרה של אובייקטים של Kubernetes.

עדכון אשכולות שהושפעו מהוצאה משימוש

כדי לשדרג אשכולות שהושפעו מהוצאה משימוש, פועלים לפי השלבים הבאים:

  1. בודקים אילו סוכני משתמשים משתמשים בממשקי ה-API שהוצאו משימוש בתובנות לגבי הוצאה משימוש או ביומנים.
  2. צריך לעדכן את סוכני המשתמש שמשתמשים בממשקי ה-API שהוצאו משימוש כך שישתמשו בגרסאות נתמכות של API.
  3. מעדכנים לגרסאות האחרונות את כל תוכנות הצד השלישי שקוראות לממשקי API שיצאו משימוש.
  4. כדי להפחית את הסיכון לשיבושים כשממשקי API שהוצאו משימוש כבר לא זמינים, כדאי לשדרג אשכול בדיקה ולבדוק את האפליקציה בסביבת בדיקה לפני שמשדרגים את אשכול הייצור.
  5. אחרי שמעדכנים את כל סוכני המשתמשים, מערכת GKE מחכה עד שלא תזהה יותר שימוש בממשקי API שהוצאו משימוש במשך 30 ימים, ואז מבטלת את החסימה של השדרוגים האוטומטיים. שדרוגים אוטומטיים מתבצעים בהתאם ללוח זמנים לפרסום.
  6. אם אי אפשר לעדכן סוכן משתמש מושפע, אפשר לשדרג אשכול בדיקה נפרד כדי לבדוק אם השדרוג גורם לשיבושים. אם השדרוג לא גורם לשיבושים, אפשר לשדרג את האשכול באופן ידני.

משאבים

מידע נוסף זמין במסמכי התיעוד של Kubernetes ב-OSS: