Kubernetes 1.14重磅來襲,多項關鍵特性生產可用
走過了突飛猛進的2018年,Kubernetes在2019年終於迎來了第一個大動作:Kubernetes 1.14版本的正式釋出!Kubernetes 本次釋出的 1.14 版本,包含了 31 項增強,其中 10 項為 GA,12 項進入 beta 試用階段,7 個為全新的 alpha 功能。1.14 版本的主題是可擴充套件性,並且支援更多的業務場景,其中三個主要的功能具備生產可用,一個重要功能進入 beta 試用階段。總體而言,1.14 版本相比之前的版本更著重於將更多的功能推進到穩定狀態,尤其是部分關鍵功能對於使用者來說具有重大的里程碑意義。
Windows節點支援:生產可用
截至目前,1.14版本Windows節點支援已經穩定,支援將Windows節點作為工作節點,並向其排程Windows容器。Windows容器支援的引入,允許使用者通過Kubernetes的介面介面來體驗Windows容器,並見證Kubernetes對於Windows容器的價值。在同一叢集中同時編排Windows與Linux應用,對於擁有混合應用技術棧的企業,尤其是傳統企業,具有里程碑式的意義。
Windows容器關鍵特性包含:
- 支援Windows Server 2019作為工作節點
- 支援與Azure-CNI、OVN-Kubernetes 和 Flannel等外接容器網路外掛對接
- 改進了對Pod、服務型別、工作負載控制器和 metric/quota 的支援,使Windows容器基本匹配Linux容器所提供的能力
隨著1.14版本的釋出,Kubernetes已經能為提供相對完善的Windows容器基礎功能集,但如果考慮端到端商用落地Windows容器商用方案,使用者仍然不得不關注以下方面的成熟度限制:
1、作業系統版本限制:Windows容器對Windows系統以及docker版本都有更加嚴格的要求,例如Windows Server 2019/1809需要Docker EE-basic 18.09版本。
2、Hyper-V和Native容器的成熟度:整體相對弱於Linux容器,Native容器的安全隔離能有限,Hyper-V隔離方案仍然是alpha特性,需要持續完善;而對於依賴GPU、GUI的應用支援較弱,相關商用案例也較少。
3、Windows容器映象生態:
- 當前可用於Windows容器的base image有限,主要就是windowsservercore和nanoserver,針對實際場景的使用靈活度不高;
- Windows容器的基礎映象尺寸較大,而微軟的MCR服務(Microsoft Container Registry)尚未明確中國區CDN的上線時間,使用者往往需要花費較長的時間下載映象。
4、 網路方面:Windows容器目前支援5種不同的網路模式,雖然已有一些網路外掛宣稱可以滿足基本的使用要求,但效能和成熟度仍需驗證。
5、其他限制:
- 控制面master節點目前不能部署在Windows系統中,這意味著Kubernetes叢集必須包含使用Linux系統的主節點。
- 目前 Windows 容器並不支援 Pod 優雅刪除。並且在 Windows 容器環境中,對單檔案對映、特權容器、大頁記憶體支援、Node Problem Detection 等能力也都沒有提供支援。
在1.14版本穩定之後,Kubernetes社群將繼續完善對Windows容器支援,包括但不限於:
- 優化使用kubeadm在Windows環境下安裝節點
- 支援Calico CNI網路
- Hyper-V隔離模式下支援一個Pod內包含多個容器
- 支援Pod優雅刪除
kubectl外掛機制宣佈穩定,命令列外掛生態蓬勃發展
kubectl外掛機制GA
kubectl外掛機制允許開發者已獨立的二進位制的形式釋出自定義的kubectl子命令。這可以用於擴充套件kubectl具有更高階別的功能和附加的porcelain(例如新增set-ns命令)。
外掛必須具有kubectl-的命名字首,並儲存在使用者PATH中,為了GA,外掛機制已經被大大簡化了。目前有點類似Git的外掛系統。
整合kustomize
kustomize(https://GitHub.com/Kubernetes-sigs/kustomize)是K8s社群命令列興趣小組(SIG-CLI)的一個子專案,致力於為使用者提供一種可以重複使用配置的宣告式應用管理工具,讓使用者在配置工作中只需要管理和維護kubernetes的原生API物件,而不需要使用和管理複雜的模版。
在這次釋出的版本中,kustomize提供宣告式資源配置的建立修改等能力可以kubectl –k引數和kustomize子命令來執行。kustomize使用Kubernetes原生概念幫助使用者建立和複用資源配置。使用者可以利用 kubectl apply -k dir/將指定目錄的kustomization.yaml提交到叢集中。使用者還可以直接將自定義的資源配置傳送到標準輸入,而不是通過 kubectl kustomize dir/應用。
更多的kustomize子命令將會在kustomize程式碼倉庫中繼續開發完善,使用者可以通過更新獨立的kustomize二進位制檔案來體檢最新的kustomize特性。
據不完全統計,GitHub 上有超過 200 種 kubectl 相關的第三方命令列工具,隨著 kubectl 外掛機制穩定,相信這些工具很快會基於外掛機制標準化,更好地與 kubectl 整合,給使用者提供強大的擴充套件命令集。
隨本次 Kubernetes 1.14 版本釋出的,還有全新的 kubectl 文件及 Logo。社群重寫了 kubectl 文件,並重點聚焦使用宣告式的資源配置管理資源。目前 kubectl 文件已作為獨立的站點上線,地址為:https://kubectl.docs.kubernetes.io,新的 kubectl Logo 及吉祥物(kubee-cuddle)也被啟用。
持久化本地儲存卷:生產可用
歷經漫長的改進,持久化本地儲存卷特性終於在1.14版本中達到生產可用。
本地持久卷可以使用K8s節點上掛載的本地儲存裝置作為持久卷的來源。相對於遠端磁碟來說,持久化本地儲存擁有優越的效能,使用更少的系統開銷,更加適合分散式檔案系統以及資料庫等場景。相比於雲盤,本地SSD盤比遠端磁碟就具有更好的IO效能。相比於裸機,除了效能以外,本地儲存通常更加便宜,並且使用它是配置分散式檔案系統的必要條件。
雖然本地持久卷特性達到生產可用,但是易用性仍然沒有得到顯著的改進。使用者可以通過兩種相對手動的方式來使用持久化本地儲存特性:
- 使用者手動指定塊裝置的方式提供本地持久卷
- 使用 sig-storage-local-static-provisioner 外掛靜態維護本地卷的生命週期。
根據Pod及PVC狀態自動地維護各節點中本地持久卷的能力,仍然需要較長的時間在社群推進。
應用就緒狀態判斷的改進:Pod Readiness Gates (Pod Ready++)生產可用
對於Pod的狀態,Kubernetes為使用者提供了兩項判斷Pod執行情況的能力:Readiness(就緒狀態)和Liveness(存活狀態)。一個Pod被判斷為Ready(就緒),意味著所有初始化相關的工作已經完成,Pod可以接收處理外部訪問的請求。而Liveness則用於判斷已就緒的Pod是否持續處於正常工作中。
然而在實際使用中,特別是針對大型應用,情況往往比較複雜。由於K8s中大量採用的非同步機制、以及多種物件關係設計上的解耦,當應用例項數增加/刪除、或者應用版本發生變化觸發滾動升級時,系統並不能保證應用相關的Service、負載均衡器配置總是及時完成重新整理。在一些情況下,往往只是新的Pod完成自身初始化,系統尚未完成Endpoint、負載均衡器等外部可達的訪問資訊重新整理,老的Pod就立即被刪除,最終造成服務不可用。這對使用者來說是不可接受的。
Pod Ready++的引入正是為了修正Pod就緒狀態的判斷機制——使用者可以通過 ReadinessGates 自定義Pod就緒的條件(如,從外部訪問入口判斷新建的Pod開始處理外部請求),當使用者自定義的條件以及容器狀態都就緒時,kubelet才會標記Pod準備就緒。
在1.14版本中,Pod ready++特性達到了穩定,使用者可以在生產系統中直接使用該特性。需要注意的是:對於使用者自定義的就緒條件,一定需要有自定義的控制器配合更新Pod狀態,否則,Pod永遠不會變成就緒狀態。
Pod優先順序與搶佔式排程:生產可用
Pod優先順序與搶佔可以使K8s排程器在叢集資源耗盡的情況下優先排程更加重要的Pod,並且驅逐叢集中正在執行的相對不重要的Pod,為更重要的Pod騰出資源。Pod的重要性通過PriorityClassName定義,其中\u0026quot;system-node-critical\u0026quot; 和 “system-cluster-critical” 是兩個特殊的最高優先順序的關鍵詞。優先順序低的Pod在資源不足時,容易首先被驅逐,因而對於重要的daemonset或者重要的應用元件,使用者可以設定較高的優先順序防止被搶佔。
要使用優先順序與搶佔,管理員必須開啟Priority Admission Controller。使用者在為Pod設定PriorityClassName時,必須指向叢集中已建立的PriorityClass物件,否則Pod建立失敗。
PID限制:beta試用階段
程式ID (PID) 是Linux主機基本的資源,以往K8s沒有任何措施限制容器內的程式建立PID,如果PID資源耗盡,即使其他的資源充足,也可能導致主機不穩定。在引入PID限制特性後,K8s管理員可以通過kubelet啟動引數–pod-max-pids來設定每個Pod最大可啟動的程式數目,並通過–system-reserved和–kube-reserved兩項引數設定系統預留的PID數目。
PID限制特性帶來的主要好處有:
- 防止Pod因PID資源匱乏而不能正常執行
- 隔離Pod之間以及Pod與node之間的PID資源
Kubeadm
- 在高可用叢集中自動執行控制面之間的證書複製。
- *kubeadm join *命令使得使用者自定義叢集納管節點的工作流程變為可能。
總結:核心趨於穩定,面向使用者場景開枝散葉
結合最近幾次版本釋出來看,Kubernetes核心的發展越來越趨於穩定,1.14版本幾乎沒有引入大的新特性,而是把重點放在了讓已有特性的穩定上。正如許多人會說,Kubernetes正在變得無聊,事實上放眼整個雲原生生態,面向終端使用者的各種落地場景,仍有巨大的發展空間,許許多多圍繞Kubernetes的新專案仍然在如雨後春筍般地湧現,而K8s本身一些子專案的動態也開始進入人們的視野,不斷地被商業落地。相信2019年會是Kubernetes和雲原生技術面向使用者場景開枝散葉的一年。
相關文章
- Kubernetes 1.14釋出:對Windows節點的生產級支援、Kubectl更新已全面到來Windows
- 構建生產環境可用的高可用kubernetes叢集
- 7月新特性 | 軟體開發生產線CodeArts釋出多項新特性等你體驗!
- HoloLens 2 系列視訊重磅來襲!
- 醫療OA管理系統重磅來襲
- Go1.14 釋出了,快來圍觀新的特性啦Go
- kubernetes 1.14 升級安裝指南
- 11月書訊:重磅技術書來襲!
- 「阿里雲 RocketMQ 系列公開課」重磅來襲!阿里MQ
- 對於製造業企業來說,有效的提高生產效率是降低生產成本的關鍵。
- 更多龍蜥自研特性!生產可用的 Anolis OS 8.6 正式釋出
- 整合 200 多項相關研究,大模型「終生學習」最新綜述來了大模型
- 重磅|WT32-S3-WOVERD規格書來襲!S3
- 生產注意事項
- 開源一週歲,MindSpore新特性巨量來襲
- 通過kubeadm部署Kubernetes v1.13.5生產可用叢集環境(無需翻牆)
- 《我的世界》全新生物“蜜蜂”亮相,暑期更新重磅來襲
- 重磅來襲|第一屆 OpenSEC 徵文活動正式開啟
- 尼克老師新書《人工智慧簡史》重磅來襲!新書人工智慧
- 重磅來襲!MoneyPrinterPlus一鍵釋出短影片到影片號,抖音,快手,小紅書上線了
- 關於 Go1.14,你一定想知道的效能提升與新特性Go
- 【爆】中安未來護照真偽鑑別系統重磅來襲!
- 深夜生產事故,人工多執行緒來救場!執行緒
- PostgreSQL 13.0正式版本釋出!更多新特性來襲SQL
- 【重磅來襲】程式設計師都在使用的免費API 介面程式設計師API
- 關於多項式的加和、乘積可用連結串列和陣列陣列
- 使用Kubernetes的5個關鍵點!
- 可用於生產的JDK 19 釋出JDK
- 多關鍵字排序排序
- Kubernetes最佳實踐生產檢查清單
- kubernetes生產實踐之redis-clusterRedis
- 千鋒1024程式設計師節重磅啟幕,鋒雲智慧大學生福利專場熱力來襲程式設計師
- 從Kubernetes 1.14 釋出,看技術社群演進方向
- 蜀天夢圖資料分析系統3.0重磅來襲
- 戴爾小企業官網商城重磅來襲,重塑核心競爭
- 啟明雲端分享:S系列1.54寸串列埠屏重磅來襲串列埠
- 各大渠道力薦《太古神王2》 12月23日重磅來襲
- 高可用架構例項:在多雲和多區域中穿行架構