本頁說明如何準備叢集,以升級至 GKE 1.22 版。您可以找出呼叫已淘汰 API (已在 1.22 版中移除) 的 API 用戶端,並更新這些用戶端以使用正式發布的 API。如需更多詳細資訊,請參閱 Kubernetes 淘汰 API 遷移指南。
1.22 中移除的 API
Kubernetes 1.22 版中已淘汰的 API 大多是先前的 Beta 版 API,這些 API 之後已從 Beta 版 (v1beta1
) 升級為正式發行版 (v1
)。正式發行版 API 可確保長期相容性,因此應取代已淘汰的 Beta 版 API。
您可以使用 Google Analytics API 與所有現有物件互動。
Webhook 資源
自 1.22 版起,系統不再提供 MutatingWebhookConfiguration
和 ValidatingWebhookConfiguration
的 Beta 版 API。
- 遷移資訊清單和 API 用戶端,改用 admissionregistration.k8s.io/v1 API 版本。
請參閱下表,瞭解正式版 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
建立物件時,清單中的 ID 不得重複。
CustomResourceDefinition
自 1.22 版起,系統不再提供 CustomResourceDefinition
的 Beta 版 API。
- 遷移資訊清單和 API 用戶端,改用 apiextensions.k8s.io/v1 API 版本。
請參閱下表,瞭解正式版 API 的重大變更:
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 版本。
請參閱下表,瞭解正式版 API 的重大變更:
欄位 變更 spec.group
已重新命名為「 spec.groups
」。
CertificateSigningRequest
自 1.22 版起,系統不再提供 CertificateSigningRequest
的 Beta 版 API。
- 遷移資訊清單和 API 用戶端,改用 certificates.k8s.io/v1 API 版本。
請參閱下表,瞭解正式版 API 的重大變更:
欄位 變更 spec.signerName
對於要求憑證的 API 用戶端,這個欄位為必填 (請參閱已知的 Kubernetes 簽署者),且不允許透過 certificates.k8s.io/v1
API 建立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 叢集不再提供 Beta 版 API 版本 (extensions/v1beta1
和 networking.k8s.io/v1beta1
) 的 Ingress
。
不過,如果叢集是在 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 版本。
請參閱下表,瞭解正式版 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 說明文件: