本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes:Kubernetes 1.10 的第一個 Beta 版本來了
Kubernetes社群釋出了Kubernetes 1.10的第一個beta版本,這意味著您現在可以試用一些新功能,並在正式釋出前向釋出團隊提供反饋。該版本目前計劃於2018年3月21日釋出,目標是包含十幾個全新的alpha功能和二十多個更成熟的版本。
具體來說,Kubernetes 1.10將包含生產就緒的Kubelet TLS引導、API聚合和更詳細的儲存指標版本。
其中一些功能看起來很熟悉,因為它們在之前的版本中處於早期階段。每個階段都有特定的含義:
- 穩定:與“普遍可用”相同,此階段的功能已經過徹底測試,可以在生產環境中使用。
- 測試版(beta):該功能已經存在足夠長的時間,團隊相信該功能本身有望被納入穩定功能,並且任何API呼叫都不會改變。您可以使用和測試這些功能,但不建議將其包含在任務關鍵型生產環境中,因為它們尚未完全強化。
- Alpha版(alpha):新功能通常在此階段引入。這些功能仍在探索中。API和選項可能會在未來版本中更改,或者功能本身可能會消失。絕不適用於生產環境。您可以從以下位置下載Kubernetes 1.10的最新版本。要向開發社群提供反饋,請在3月9日之前在Kubernetes 1.10里程碑中建立一個問題並標記相應的SIG。
以下是需要關注的內容,但您應該記住,雖然這是撰寫本文時的當前計劃,但總有可能有一個或多個功能可能會推遲到未來版本釋出。我們將從身份驗證開始。
身份驗證 (SIG-Auth)
- Kubelet TLS 引導(穩定版):Kubelet TLS 引導可能是 Kubernetes 1.10 版本中的“頭條”功能,因為它已可用於生產環境。它使新的 kubelet 能夠建立證書籤名請求,從而讓您無需手動新增安全證書或使用自簽名證書(這會消除許多證書的優勢)即可向叢集新增新節點。
- Pod 安全策略移至其自己的 API 組(測試版):Pod 安全策略的測試版允許管理員決定 Pod 可以在哪些上下文中執行。換句話說,您有能力阻止非特權使用者在特定名稱空間中建立特權 Pod(即可以執行寫入檔案或訪問 Secret 等操作的 Pod)。
- 限制節點對 API 的訪問(測試版):同樣是測試版功能,您現在可以將對節點上 API 的呼叫限制為僅限於該特定節點,並確保節點僅呼叫自己的 API,而不是其他節點上的 API。
- 外部 client-go 憑據提供商(Alpha版):client-go 是用於訪問 Kubernetes API 的 Go 語言客戶端。此功能增加了新增外部憑據提供商的能力。例如,亞馬遜可能希望建立自己的身份驗證器來驗證與 EKS 叢集的互動;此功能使他們無需在 Kubernetes 程式碼庫中包含其身份驗證器即可實現這一點。
- TokenRequest API(Alpha版):TokenRequest API 為服務賬戶令牌的急需改進奠定了基礎;此功能支援建立不持久化在 Secrets API 中、面向特定受眾(例如外部 Secret 儲存)、具有可配置有效期並可繫結到特定 Pod 的令牌。
網路 (SIG-Network)
- 支援可配置的 Pod resolv.conf(測試版):您現在可以專門控制單個 Pod 的 DNS,而不是依賴於整個叢集 DNS。
- 儘管該功能名為將預設 DNS 外掛切換到 CoreDNS(測試版),但實際上在本週期中不會發生這種情況。社群已經努力將包含 dnsmasq 的 kube-dns 切換到 CoreDNS(另一個元件更少的 CNCF 專案)好幾個版本了。在 Kubernetes 1.10 中,預設仍然是 kube-dns,但當 CoreDNS 達到與 kube-dns 功能對等時,團隊將考慮將其設為預設。
- 服務拓撲感知路由(Alpha版):分發工作負載是 Kubernetes 的優勢之一,但直到現在,一直缺少的是為了延遲目的而將工作負載和服務在地理位置上保持緊密的能力。拓撲感知路由將有助於解決這個問題。(此功能可能會推遲到 Kubernetes 1.11。)
- 使 NodePort IP 地址可配置(Alpha版):不必在 Kubernetes 叢集中指定 IP 地址是很棒的——直到您確實需要提前知道其中一個地址是什麼,例如為了設定資料庫複製或其他任務。您現在將能夠專門配置 NodePort IP 地址以解決此問題。(此功能可能會推遲到 Kubernetes 1.11。)
Kubernetes API (SIG-API-machinery)
- API 聚合(穩定版):Kubernetes 允許您透過建立自己的功能並註冊它們來擴充套件其 API,以便它們可以與核心 K8s 功能一起提供服務。此功能將在 Kubernetes 1.10 中升級為“穩定版”,因此您可以在生產環境中使用它。此外,SIG-CLI 正在新增一項名為kubectl get 和 describe 應該很好地與擴充套件配合使用(Alpha版)的功能,以便由伺服器而不是客戶端返回此資訊,從而提供更流暢的使用者體驗。
- 支援自託管授權 webhook(Alpha版):早期版本的 Kubernetes 為我們帶來了授權 webhook,它使得在執行命令之前定製許可權強制成為可能。然而,這些 webhook 必須存在於某個地方,這項新功能使得在叢集本身中託管它們成為可能。
儲存 (SIG-Storage)
- 內部狀態的詳細儲存指標(穩定版):對於 Kubernetes 這樣的分散式系統,隨時瞭解系統內部發生了什麼是特別重要的,無論是為了故障排除還是僅僅為了自動化。此版本提供了儲存系統內部發生情況的詳細指標的普遍可用性,包括掛載和解除安裝時間、處於特定狀態的卷數量以及孤立 pod 目錄的數量等指標。您可以在這份設計文件中找到完整列表。
- 掛載名稱空間傳播(測試版):此功能允許容器將卷掛載為 rslave,以便在容器內部看到主機掛載,或者掛載為 rshared,以便容器內部的任何掛載都反映在主機的掛載名稱空間中。此功能的預設值為 rslave。
- 本地臨時儲存容量隔離(測試版):如果沒有此功能,節點上每個使用臨時儲存的 Pod 都將從同一個池中獲取,並且儲存分配是“盡力而為”的;換句話說,Pod 永遠無法確定自己有多少可用空間。此功能使 Pod 能夠預留自己的儲存。
- 樹外 CSI 卷外掛(測試版):Kubernetes 1.9 釋出了容器儲存介面(CSI),它為供應商向 Kubernetes 提供儲存提供了一種標準方式。此功能使他們能夠建立“樹外”或不在常規 Kubernetes 核心中的驅動程式。這意味著供應商可以控制自己的外掛,而不必依賴社群進行程式碼審查和批准。
- 本地持久儲存(測試版):此功能允許使用本地連線的磁碟建立 PersistentVolume,而不僅僅是網路卷。
- 防止刪除 Pod 使用的持久卷宣告(測試版)和 7. 防止刪除繫結到持久卷宣告的持久卷(測試版):在早期版本的 Kubernetes 中,可以刪除 Pod 正在使用的儲存,從而給 Pod 帶來巨大的問題。這些功能提供了驗證,可以防止這種情況發生。
- 您的持久卷儲存空間不足了嗎?如果是,您可以使用新增對 PV 線上調整大小的支援(Alpha版)來擴大底層卷,而不會中斷現有資料。這還與新的新增對 FlexVolume 調整大小的支援(Alpha版)結合使用;FlexVolume 是透過 FlexVolume 外掛實現的供應商支援的卷。
- 拓撲感知卷排程(測試版):此功能允許您在 PersistentVolume 上指定拓撲約束,並由排程器評估這些約束。它還會延遲初始 PersistentVolumeClaim 繫結,直到 Pod 排程完畢,從而使卷繫結決策更智慧,並考慮所有 Pod 排程約束。目前,此功能最適用於本地持久卷,但動態配置的支援正在開發中。
節點管理 (SIG-Node)
- 動態 Kubelet 配置(測試版):Kubernetes 可以輕鬆地對現有叢集進行更改,例如增加副本數量或透過網路提供服務。此功能可以在不關閉執行 Kubelet 的節點的情況下更改 Kubernetes 本身(或者更確切地說,是在後臺執行 Kubernetes 的 Kubelet)。
- CRI 驗證測試套件(測試版):容器執行時介面 (CRI) 使得在 Kubernetes 上執行 Docker 以外的容器(例如 Rkt 容器甚至使用 Virtlet 的虛擬機器)成為可能。此功能提供了一套驗證測試,以確保這些 CRI 實現合規,從而使開發人員更容易發現問題。
- 可配置的 Pod 程序名稱空間共享(Alpha版):儘管 Pod 可以輕鬆共享 Kubernetes 名稱空間,但由於 Docker 中缺乏支援,程序或 PID 名稱空間一直是一個更困難的問題。此功能允許您在 Pod 上設定一個引數,以確定容器是擁有自己的作業系統程序還是共享單個程序。
- 在 CRI 中新增對 Windows 容器配置的支援(Alpha版):容器執行時介面最初是為基於 Linux 的容器設計的,因此無法使用 CRI 實現對基於 Windows 的容器的支援。此功能解決了這個問題,使得可以指定 WindowsContainerConfig。
- 除錯容器(Alpha版):如果您擁有適當的實用程式,除錯容器很容易。但如果您沒有呢?此功能允許您在容器上執行除錯工具,即使這些工具未包含在原始容器映象中。
其他更改
- 部署 (SIG-Cluster Lifecycle):支援程序外和樹外雲提供商(測試版):隨著 Kubernetes 被越來越多的接受,越來越多的雲提供商希望將其提供。為了更輕鬆地實現這一點,社群正在努力提取特定於提供商的二進位制檔案,以便它們可以更容易地替換。
- Azure 上的 Kubernetes (SIG-Azure):Kubernetes 有一個叢集自動擴縮器,如果您的工作負載過多,它會自動向叢集新增節點,但直到現在它在 Azure 上尚不可用。為叢集自動擴縮器新增 Azure 支援(Alpha版)功能旨在解決此問題。與此密切相關的是,新增對 Azure 虛擬機器規模集的支援(Alpha版)功能利用 Azure 自己的自動擴縮功能來提供資源。您可以從以下位置下載 Kubernetes 1.10 Beta 版。再次,如果您有反饋(社群希望您有),請在 3 月 9 日之前向1.10 里程碑新增問題並標記相關 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 對本文準確性審查的寶貴幫助。)_