1. 程式人生 > >Kubernetes(k8s)1.6新特性

Kubernetes(k8s)1.6新特性

一、靜態POD介紹

在Kubernetes中有一個DaemonSet型別的POD,這種型別的POD可以在某個節點上長期執行,這種型別的POD就是靜態POD。

靜態POD直接由某個節點上的kubelet程式進行管理,不需要api server介入,靜態POD也不需要關聯任何RC,完全是由kubelet程式來監控,當kubelet發現靜態POD停止掉的時候,重新啟動靜態POD。

二、Kubernetes回收策略

當kubernetes叢集中某個節點上可用資源比較小時,kubernetes提供了資源回收策略來保證節點上POD正常執行。因為如果節點上的記憶體或者CPU資源耗盡時,這個節點上執行的POD就會變成不穩定。

Kubernetes通過kubelet來進行回收策略控制,保證節點上POD在節點資源比較小時可以穩定執行。

Kubelet提供QoS服務質量管理,支援系統級別的OOM控制。

在Kubernetes中,POD的QoS服務質量一共有三個級別,如下圖所示:

20170209185113

這三個QoS級別介紹,可以看下面表格:

QoS級別

QoS介紹

BestEffort

POD中的所有容器都沒有指定CPU和記憶體的requests和limits,那麼這個POD的QoS就是BestEffort級別

Burstable

POD中只要有一個容器,這個容器requests和limits的設定同其他容器設定的不一致,那麼這個POD的QoS就是Burstable級別

Guaranteed

POD中所有容器都必須統一設定了limits,並且設定引數都一致,如果有一個容器要設定requests,那麼所有容器都要設定,並設定引數同limits一致,那麼這個POD的QoS就是Guaranteed級別

對於kubernetes來說,通過cgroup就可以給POD設定QoS級別,當資源不夠使用時,先kill優先順序低的POD,在實際使用時,是通過OOM(Out of Memory)分數值來實現的,OOM分數值從0到1000。OOM分數值是根據OOM_ADJ引數計算出來的,對於Guaranteed級別的POD,OOM_ADJ引數設定成了-998,對於BestEffort級別的POD,OOM_ADJ引數設定成了1000,對於Burstable級別的POD,OOM_ADJ引數取值從2到999,對於kube保留的資源,比如kubelet,OOM_ADJ引數設定成了-999。OOM_ADJ引數設定的越大,通過OOM_ADJ引數計算出來的OOM分數越高,OOM分數越高,這個POD的優先順序就越低,在出現資源競爭的時候,就越早被kill掉,對於OOM_ADJ引數是-999的代表kubernetes永遠不會因為OOM而被kill掉。如下圖所示:

20170209185224

kubelet可以提前監控到節點上資源減少,並且及時做出控制操作,可以停止某些POD,然後讓排程來在其他節點上啟動這些POD,這樣就可以保證節點上資源足夠POD使用。

三、1.6阿爾法版本新特性-不回收靜態POD

在kubernetes1.6第一個阿爾法版本中提供了一個新特性,不回收靜態POD。

在程式碼eviction_manager.Go中可以看到