實際應用中發現,如果不做處理,當叢集内應用數量不斷增加時,會占滿node節點的系統資源,導緻某node節點挂掉,同時也會造成openshift叢集的卡死。
解決思路為設定node節點系統資源預留值。
參考官方文檔:https://docs.openshift.org/latest/admin_guide/manage_nodes.html#configuring-node-resources
openshift的容器編排層采用的是K8S,故這裡同時參考了K8S的做法。
參考k8s部落格:《Kubernetes 針對資源緊缺處理方式的配置》、《kubernetes節點資源限制》
設定node節點系統資源預留值
如果尚未安裝叢集
修改ansible的hosts檔案,在變量openshift_node_kubelet_args中設定系統預留值。
如果已安裝叢集
修改每個節點的/etc/origin/node/node-config.yaml檔案。
修改檔案中的kubeletArguments。
我的修改示意如下(這裡我隻設定了cpu和記憶體的預留,預留值根據自己實際情況調整):
#設定預留系統服務的資源
system-reserved:
- cpu=m
- memory=G
#設定預留給k8s元件的資源(主要元件)
kube-reserved:
- cpu=m
- memory=G
重新開機origin-node
驗證
實驗的pod需要設定limit range。
盡可能的增加deployment的replicas。
這裡我把某個deployment的replicas設定成了20。

可以看見有部分pod建立失敗。
檢視建立失敗的pod日志
可以看出,建立失敗的原因是沒有節點滿足該pod的記憶體需求。
檢視node節點的記憶體使用量
可以看出,node節點的記憶體還有2G多可用。
這樣就可以避免node節點系統資源被使用完,導緻節點挂掉。