1. 程式人生 > >為k8s叢集的節點預留計算資源

為k8s叢集的節點預留計算資源

一、問題

二、方案細節

2.1 預留計算公式

      Node Capacity
---------------------------
|     kube-reserved       |
|-------------------------|
|     system-reserved     |
|-------------------------|
|    eviction-threshold   |
|-------------------------|
|                         |
|      allocatable        |
|   (available for pods)  |
|                         |
|                         |
---------------------------

NodeAllocatable = [NodeCapacity] - [kube-reserved] - [system-reserved] - [eviction-threshold]

  • Node Capacity:Node的所有硬體資源
  • kube-reserved:給kube元件預留的資源
  • system-reserved:給System程序預留的資源
  • eviction-threshold:kubelet eviction的閾值設定
  • Allocatable:真正scheduler排程Pod時的參考值(保證Node上所有Pods的request resource不超過Allocatable)

2.2 kubelet新增額外啟動引數

--enforce-node-allocatable=pods,kube-reserved,system-reserved
--kube-reserved-cgroup=/system.slice/kubelet.service
--system-reserved-cgroup=/system.slice
--kube-reserved=cpu=200m,memory=250Mi
--system-reserved=cpu=200m,memory=250Mi
--eviction-hard=memory.available<5%,nodefs.available<
10%,imagefs.available<10% --eviction-soft=memory.available<10%,nodefs.available<15%,imagefs.available<15% --eviction-soft-grace-period=memory.available=2m,nodefs.available=2m,imagefs.available=2m --eviction-max-pod-grace-period=30 --eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=500Mi,imagefs.available=500Mi

(1)開啟為kube元件和系統守護程序預留資源的功能

--enforce-node-allocatable=pods,kube-reserved,system-reserved

(2)設定k8s元件的cgroup

--kube-reserved-cgroup=/system.slice/kubelet.service

(3)設定系統守護程序的cgroup

--system-reserved-cgroup=/system.slice

(4)配置為k8s元件預留資源的大小,CPU、Mem。(ephemeral storage是a’lpha特性,需要kubelet開啟feature-gates,預留的是臨時儲存空間(log,EmptyDir),生產環境建議先不使用)

--kube-reserved=cpu=200m,memory=250Mi

(5)配置為系統守護程序預留資源的大小(預留的值需要根據機器上容器的密度做一個合理的值)

--system-reserved=cpu=200m,memory=250Mi

當系統記憶體不足時,就有可能觸發系統 OOM,這時候根據 oom score 來確定優先殺死哪個程序,而 oom_score_adj 又是影響 oom score 的重要引數,其值越低,表示 oom 的優先順序越低。在計算節點中,程序的 oom_score_adj 如下:

sshd 等 K8S 管理程序 guarantee pod 其它程序 best effort pod
具體程序 sshd/dmevented / systemd-udevd kubelet / docker / journalctl guarantee pod 核心 init 程序等 best effort pod
oom_score_adj -1000 -999 -998 0 大於0

所以,很大概率上,OOM 的優先順序如下:
best effort pod > 其它程序 > guarantee pod > kubelet/docker 等 > sshd 等。
如果節點沒有 best effort 型別的 pod,那麼其它程序就有可能被 OOM,包括系統程序等。
(6)驅逐pod的配置:硬閾值(保證95%的記憶體利用率)

--eviction-hard=memory.available<5%,nodefs.available<10%,imagefs.available<10%

(7)驅逐pod的配置:軟閾值

--eviction-soft=memory.available<10%,nodefs.available<15%,imagefs.available<15%

(8)定義達到軟閾值之後,持續時間超過多久才進行驅逐

--eviction-soft-grace-period=memory.available=2m,nodefs.available=2m,imagefs.available=2m

(9)驅逐pod前最大等待時間=min(pod.Spec.TerminationGracePeriodSeconds, eviction-max-pod-grace-period),單位秒

--eviction-max-pod-grace-period=30

(10)至少回收

--eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=500Mi,imagefs.available=500Mi

2.3 新增cgroup subsystem

在Kubernetes 1.8版本,kubelet啟動會檢查以下cgroup subsystem的存在:cpu、cpuacct、cpuset、memory、systemd。所以需要確保這些cgroup目錄的存在。

mkdir -p /sys/fs/cgroup/cpu/system.slice/kubelet.service
mkdir -p /sys/fs/cgroup/cpuacct/system.slice/kubelet.service
mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
mkdir -p /sys/fs/cgroup/memory/system.slice/kubelet.service
mkdir -p /sys/fs/cgroup/systemd/system.slice/kubelet.service

三、Ref

相關推薦

k8s叢集節點預留計算資源

一、問題 二、方案細節 2.1 預留計算公式 Node Capacity --------------------------- | kube-reserved | |--------------------

K8S叢集建立只讀許可權帳號

參考URL: https://www.jianshu.com/p/a1a0d64f1245 https://mritd.me/2018/03/20/use-rbac-to-control-kubectl-permissions/ https://studygolang.com/articles/1173

通過Heketi管理GlusterFSK8S叢集提供持久化儲存

參考文件: Github project:https://github.com/heketi/heketi MA

K8s 叢集節點線上率達到 99.9% 以上,擴容效率提升 50%,我們做了這 3 個深度改造

點選下載《不一樣的 雙11 技術:阿里巴巴經濟體雲原生實踐》 本文節選自《不一樣的 雙11 技術:阿里巴巴經濟體雲原生實踐》一書,點選上方圖片即可下載! 作者 | 張振(守辰)阿里云云原生應用平臺高階技術專家 導讀:2019 年阿里巴巴核心系統 100% 以雲原生方式上雲,完美地支撐了 雙11 大促。這

利用容器逃逸實現遠端登入k8s叢集節點

某天, 某魚說要吃瞄, 於是...... 李國寶:邊緣計算k8s叢集SuperEdge初體驗 ​ zhuanlan.zhihu.com 圖示 照著上一篇文章來說,我這邊邊緣計算叢集有一堆節點。 每個節點都在不同的網路環境下。 他們的共同點都是可以訪問內網, 部分是某雲學生主機, 部分是跑在家

k8s預留系統資源

為k8s預留系統資源 Kubernetes 的節點可以按照 Capacity 排程。預設情況下 pod 能夠使用節點全部可用容量。 這是個問題,因為節點自己通常運行了不少驅動 OS 和 Kubernetes 的系統守護程序。 除非為這些系統守護程序留出資源,否則它們將與 pod 爭奪資源並

在單機上使用Kubeadm-dind 部署多節點k8s叢集

     近幾年Google的Kubernetes(簡稱k8s)已經成為分散式容器編排和管理領域事實上的標準,在基於容器的微服務架構下的分散式應用開發、部署和運維管理等領域,會有越來越多的使用者部署和使用k8s平臺。對於初學著來說,部署一個多機k8s叢集一來缺少環境、另

K8s叢集部署(二)------ Master節點部署

Master節點要部署三個服務:API Server、Scheduler、Controller Manager。 apiserver提供叢集管理的REST API介面,包括認證授權、資料校驗以 及叢集狀態變更等   只有API Server才直接操作etcd   其他模組通過API Server查詢

【從零開始/親測國內外均可】基於阿里雲Ubuntu的kubernetes(k8s)主從節點分散式叢集搭建——分步詳細攻略v1.11.3【準備工作篇】

從零開始搭建k8s叢集——香港節點無牆篇【大陸節點有牆的安裝方法我會在每一步操作的時候提醒大家的注意,並告訴大家如何操作】 由於容器技術的火爆,現在使用K8s開展服務變得越來越廣泛了。 本攻略是基於阿里雲主機搭建的一個單主節點和單從節點的最簡k8s分散式叢集。 為了製作

搭建單節點(一個master和一個minion、k8s叢集)多pod實驗環境

一、環境描述 (1)兩個node,一個master和一個minion,其中master節點的ip是192.168.110.151,minion的ip是192.168.110.152 (2)其中151的機器上啟動私有registry,提供k8s叢集所需要的image (3)m

3、k8s叢集手動部署筆記之Etcd配置-master節點配置

k8s部署配置檔案統一存放位置: #k8s配置目錄建立bin(存放可執行檔案),cfg(存放配置檔案),ssl(存放證書)目錄 [root@master ~]# mkdir -p /opt/kubernetes/{bin,cfg,ssl} Etcd配

使用Kubeadm建立k8s叢集節點部署(三十一)

前言          本篇部署教程將講述k8s叢集的節點(master和工作節點)部署,請先按照上一篇教程完成節點的準備。本篇教程中的操作全部使用指令碼完成,並且對於某些情況(比如映象拉取問題)還提供了多種解決方案。不過基於部署環境和k8s的複雜性,我們需

hyper-v虛擬機器上的centos多節點k8s叢集實踐

之前體驗了minikube,掉深坑裡至今還沒有爬出來,玩單節點用minikube夠了, 但傻瓜試的安裝讓人對k8s理解不是很深刻(坑),而且多節點好像有什麼奇怪的問題 所以我這次要用兩個虛擬機器來模擬k8s叢集   一主節點一工作節點 hostname      ipa

使用Rancher Server部署本地多節點K8S叢集

當我第一次開始我的Kubernetes之旅時,我一直在尋找一種設定本地部署環境的方式。很多人常常會使用minikube或microk8s,這兩者非常適合新手在單節點叢集環境下進行操作。但當我已經瞭解了基礎知識之後,這兩者顯然不太夠用,我需要進一步尋找能夠執行本地多節點叢集、與生產環境更相似的平臺。為此,我查閱

僅需60秒,使用k3s建立一個多節點K8S叢集

作者: Dawid Ziolkowski丨Container Solution雲原生工程師 最近,我一直在Kubernetes上進行各種測試和部署。因此,我不得不一次又一次建立和銷燬Kubernetes叢集,有的時候甚至在一個小時內執行好幾次。但由於我需要測試的某個事項需要一個全新的叢集,所以簡單地刪除所

K8S】基於單Master節點安裝K8S叢集

## 寫在前面 > 最近在研究K8S,今天就輸出部分研究成果吧,後續也會持續更新。 ## 叢集規劃 | IP | 主機名 | 節點 | 作業系統版本 | | --------------- | --------- | ------ | ----------

超強教程!在樹莓派上構建多節點K8S叢集

在很長一段時間裡,我對於在樹莓派上搭建Kubernetes叢集極為感興趣。在網路上找到一些教程並且跟著實操,我已經能夠將Kubernetes安裝在樹莓派上,並在三個Pi叢集中工作。然而,在master節點上對於RAM和CPU的要求已經超過了我的樹莓派所能提供的,因此在執行Kubernetes任務時效能並不優異

邊緣計算k8s叢集之SuperEdge

什麼是邊緣計算? 邊緣計算,是指在靠近物或資料來源頭的一側,採用網路、計算、儲存、應用核心能力為一體的開放平臺,就近提供最近端服務。其應用程式在邊緣側發起,產生更快的網路服務響應,滿足行業在實時業務、應用智慧、安全與隱私保護等方面的基本需求。邊緣計算處於物理實體和工業連線之間,或處於物理實體的頂端。而云端計算

hdu6035 Colorful Tree 樹形dp 給定一棵樹,每個節點有一個顏色值。定義每條路徑的值經過的節點的不同顏色數。求所有路徑的值和。

void 題意 iostream cnblogs 編號 emp php scanf http /** 題目:hdu6035 Colorful Tree 鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 題意:給定一棵樹,每

二叉樹計算葉子節點計算問題

image 使用 nbsp 9.png .com 1-1 技術 ima 清晰 題目如下: 計算方法需要使用兩個結論: 1: 總結點數=樹中的邊數+1 。見下圖可以清晰明白。 2:葉子節點數=總結點數-度數非零的節點數(戒子節點度為0) 所以本題目解法