原创 圖解 kubernetes scheduler 架構設計系列-初步瞭解

資源調度基礎 scheudler是kubernetes中的核心組件,負責爲用戶聲明的pod資源選擇合適的node,同時保證集羣資源的最大化利用,這裏先介紹下資源調度系統設計裏面的一些基礎概念 基礎任務資源調度 基礎的任務資源調度

原创 圖解kubernetes容器探活機制核心實現狀態管理

k8s爲實現容器探活worker的管理構建了一個Manager組件,該組件負責底層探活worker的管理,並且緩存當前的容器的狀態,並對外同步容器的當前狀態,今天我們就來分析下其部分核心組件 1. 核心原理實現 Manager緩存

原创 圖解kubernetes調度器ScheduleAlgorithm核心實現學習框架設計

ScheduleAlgorithm是一個接口負責爲pod選擇一個合適的node節點,本節主要解析如何實現一個可擴展、可配置的通用算法框架來實現通用調度,如何進行算法的統一註冊和構建,如何進行metadata和調度流程上下文數據的傳

原创 圖解kubernetes調度器搶佔流程與算法設計

搶佔調度是分佈式調度中一種常見的設計,其核心目標是當不能爲高優先級的任務分配資源的時候,會通過搶佔低優先級的任務來進行高優先級的調度,本文主要學習k8s的搶佔調度以及裏面的一些有趣的算法 1. 搶佔調度設計 1.1 搶佔原理 搶佔

原创 圖解kubernetes調度器SchedulingQueue核心源碼實現

SchedulingQueue是kubernetes scheduler中負責進行等待調度pod存儲的對,Scheduler通過SchedulingQueue來獲取當前系統中等待調度的Pod,本文主要討論SchedulingQue

原创 kubernetes用戶態TCP代理實現

在k8s中針對service的訪問通常基於kube proxy實現負載均衡,今天我們來探索下基於用戶態的TCP代理組件的工業級實現核心設計, 其中包括隨機端口生成器、TCP流複製等技術的核心實現 1. 基礎築基 今天主要是聊用戶態

原创 分佈式負載均衡算法之親和性輪詢原理

無論是在早期的負載均衡器中,還是當前微服務基於客戶端的負載均衡中,都有一個最基礎的輪詢算法,即將請求平均分佈給多臺機器,今天聊聊在此基礎上, kube proxy是如何實現親和性輪詢的核心數據結構. 瞭解親和性策略實現,失敗重試等

原创 圖解Go裏面的mutex瞭解編程語言核心源碼實現

1. 鎖的基礎概念 1.1 CAS與輪詢 1.1.1 cas實現鎖 在鎖的實現中現在越來越多的採用CAS來進行,通過利用處理器的CAS指令來實現對給定變量的值交換來進行鎖的獲取 1.1.2 輪詢鎖 在多線程併發的情況下很有可能會有線程

原创 圖解kubernetes服務打散算法的實現源碼

在分佈式調度中爲了保證服務的高可用和容災需求,通常都會講服務在多個區域、機架、節點上平均分佈,從而避免單點故障引起的服務不可用,在k8s中自然也實現了該算法即SelectorSpread, 本文就來學習下這個算法的底層實現細節 1

原创 圖解kubernetes調度器SchedulerExtender擴展

在kubernetes的scheduler調度器的設計中爲用戶預留了兩種擴展機制SchdulerExtender與Framework,本文主要淺談一下SchdulerExtender的實現, 因爲還有一篇Framework, 所以

原创 圖解kubernetes調度器SchedulerCache核心源碼實現

SchedulerCache是kubernetes scheduler中負責本地數據緩存的核心數據結構, 其實現了Cache接口,負責存儲從apiserver獲取的數據,提供給Scheduler調度器獲取Node的信息,然後由調度

原创 基於環狀隊列和迭代器實現分佈式任務RR分配策略

背景 分佈式任務分配 在很多運維場景下,我們都會執行一些長時間的任務,比如裝機、部署環境、打包鏡像等長時間任務, 而通常我們的任務節點數量通常是有限的(排除基於k8s的hpa、或者knative等自動伸縮場景)。 那麼當我們有一個任務

原创 定時、週期調度、等待時間的go語言標準實現

背景 - 在平臺開發過程中,當有些執行完某些操作後,可能還需要等待直到某個條件滿足的時候 - 比如在CMDB刪除了一個項目,CMDB需要一直等待其他系統資源回收完,才能在自身徹底釋放對應的資源, 那就需要一直在哪裏等待 今天主要是