Kubernetes 1.6 即將釋出_Kubernetes中文社群
按照發布計劃,Kubernetes將於3月22日釋出1.6版本。這是Kubernetes自從去年9月到現在的第三個版本,下面就讓我們一起來看看這次K8s又會帶來什麼樣的新特性!
本次釋出共有29個新特性,包括9個stable特性,8個alpha特性以及12個beta特性。
1、Stable Features
- ApiServer使用ETCDv3作為後端儲存
使用Etcdv3作為狀態資訊儲存的工作其實從Kubernets 1.3就開始進行了,準備了測試程式碼、不斷提升儲存效能還有文件遷移等。Etcdv3使用了gRPC協議進行通訊,在效率、擴充套件性和彈性等方面的巨大提升讓Kubernetes可以支援上萬個容器(詳見本公眾號視訊
- 增加QoS級的CGroups支援
在Kubernetes1.2版本里Kubelet可以區分為k8s和系統保留的資源,通過“可分配”狀態來判斷某個節點是否可被排程。在1.6裡,Kubelet會自動建立頂級CGroup來控制節點的可分配性(通過–cgroups-per-qos標識控制),來更好地保證QoS。此特性支援在此之上的Pod驅逐以及特性回滾。Kubelet升級前需要排空(drain)上面的所有Pod,並且保證容器執行時的CGroups驅動匹配新配置的CGroups。
- 可配置的動態儲存StorageClass
每個StorageClass包含了域provisioner和parameters,它們可以動態地指明需要什麼樣的卷外掛支援。當前單個叢集僅支援單個卷外掛來提供PV,K8s 1.6的新特性使單叢集可以通過配置(例如指定provisioner: kubernetes.io/aws-ebs等)來支援多個這樣的卷外掛
- 增加雲上的預設StorageClass
同上,Kubernetes會在雲上安裝的時候自動部署一個StorageClass例項,現已支援Azure,AWS,GCE,OpenStack和vSphere。
- 增加外部的PV提供者(Provisioner)
使用者可以自己編寫和執行動態的PV提供者,這樣的PV提供者可以被獨立部署和更新。詳情可見https://github.com/kubernetes-incubator/external-storage
- 支援DellEMC ScaleIO的卷外掛
ScaleIO 是一個基於軟體的儲存平臺,它會建立一個分散式塊儲存池。通過這個外掛可以讓Pod訪問DellEMC的ScaleIO卷,支援持久卷(Persistent Volumes)等特性。
- 支援Portworx的卷外掛
Portworx是節點上一個塊儲存池,可以將它作為資料卷。Portworx卷外掛支援StorageClassses,Persistent Volumes以及 Persistent Volume Claims.
- 為Secret/ConfigMaps裡的所有鍵建立環境變數
這個特性讓使用者可以輕而易舉地從Secrets或Configmaps注入環境變數,只需引用對應的資源名而不用為每個鍵建立EnvVar。
- 為GA定製chroot掛載
GCE上的K8s 1.4版本在啟動的時候採用了GCI的映象,裡面沒有安裝掛載NFS和GlusterFS的必要工具。為了解決這個問題,我們通過建立一個安裝了所需儲存工具並掛載到chroot裡面的定製映象,並且能夠從宿主機共享掛載。當Kubelet發現使用了GCI的映象時,會自動chroot掛載來使用這個映象。
2、Alpha Features
- 對DaemonSet的更新
之前DaemonSet模板的Spec可被更新,但是執行著的Pod是不會被更新的。這個特性添加了一個選項當Daemon的Spec被更新時來自動更新Pod。
- 監控管道Metrics HPA API
水平自動擴充套件器(HPA)現在支援通過APIServer的聚合器來選擇指標(Metrics)
- 任意定製的HPA Metrics
原來HPA僅支援通過CPU的變化進行調整。現在HPA現在支援多個定製的指標(Metrics),比如請求百分比等。
- 在Kubernetes核心集成了叢集啟動/發現
添加了新的Token認證和管理方法,kubeadm使用良好。讓使用者可以用一種安全的方式來發現叢集資訊,並將TLS根證書作為KubeConfig的一部分。
- 支援out-of-process/out-of-core的雲服務商
添加了一個新的cloud-controller-manager二進位制,可用來測試新的雲服務商
- Pod注入策略
添加了新的API資源PodPreset以及admission控制器,允許定義交叉(cross-cutting)卷和環境並注入到Pod裡,讓Services和Pods變得鬆耦合
- “多合一”的卷提案
一個新的卷驅動,可以提供secrets、configmaps以及其他的API
- 彈性卷API升級了生命週期管理
現有的彈性卷缺乏對最新的內部動態卷外掛等的支援,並且沒有定義一個穩定的驅動API,當前的彈性卷並不適合諸如GCE和CoreOS的環境。所以彈性卷外掛更新為支援attach、detach介面,它會破壞向後相容性,所以請更新你的驅動。
3、Beta Features
- 使Deployments能夠正確指明部署失敗的原因
在新版本里如果Deployments的滾動升級失敗或卡住了,它會通過API來報告說明相應的原因
- 基於角色的訪問控制
RBAC API現已升級為v1beta1,並且為控制檯、節點和控制器元件等定義了預設的角色
- Kubelet TLS啟動
為Kubelet引入了向API Server請求TLS證書的API
- 極大簡化了Kubernetes叢集的建立過程
kubeadm的顯著提升,涵蓋了目前為beta版的一組基準特性和命令列標識
- 無痛部署Kubernetes叢集聯邦
kubefed命令升級至beta版,支援on-prem叢集上的聯邦,加入叢集時自動配置kube-dns,以及向聯邦元件傳入引數
- 重定義容器執行時介面CRI
Docker執行時(Docker-CRI)實現現在為beta版,kubelet預設啟用,可以通過–enable-cri=false來關閉它
- Pod內的親和性/反親和性
支援將相關的Pods傳遞或者打包到另外的拓撲區域,比如節點、域(zone)等
- 通過NoExecute汙點來表示節點問題,使用者定義耐受時間
每個Pod都可以配置一個耐受時間(tolerationSeconds),當這個節點變成Unreachable、Not Ready或其他問題時,這個Pod在這段時間內會被限制在該節點裡
- 節點親和性
用來規定哪個節點是可以被排程Pod
- 多/使用者定義排程器
使用者可以並行執行多個排程器來負責不同的Pods組
- 汙點(taint)/耐受(toleration)
預設不接受(repelling)來自某些節點的Pods,用來支援比如為特殊Pod保留節點-專用節點的使用場景。
- 支援卷掛載選項
支援對持久卷的掛載選項
4、Features 追蹤
Feature Name | Stage |
---|---|
etcd v3 as storage backend for APIServer | Stable |
Add support for pod and qos level cgroups | Stable |
Configurable Dynamic Provisioning aka StorageClass | Stable |
Default Storage Classes for Cloud Providers | Stable |
Create environment variables from all keys in a Secret/Configmap | Stable |
External provisioners | Stable |
DellEMC ScaleIO Volume | Stable |
Portworx Volume Plugin | Stable |
Customized mounts in chroot to GA | Stable |
DaemonSet updates | Alpha |
Monitoring Pipeline Metrics HPA API | Alpha |
Arbitrary/Custom Metrics in the Horizontal Pod Autoscaler | Alpha |
Integrate Cluster Bootstrap/Discovery with Kubenetes Core | Alpha |
Support out-of-process and out-of-tree cloud providers | Alpha |
Pod Injection Policy | Alpha |
All in one volume proposal | Alpha |
Flex volume API and Improved lifecycle (flexvolume) | Alpha |
Allow deployments to correctly indicate they are failing to deploy | Beta |
Role-based access control | Beta |
Kubelet TLS Bootstrap | Beta |
Dramatically Simplify Kubernetes Cluster Creation | Beta |
It should be fast and painless to deploy a Federation of Kubernetes clusters | Beta |
Redefine the Container Runtime Interface | Beta |
Inter-pod affinity/anti-affinity | Beta |
‘Forgiveness’: Represent node problems using NoExecute taint, and allow user-defined eviction time threshold using tolerationSeconds | Beta |
Node affinity | Beta |
Multiple/user-defined schedulers | Beta |
Taints/tolerations | Beta |
Support Volume Mount Options | Beta |
5、Tips
據最新訊息,仍有幾個特性在緊鑼密鼓地進行最後的測試(詳見https://github.com/kubernetes/kubernetes/issues?utf8=%E2%9C%93&q=is%3Aopen%20is%3Aissue%20milestone%3Av1.6),Kubernetes 1.6的釋出會略有推遲,讓我們保持關注共同期待吧!