בדף הזה מוסבר איך להכין אשכולות לשדרוגים ל-GKE בגרסה 1.22. תוכלו למצוא לקוחות API שמבצעים קריאות לממשקי API שיצאו משימוש והוסרו בגרסה 1.22 ולעדכן את הלקוחות האלה כך שישתמשו בממשקי API בגרסת GA. מידע מפורט יותר זמין במדריך להעברת נתונים של API שהוצא משימוש ב-Kubernetes.
ממשקי API שהוסרו בגרסה 1.22
רוב ממשקי ה-API שהוצאו משימוש ב-Kubernetes גרסה 1.22 הם ממשקי API שהיו בגרסת בטא ועברו מאז מגרסת בטא (v1beta1) לגרסה זמינה לכלל המשתמשים (GA) (v1). ממשקי ה-API בגרסת GA מספקים התחייבויות תאימות לטווח ארוך יותר, ומומלץ להשתמש בהם במקום בממשקי ה-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/v1API.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 ואילך.
עם זאת, באשכולות שנוצרו בגרסה 1.21 או בגרסאות קודמות של GKE ושודרגו לגרסה 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השם של שדות מסוג servicePortבשרת העורפי השתנה ל-service.port.number. השם של שדות מחרוזת ב-backendservicePortמשתנה ל-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
מניפסט v1
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 שמבצעים קריאות כתיבה ל-APIs שיצאו משימוש
במקרה של אשכולות שמופעל בהם 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 ששולחים קריאות קריאה ל-APIs שיצאו משימוש
כברירת מחדל, ביומני הביקורת מוצגות רק קריאות כתיבה לממשקי ה-API שהוצאו משימוש. כדי להציג גם קריאות קריאה לממשקי API שיצאו משימוש, צריך להגדיר יומני ביקורת של גישה לנתונים.
פועלים לפי ההוראות להגדרת יומני ביקורת של גישה לנתונים באמצעות מסוף Google Cloud . במסוף Google Cloud , בוחרים באפשרות Kubernetes Engine API. בכרטיסייה Log Types (סוגי יומנים) בחלונית המידע,
בוחרים באפשרות Admin Read ובאפשרות Data Read.
אחרי שמפעילים את היומנים האלה, אפשר להשתמש בשאילתה המקורית כדי לראות גם קריאות קריאה וגם קריאות כתיבה לממשקי ה-API שהוצאו משימוש.
שדרוג רכיבים של צד שלישי
תובנות לגבי הוצאה משימוש יכולות להציג תוצאות לגבי סוכנים של צד שלישי שמבצעים קריאות לממשקי API שהוצאו משימוש בצביר שלכם.
כדי לפתור את הבעיות שזוהו בתובנות האלה, נסו את הפתרונות הבאים:
- כדאי לפנות לספק התוכנה של הצד השלישי כדי לקבל גרסה מעודכנת.
- משדרגים את תוכנת הצד השלישי לגרסה העדכנית. אם אי אפשר לשדרג את התוכנה, צריך לבדוק אם שדרוג GKE לגרסה שבה הוסרו ממשקי ה-API שהוצאו משימוש ישבש את השירות.
מומלץ לבצע את השדרוג הזה ואת שדרוג הגרסה של GKE באשכול staging כדי לעקוב אחרי שיבושים לפני שמשדרגים את אשכולות הייצור.
הכנה לשדרוג לגרסה 1.22
אין צורך למחוק וליצור מחדש אף אחד מאובייקטי ה-API. כבר עכשיו אפשר לקרוא ולעדכן את כל האובייקטים הקיימים ב-API ששמורים בזיכרון באמצעות הגרסאות החדשות של ה-API. עם זאת, מומלץ להעביר את הלקוחות ואת קובצי המניפסט לפני השדרוג ל-Kubernetes 1.22. מידע נוסף זמין בקטע 'מה צריך לעשות' במדריך להעברת API שהוצא משימוש ב-Kubernetes.
אתם יכולים לראות תובנות והמלצות לגבי הוצאה משימוש כדי לקבוע אם באשכול שלכם נעשה שימוש בתכונה או ב-API של Kubernetes שהוצאו משימוש. התובנות לגבי הוצאה משימוש מבוססות על קריאות API שנצפו לממשקי API שהוצאו משימוש על ידי סוכני משתמש, ולא על ההגדרה של אובייקטים ב-Kubernetes.
עדכון אשכולות שהושפעו מהוצאה משימוש
כדי לשדרג אשכולות שהושפעו מהוצאה משימוש, פועלים לפי השלבים הבאים:
- בודקים אילו סוכני משתמש משתמשים בממשקי ה-API שהוצאו משימוש בתובנות לגבי הוצאה משימוש או ביומנים.
- צריך לעדכן את סוכני המשתמש שמשתמשים בממשקי ה-API שהוצאו משימוש כך שישתמשו בגרסאות נתמכות של API.
- מעדכנים לגרסאות האחרונות את כל התוכנות של צד שלישי שקוראות לממשקי API שהוצאו משימוש.
- כדי להקטין את הסיכון לשיבושים כשממשקי API שהוצאו משימוש כבר לא זמינים, מומלץ לשדרג אשכול בדיקה ולבדוק את האפליקציה בסביבת בדיקה לפני שמשדרגים את אשכול הייצור.
- אחרי שמעדכנים את כל סוכני המשתמשים, מערכת GKE מחכה 30 ימים עד שלא יזוהה יותר שימוש בממשקי API שהוצאו משימוש, ואז מבטלת את החסימה של שדרוגים אוטומטיים. שדרוגים אוטומטיים מתבצעים בהתאם ללוח זמנים לפרסום.
- אם אי אפשר לעדכן את סוכן המשתמש המושפע, צריך לשדרג אשכול בדיקה נפרד כדי לבדוק אם השדרוג גורם לשיבושים. אם השדרוג לא גורם לשיבושים, אפשר לשדרג את האשכול באופן ידני.
משאבים
מידע נוסף זמין במסמכי התיעוד של Kubernetes ב-OSS:
- בלוג Kubernetes: הסרת API בגרסה 1.22 של Kubernetes
- הערות לגבי הגרסה Kubernetes 1.22
- מדריך להעברה של API שיצא משימוש ב-Kubernetes