1. 程式人生 > >Kubernetes 1.6 即將釋出_Kubernetes中文社群

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可以支援上萬個容器(詳見本公眾號視訊

KubeCon2016| How We Scaled Kubernetes to 2000 Nodes Clusters)。1.6的新叢集自動啟用Etcdv3。

  • 增加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的釋出會略有推遲,讓我們保持關注共同期待吧!

20161219151628

歡迎關注作者公眾號