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

Kubernetes:Kubernetes 1.10 的第一個 Beta 版本在此

Kubernetes 社群已發布 Kubernetes 1.10 的第一個 Beta 版本,這表示您現在可以試用一些新功能,並在正式發布前向發布團隊提供您的意見回饋。目前排定於 2018 年 3 月 21 日發布的版本,目標是納入十幾個全新的 Alpha 功能,以及二十幾個更成熟的版本。

具體而言,Kubernetes 1.10 將包含 Kubelet TLS Bootstrapping、API 聚合和更詳細的儲存指標的正式版。

其中一些功能看起來會很熟悉,因為它們在先前的版本中已在較早階段出現。每個階段都有特定的含義

  • stable:與「正式發布」相同,此階段的功能已通過徹底測試,可以在生產環境中使用。
  • beta:此功能已存在夠長的時間,團隊有信心此功能本身可望納入為正式功能,且任何 API 呼叫都不會變更。您可以使用和測試這些功能,但不建議將其納入任務關鍵型生產環境中,因為它們尚未完全強化。
  • alpha:新功能通常在此階段推出。這些功能仍在探索中。API 和選項在未來版本中可能會變更,或者功能本身可能會消失。絕對不適用於生產環境。您可以從 下載 Kubernetes 1.10 的最新版本。若要向開發社群提供意見回饋,請在 Kubernetes 1.10 里程碑中建立問題,並在 3 月 9 日之前標記適當的 SIG。

以下是需要注意的事項,但您應該記住,雖然這是撰寫本文時的目前計畫,但始終有可能將一或多個功能保留到未來版本。我們將從驗證開始。

驗證 (SIG-Auth)

  1. Kubelet TLS Bootstrap (stable):Kubelet TLS bootstrapping 可能是 Kubernetes 1.10 版本的「頭條新聞」,因為它已可在生產環境中使用。它為新的 kubelet 提供建立憑證簽署請求的功能,讓您可以將新節點新增至叢集,而無需手動新增安全憑證或使用自我簽署憑證,後者消除了許多原本應有的憑證優點。
  2. Pod 安全策略移至其自己的 API 群組 (beta):Pod 安全策略的 Beta 版本可讓管理員決定 Pod 可以執行的內容。換句話說,您可以防止未授權的使用者在特定命名空間中建立授權 Pod — 即可以執行諸如寫入檔案或存取 Secrets 等動作的 Pod。
  3. 限制節點存取 API (beta):同樣在 Beta 版中,您現在可以將節點上對 API 的呼叫限制為僅限該特定節點,並確保節點僅呼叫其自己的 API,而不是其他節點上的 API。
  4. 外部 client-go 憑證提供者 (alpha):client-go 是用於存取 Kubernetes API 的 Go 語言用戶端。此功能新增了新增外部憑證提供者的功能。例如,Amazon 可能想要建立自己的驗證器來驗證與 EKS 叢集的互動;此功能讓他們能夠做到這一點,而無需將其驗證器納入 Kubernetes 程式碼庫中。
  5. TokenRequest API (alpha):TokenRequest API 為大幅改進服務帳戶權杖奠定了基礎;此功能可建立未保存在 Secrets API 中的權杖,這些權杖針對特定對象(例如外部密鑰儲存),具有可設定的到期時間,並且可以繫結到特定 Pod。

網路 (SIG-Network)

  1. 支援可設定的 Pod resolv.conf (beta):您現在可以明確控制單個 Pod 的 DNS,而不是依賴整個叢集 DNS。
  2. 雖然此功能稱為 將預設 DNS 外掛程式切換為 CoreDNS (beta),但這實際上不是在此週期中會發生的情況。社群一直致力於從包含 dnsmasq 的 kube-dns 切換到 CoreDNS,後者是另一個 CNCF 專案,移動部件更少,已有多個版本。在 Kubernetes 1.10 中,預設仍為 kube-dns,但當 CoreDNS 達到與 kube-dns 相同的功能時,團隊將考慮使其成為預設值。
  3. 拓撲感知服務路由 (alpha):分配工作負載是 Kubernetes 的優勢之一,但到目前為止一直缺少一件事是為了延遲目的而將工作負載和服務在地理位置上保持接近的能力。拓撲感知路由將有助於解決此問題。(此功能可能會延遲到 Kubernetes 1.11。)
  4. 使 NodePort IP 位址可設定 (alpha):不必在 Kubernetes 叢集中指定 IP 位址非常棒 — 除非您實際上需要提前知道其中一個位址,例如為了設定資料庫複寫或其他任務。您現在可以明確設定 NodePort IP 位址來解決此問題。(此功能可能會延遲到 Kubernetes 1.11。)

Kubernetes API (SIG-API-machinery)

  1. API 聚合 (stable):Kubernetes 讓您可以透過建立自己的功能並註冊您的函數來擴展其 API,以便它們可以與核心 K8s 功能一起提供。此功能將在 Kubernetes 1.10 中升級為「stable」,因此您可以在生產環境中使用它。此外,SIG-CLI 正在新增一個名為 kubectl get 和 describe 應能良好地與擴充功能搭配運作 (alpha) 的功能,以使伺服器而非用戶端傳回此資訊,以獲得更流暢的使用者體驗。
  2. 支援自我託管授權者 webhook (alpha):早期版本的 Kubernetes 為我們帶來了授權者 webhook,這使得在執行命令之前可以自訂權限的強制執行。然而,這些 webhook 必須存在於某處,而這項新功能使其可以將它們託管在叢集本身中。

儲存 (SIG-Storage)

  1. 內部狀態的詳細儲存指標 (stable):對於 Kubernetes 等分散式系統,特別重要的是要知道系統內部在任何給定時間發生的情況,無論是為了疑難排解還是僅僅為了自動化。此版本將儲存系統內部正在發生的詳細指標帶入正式發布,包括諸如掛載和卸載時間、特定狀態中的磁碟區數量以及孤立 Pod 目錄數量等指標。您可以在此設計文件中找到完整清單
  2. 掛載命名空間傳播 (beta):此功能允許容器將磁碟區掛載為 rslave,以便可以在容器內部看到主機掛載,或掛載為 rshared,以便容器內部的任何掛載都反映在主機的掛載命名空間中。此功能的預設值為 rslave。
  3. 本機臨時儲存容量隔離 (beta):如果沒有此功能,則節點上每個使用臨時儲存的 Pod 都會從同一個集區中提取,並且配置儲存是「盡力而為」的基礎;換句話說,Pod 永遠無法確定它有多少可用空間。此功能提供 Pod 保留其自己儲存空間的能力。
  4. 樹狀結構外的 CSI 磁碟區外掛程式 (beta):Kubernetes 1.9 宣布發布容器儲存介面,該介面為供應商提供向 Kubernetes 提供儲存的標準方式。此功能使他們可以建立「樹狀結構外」或 Kubernetes 核心外部的驅動程式。這表示供應商可以控制自己的外掛程式,而不必依賴社群進行程式碼審查和核准。
  5. 本機持久儲存 (beta):此功能使 PersistentVolume 可以使用本機連接的磁碟而非僅限網路磁碟區來建立。
  6. 防止刪除 Pod 使用的 Persistent Volume Claims (beta) 和 7. 防止刪除繫結至 Persistent Volume Claim 的 Persistent Volume (beta):在先前版本的 Kubernetes 中,可以刪除 Pod 正在使用的儲存,從而為 Pod 造成大量問題。這些功能提供驗證,以防止這種情況發生。
  7. Persistent Volume 上的儲存空間不足?如果是,您可以使用 新增對 PV 線上調整大小的支援 (alpha) 來擴大其基礎磁碟區,而不會中斷現有資料。這也與新的 新增 FlexVolume 的調整大小支援 (alpha) 結合使用;FlexVolume 是透過 FlexVolume 外掛程式實作的供應商支援磁碟區。
  8. 拓撲感知磁碟區排程 (beta):此功能讓您可以指定 PersistentVolume 的拓撲約束,並讓排程器評估這些約束。它還會延遲初始 PersistentVolumeClaim 繫結,直到 Pod 已排程,以便磁碟區繫結決策更智慧,並考量所有 Pod 排程約束。目前,此功能對於本機持久磁碟區最有用,但對動態配置的支援正在開發中。

節點管理 (SIG-Node)

  1. 動態 Kubelet 組態 (beta):Kubernetes 讓您可以輕鬆地對現有叢集進行變更,例如增加副本數量或透過網路提供服務。此功能讓您可以變更 Kubernetes 本身(更確切地說,是在幕後執行 Kubernetes 的 Kubelet),而無需關閉執行 Kubelet 的節點。
  2. CRI 驗證測試套件 (beta):容器執行階段介面 (CRI) 讓您可以在 Kubernetes 上執行 Docker 以外的容器(例如 Rkt 容器,甚至使用 Virtlet 的虛擬機器)。此功能提供一組驗證測試,以確定這些 CRI 實作是否符合規範,讓開發人員可以更輕鬆地找到問題。
  3. 可設定的 Pod 處理程序命名空間共用 (alpha):雖然 Pod 可以輕鬆共用 Kubernetes 命名空間,但由於 Docker 中缺少支援,處理程序或 PID 命名空間一直是一個更困難的問題。此功能讓您可以在 Pod 上設定參數,以判斷容器是取得自己的作業系統處理程序還是共用單個處理程序。
  4. 在 CRI 中新增 Windows 容器組態的支援 (alpha):容器執行階段介面最初是針對以 Linux 為基礎的容器設計的,並且無法使用 CRI 實作對以 Windows 為基礎的容器的支援。此功能解決了該問題,讓您可以指定 WindowsContainerConfig。
  5. 偵錯容器 (alpha):如果您有適當的公用程式,則可以輕鬆偵錯容器。但如果您沒有呢?此功能讓您即使在原始容器映像中未包含偵錯工具,也可以在容器上執行偵錯工具。

其他變更

  1. 部署 (SIG-Cluster Lifecycle):支援樹狀結構外和程序外的雲端供應商 (beta):隨著 Kubernetes 獲得認可,越來越多的雲端供應商希望使其可用。為了更輕鬆地做到這一點,社群正在努力提取供應商特定的二進位檔,以便可以更輕鬆地更換它們。
  2. Azure 上的 Kubernetes (SIG-Azure):Kubernetes 有一個叢集自動調整器,如果您執行過多的工作負載,它會自動將節點新增至您的叢集,但到目前為止,它在 Azure 上尚不可用。新增 Azure 對叢集自動調整器的支援 (alpha) 功能旨在修正此問題。密切相關的是,新增 Azure 虛擬機器擴展集的支援 (alpha) 功能利用 Azure 自己的自動調整功能來提供資源。您可以從 下載 Kubernetes 1.10 Beta 版。同樣,如果您有意見回饋(社群希望您有),請在 1.10 里程碑中新增問題,並在 3 月 9 日之前標記相關的 SIG。
    _
    (非常感謝社群成員 Michelle Au、Jan Šafránek、Eric Chiang、Michał Nasiadka、Radosław Pieczonka、Xing Yang、Daniel Smith、sylvain boily、Leo Sunmo、Michal Masłowski、Fernando Ripoll、ayodele abejide、Brett Kochendorfer、Andrew Randall、Casey Davenport、Duffie Cooley、Bryan Venteicher、Mark Ayers、Christopher Luciano 和 Sandor Szuecs 在審查本文的準確性方面提供的寶貴協助。)_