Kubernetes - API



Kubernetes API 作為系統宣告式配置模式的基礎。Kubectl 命令列工具可用於建立、更新、刪除和獲取 API 物件。Kubernetes API 充當 Kubernetes 不同元件之間的通訊器。

向 Kubernetes 新增 API

向 Kubernetes 新增新的 API 將為 Kubernetes 新增新功能,從而增強 Kubernetes 的功能。但是,與此同時,它也會增加系統的成本和可維護性。為了在成本和複雜性之間取得平衡,為此定義了幾套規則。

要新增的 API 應該對超過 50% 的使用者有用。Kubernetes 中沒有其他方法可以實現該功能。特殊情況會在 Kubernetes 社群會議上討論,然後新增 API。

API 更改

為了增強 Kubernetes 的能力,系統會不斷引入更改。Kubernetes 團隊這樣做是為了向 Kubernetes 新增功能,而不會刪除或影響系統的現有功能。

為了演示一般過程,這裡有一個(假設的)示例:

  • 使用者將 Pod 物件 POST 到 /api/v7beta1/...

  • JSON 被反序列化為 v7beta1.Pod 結構

  • 將預設值應用於 v7beta1.Pod

  • v7beta1.Pod 轉換為 api.Pod 結構

  • 驗證 api.Pod,並將任何錯誤返回給使用者

  • api.Pod 轉換為 v6.Pod(因為 v6 是最新的穩定版本)

  • v6.Pod 序列化為 JSON 並寫入 etcd

現在我們已經儲存了 Pod 物件,使用者可以使用任何受支援的 API 版本獲取該物件。例如:

  • 使用者從 /api/v5/... 獲取 Pod

  • etcd 讀取 JSON 並將其反序列化v6.Pod 結構

  • 將預設值應用於 v6.Pod

  • v6.Pod 轉換為 api.Pod 結構

  • api.Pod 轉換為 v5.Pod 結構

  • v5.Pod 序列化為 JSON 併發送給使用者

此過程的含義是必須謹慎且向後相容地進行 API 更改。

API 版本控制

為了更容易支援多個結構,Kubernetes 支援多個 API 版本,每個版本位於不同的 API 路徑,例如 /api/v1/apsi/extensions/v1beta1

Kubernetes 的版本控制標準在多個標準中定義。

Alpha 級別

  • 此版本包含 alpha(例如 v1alpha1)

  • 此版本可能存在 bug;啟用的版本可能存在 bug

  • 隨時可能取消對 bug 的支援。

  • 建議僅用於短期測試,因為可能並非一直都提供支援。

Beta 級別

  • 版本名稱包含 beta(例如 v2beta3)

  • 程式碼已完全測試,啟用的版本應該穩定。

  • 不會取消對該功能的支援;可能會有少量更改。

  • 由於後續版本中可能存在不相容的更改,因此建議僅用於非關鍵業務用途。

穩定級別

  • 版本名稱為 vX,其中 X 為整數。

  • 功能的穩定版本將在許多後續版本中出現在已釋出的軟體中。

廣告