本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

1.16 中移除的已棄用 API:你需要知道什麼

隨著 Kubernetes API 的發展,API 會定期進行重組或升級。當 API 發展時,舊的 API 將被廢棄並最終移除。

v1.16 版本將停止提供以下廢棄的 API 版本,轉而使用更新、更穩定的 API 版本

  • extensions/v1beta1 API 版本中的 NetworkPolicy 不再提供
    • 遷移到使用 networking.k8s.io/v1 API 版本,該版本自 v1.8 起可用。現有持久化資料可以透過新版本檢索/更新。
  • extensions/v1beta1 API 版本中的 PodSecurityPolicy 不再提供
    • 遷移到使用 policy/v1beta1 API,該版本自 v1.10 起可用。現有持久化資料可以透過新版本檢索/更新。
  • extensions/v1beta1apps/v1beta2 API 版本中的 DaemonSet 不再提供
    • 遷移到使用 apps/v1 API 版本,該版本自 v1.9 起可用。現有持久化資料可以透過新版本檢索/更新。
    • 主要變化
      • spec.templateGeneration 已移除
      • spec.selector 現在是必需的,並且建立後不可變;使用現有模板標籤作為選擇器以實現無縫升級
      • spec.updateStrategy.type 現在預設為 RollingUpdateextensions/v1beta1 中的預設值為 OnDelete
  • extensions/v1beta1apps/v1beta1apps/v1beta2 API 版本中的 Deployment 不再提供
    • 遷移到使用 apps/v1 API 版本,該版本自 v1.9 起可用。現有持久化資料可以透過新版本檢索/更新。
    • 主要變化
      • spec.rollbackTo 已移除
      • spec.selector 現在是必需的,並且建立後不可變;使用現有模板標籤作為選擇器以實現無縫升級
      • spec.progressDeadlineSeconds 現在預設為 600 秒(extensions/v1beta1 中的預設值為無截止日期)
      • spec.revisionHistoryLimit 現在預設為 10apps/v1beta1 中的預設值為 2extensions/v1beta1 中的預設值為保留所有)
      • maxSurgemaxUnavailable 現在預設為 25%extensions/v1beta1 中的預設值為 1
  • apps/v1beta1apps/v1beta2 API 版本中的 StatefulSet 不再提供
    • 遷移到使用 apps/v1 API 版本,該版本自 v1.9 起可用。現有持久化資料可以透過新版本檢索/更新。
    • 主要變化
      • spec.selector 現在是必需的,並且建立後不可變;使用現有模板標籤作為選擇器以實現無縫升級
      • spec.updateStrategy.type 現在預設為 RollingUpdateapps/v1beta1 中的預設值為 OnDelete
  • extensions/v1beta1apps/v1beta1apps/v1beta2 API 版本中的 ReplicaSet 不再提供
    • 遷移到使用 apps/v1 API 版本,該版本自 v1.9 起可用。現有持久化資料可以透過新版本檢索/更新。
    • 主要變化
      • spec.selector 現在是必需的,並且建立後不可變;使用現有模板標籤作為選擇器以實現無縫升級

v1.22 版本將停止提供以下廢棄的 API 版本,轉而使用更新、更穩定的 API 版本

  • extensions/v1beta1 API 版本中的 Ingress 將不再提供
    • 遷移到使用 networking.k8s.io/v1beta1 API 版本,該版本自 v1.14 起可用。現有持久化資料可以透過新版本檢索/更新。

如何操作

Kubernetes 1.16 將於 2019 年 9 月釋出,請務必立即審計您的配置和整合!

  • 更改 YAML 檔案以引用新的 API
  • 更新自定義整合和控制器以呼叫新的 API
  • 更新第三方工具(Ingress 控制器、持續交付系統)以呼叫新的 API

遷移到新的 Ingress API 只需更改 API 路徑——API 欄位保持不變。但是,遷移其他資源(例如 Deployment)將需要根據更改的欄位進行一些更新。您可以使用 kubectl convert 命令自動轉換現有物件:kubectl convert -f <file> --output-version <group>/<version>

例如,要將較舊的 Deployment 轉換為 apps/v1,您可以執行:kubectl convert -f ./my-deployment.yaml --output-version apps/v1 請注意,這可能會使用非理想的預設值。要了解有關特定資源的更多資訊,請檢視 Kubernetes API 參考

您可以透過停用上述資源的 apiserver 來測試您的叢集,以模擬即將到來的移除。將以下標誌新增到 apiserver 啟動引數中

--runtime-config=apps/v1beta1=false,apps/v1beta2=false,extensions/v1beta1/daemonsets=false,extensions/v1beta1/deployments=false,extensions/v1beta1/replicasets=false,extensions/v1beta1/networkpolicies=false,extensions/v1beta1/podsecuritypolicies=false

想了解更多?

廢棄的 API 會在 Kubernetes 發行說明中公佈。您可以在 1.141.15 中檢視這些公告。

您可以在我們的廢棄策略文件中閱讀更多關於 Kubernetes API 和其他 Kubernetes 元件的廢棄策略。廢棄策略因元件(例如,主要 API 與管理 CLI)和成熟度(alpha、beta 或 GA)而異。

這些詳細資訊也已在 Kubernetes 1.14 和 1.15 釋出時在 kubernetes-dev 郵件列表中之前宣佈。來自 Jordan Liggitt

In case you missed it in the 1.15.0 release notes, the timelines for deprecated resources in the extensions/v1beta1, apps/v1beta1, and apps/v1beta2 API groups to no longer be served by default have been updated:

* NetworkPolicy resources will no longer be served from extensions/v1beta1 by default in v1.16. Migrate to the networking.k8s.io/v1 API, available since v1.8. Existing persisted data can be retrieved/updated via the networking.k8s.io/v1 API.
* PodSecurityPolicy resources will no longer be served from extensions/v1beta1 by default in v1.16. Migrate to the policy/v1beta1 API, available since v1.10. Existing persisted data can be retrieved/updated via the policy/v1beta1 API.
* DaemonSet, Deployment, StatefulSet, and ReplicaSet resources will no longer be served from extensions/v1beta1, apps/v1beta1, or apps/v1beta2 by default in v1.16. Migrate to the apps/v1 API, available since v1.9. Existing persisted data can be retrieved/updated via the apps/v1 API.

To start a v1.15.0 API server with these resources disabled to flush out dependencies on these deprecated APIs, and ensure your application/manifests will work properly against the v1.16 release, use the following --runtime-config argument:

--runtime-config=apps/v1beta1=false,apps/v1beta2=false,extensions/v1beta1/daemonsets=false,extensions/v1beta1/deployments=false,extensions/v1beta1/replicasets=false,extensions/v1beta1/networkpolicies=false,extensions/v1beta1/podsecuritypolicies=false