本頁說明如何準備叢集,以便升級至 GKE 1.22 版。您可以找出呼叫已淘汰 API (已在 1.22 版中移除) 的 API 用戶端,並更新這些用戶端以使用正式發布的 API。如需更多詳細資訊,請參閱 Kubernetes 淘汰的 API 遷移指南。
1.22 版中移除的 API
Kubernetes 1.22 版中淘汰的 API 大多是已從 Beta 版 (v1beta1) 升級為正式版 (v1) 的 API。正式版 API 可確保長期相容性,因此請改用正式版 API,不要再使用已淘汰的 Beta 版 API。
您可以使用 Google Analytics API 與所有現有物件互動。
Webhook 資源
自 1.22 版起,系統不再提供 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 的 Beta 版 API。
- 遷移資訊清單和 API 用戶端,改用 admissionregistration.k8s.io/v1 API 版本。
請參閱下表,瞭解 Google Analytics 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
自 1.22 版起,系統不再提供 CustomResourceDefinition 的 Beta 版 API。
- 遷移資訊清單和 API 用戶端,改用 apiextensions.k8s.io/v1 API 版本。
請參閱下表,瞭解 Google Analytics 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建立第 1 版 CustomResourceDefinition物件時,不允許使用值true。值必須在結構定義中指定為x-kubernetes-preserve-unknown-fields: true。additionalPrinterColumnsadditionalPrinterColumns項目中的「JSONPath」欄位已重新命名為「jsonPath」。
APIService
自 1.22 版起,系統不再提供 APIService 的 Beta 版 API。遷移資訊清單和 API 用戶端,改用 apiregistration.k8s.io/v1 API 版本。
TokenReview
自 1.22 版起,系統不再提供 TokenReview 的 Beta 版 API。請遷移資訊清單和 API 用戶端,改用 authentication.k8s.io/v1 API 版本。
SubjectAccessReview 資源
自 1.22 版起,系統不再提供 LocalSubjectAccessReview、SelfSubjectAccessReview 和 SubjectAccessReview 的 Beta 版 API。
- 請遷移資訊清單和 API 用戶端,改用 authorization.k8s.io/v1 API 版本。
請參閱下表,瞭解 Google Analytics API 版本的重大異動:
欄位 變更 spec.group已重新命名為「 spec.groups」。
CertificateSigningRequest
自 1.22 版起,系統不再提供 CertificateSigningRequest 的 Beta 版 API。
- 請遷移資訊清單和 API 用戶端,改用 certificates.k8s.io/v1 API 版本。
請參閱下表,瞭解 Google Analytics API 版本的重大異動:
欄位 變更 spec.signerName對於要求憑證的 API 用戶端,這個欄位為必填 (請參閱已知的 Kubernetes 簽署者),且不允許透過 certificates.k8s.io/v1API 建立kubernetes.io/legacy-unknown的要求。spec.usages如果 API 用戶端要求憑證,則必須填寫這個欄位。這個欄位不得包含重複值,且只能包含已知用途。 status.conditions如果是核准或簽署憑證的 API 用戶端,這個欄位不得含有重複類型。 status.conditions[*].status對於核准或簽署憑證的 API 用戶端,這個欄位現在為必填。 status.certificate如果是核准或簽署憑證的 API 用戶端,這個欄位必須經過 PEM 編碼,且只能包含 CERTIFICATE區塊。
租賃
自 1.22 版起,系統不再提供 Lease 的 Beta 版 API。將資訊清單和 API 用戶端遷移至 coordination.k8s.io/v1 API 版本。
Ingress (適用於 1.21 版或更早版本建立的叢集,但只到 1.23 版為止)
如果叢集是在 1.22 以上版本中建立,則執行 1.22 以上版本的 GKE 叢集不再提供 Ingress 的 Beta 版 API 版本 (extensions/v1beta1 和 networking.k8s.io/v1beta1)。
不過,如果叢集是在 GKE 1.21 版或更早版本中建立,並在修補程式版本 1.22.7-gke.300 以上版本中升級至 1.22 版,您仍可使用 Beta 版 API,直到叢集升級至 1.23 版為止。這是針對舊版叢集的一次性例外狀況,可讓您有更多時間遷移叢集,避免使用已從 1.22 版開放原始碼 Kubernetes 移除的 API 版本。
執行 GKE 1.23 以上版本的叢集將不再提供已淘汰的 Ingress Beta 版 API。使用這些 API 版本的資訊清單將無法再套用。升級至 1.23 版前後,先前保存的物件仍可正常運作,並可使用新版 API 查看及更新。
- 遷移資訊清單和 API 用戶端,改用 networking.k8s.io/v1 API 版本。
請參閱下表,瞭解 Google Analytics API 版本的重大異動:
欄位 變更 spec.backend已重新命名為「 spec.defaultBackend」。後端 serviceName已重新命名為「 service.name」。servicePort數字後端 servicePort欄位已重新命名為service.port.number。字串後端servicePort欄位已重新命名為service.port.name。pathType現在每個指定路徑都必須提供這項資訊。這個值可以是: Prefix、Exact或ImplementationSpecific。如要比對未定義的v1beta1行為,請使用ImplementationSpecific。
下列資訊清單說明 v1 和 v1beta1 中的相同 Ingress:
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
如果叢集已啟用 Google Cloud Observability,您可以使用下列查詢,找出存取 Ingress v1beta1 API 的用戶端:
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
自 1.22 版起,系統不再提供 IngressClass 的 Beta 版 API。遷移資訊清單和 API 用戶端,改用 networking.k8s.io/v1 API 版本。
RBAC 資源
自 1.22 版起,系統不再提供 ClusterRole、ClusterRoleBinding、Role 和 RoleBinding 的 Beta 版 API。遷移資訊清單和 API 用戶端,改用 rbac.authorization.k8s.io/v1 API 版本。
PriorityClass
自 1.22 版起,系統不再提供 PriorityClass 的 Beta 版 API。遷移資訊清單和 API 用戶端,改用 scheduling.k8s.io/v1 API 版本。
儲存空間資源
自 1.22 版起,系統不再提供 CSIDriver、CSINode、StorageClass 和 VolumeAttachment 的 Beta 版 API。遷移資訊清單和 API 用戶端,改用 storage.k8s.io/v1 API 版本。
找出使用已淘汰 API 的叢集
您可以透過淘汰項目洞察,找出使用已淘汰 API 的叢集。淘汰洞察資料也會提供資訊,例如叢集中有哪些 API 用戶端正在呼叫已淘汰的 API。
您也可以使用稽核記錄,找出呼叫已淘汰 API 的用戶端。
找出對已淘汰 API 進行寫入呼叫的 API 用戶端
如果叢集已啟用 Google Cloud Observability,您可以使用下列管理員活動稽核記錄查詢,顯示非 Google 管理的使用者代理程式使用已淘汰 API 的情況:
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。
系統會自動為 GKE 叢集啟用管理員活動稽核記錄。透過這項查詢,記錄會顯示對已淘汰 API 進行寫入呼叫的使用者代理程式。
找出對已淘汰 API 進行讀取呼叫的 API 用戶端
根據預設,稽核記錄只會顯示對已淘汰 API 的寫入呼叫。如要一併顯示對已淘汰 API 的讀取呼叫,請設定資料存取稽核記錄。
請按照說明,透過 Google Cloud 控制台設定資料存取稽核記錄。在 Google Cloud 控制台中,選取 Kubernetes Engine API。在資訊面板的「記錄類型」分頁中,選取 Admin Read 和 Data Read。
啟用這些記錄後,您現在可以使用原始查詢,查看對已淘汰 API 的讀取和寫入呼叫。
升級第三方元件
淘汰洞察可能會顯示叢集中呼叫已淘汰 API 的第三方代理程式結果。
如要解決這些洞察資料,請嘗試下列步驟:
- 請洽詢第三方軟體供應商,取得更新版本。
- 將第三方軟體升級至最新版本。如果無法升級軟體,請測試將 GKE 升級至已移除已淘汰 API 的版本,是否會導致服務中斷。
建議您先在測試叢集執行這項升級和 GKE 版本升級,監控是否有中斷情形,再升級正式環境叢集。
準備升級至 1.22 版
您不需要刪除及重新建立任何 API 物件。您可以使用新版 API 讀取及更新所有現有的持續性 API 物件。不過,建議您先遷移用戶端和資訊清單,再升級至 Kubernetes 1.22。詳情請參閱 Kubernetes 淘汰 API 遷移指南的「後續步驟」一節。
您可以查看淘汰洞察和建議,判斷叢集是否使用已淘汰的 Kubernetes 功能或 API。淘汰洞察是根據使用者代理程式對已淘汰 API 的觀察 API 呼叫,而非 Kubernetes 物件的設定。
更新受淘汰項目影響的叢集
如要升級受淘汰項目影響的叢集,請按照下列步驟操作:
- 在淘汰洞察或記錄中,查看哪些使用者代理程式使用已淘汰的 API。
- 更新使用已淘汰 API 的使用者代理程式,改用支援的 API 版本。
- 更新所有呼叫已淘汰 API 的第三方軟體至最新版本。
- 升級正式版叢集前,請先升級測試叢集,並在測試環境中測試應用程式,以免系統不再提供已淘汰的 API 時,發生中斷情形。
- 更新所有使用者代理程式後,GKE 會等待 30 天,確認不再使用已淘汰的 API,然後解除自動升級的封鎖。自動升級作業會按照發布時間表進行。
- 如果無法更新受影響的使用者代理程式,請升級獨立的測試叢集,確認升級是否會導致中斷。如果升級不會造成中斷,您可以手動升級叢集。
資源
詳情請參閱 OSS Kubernetes 說明文件: