Pod 節點數量

動態調整

在 Kubernetes 中,如果為量化交易系統的 Pod 設置了可伸縮(HPA / VPA / 自定義控制器),并且默認副本數是 5,那么節點數量(副本數)是否變化,主要取決于以下幾個因素。

? 什么情況下 Pod 節點數量會大于 5?

一般是因為資源不足、負載升高等條件觸發了自動擴容

情況 1:CPU 或內存使用率超過閾值

  • 使用 HPA(Horizontal Pod Autoscaler)時,如果 CPU 或內存使用率持續高于配置的 targetAverageUtilization(如 70%),Kubernetes 就會自動增加副本數。

情況 2:消息堆積、延遲上升

  • 如果使用了自定義指標(如 Kafka lag、處理延遲等),當指標超過設定閾值時,也會觸發自動擴容。

情況 3:并發請求量猛增

  • 配合 Ingress + Service + autoscaler,當網絡請求量飆升,QPS 陡增,也可能觸發擴容。

? 什么情況下 Pod 節點數量會減少(小于 5)?

? 有可能小于 5,前提是你允許最低副本數小于 5。

如果你設置了:

minReplicas: 2
maxReplicas: 10

那就意味著當負載很低、系統空閑時,Pod 數可能減少至 2。

常見觸發縮容的情況:

  • CPU 或內存使用率長期低于閾值(如低于 20%)
  • Kafka 消息消費滯后清零、請求量降至低水平
  • 某些夜間、節假日等場景策略不運行或數據源減少

? 是否一定不會小于默認值 5?

不是的 —— 默認值 5 是部署時設置的一個初始副本數,不是最小值,除非你顯式設置了 minReplicas: 5,否則就有可能被縮容小于 5。

? 如果想確保副本永遠不小于 5,可以這樣配置:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:minReplicas: 5maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70

這樣無論負載多低,Pod 數也不會低于 5。

固定數量

如果 Pod 節點數量設定為固定值(如 Deployment 中指定 replicas: 5),那么在沒有人為干預或故障的情況下,Pod 的數量是不會變化的

固定副本數 = 固定 Pod 數量

當你這樣配置:

spec:replicas: 5

Kubernetes 控制器會始終保證有 5 個副本存活

  • 如果某個 Pod 宕機,它會立即拉起一個新的 Pod 進行補充
  • 這個新 Pod 的名稱、IP 可能變化,但副本數量始終是 5

什么情況下會改變 Pod 數量?

只有以下幾種情況才會使數量變化:

  • 手動更改 replicas 配置
  • 引入了 HPA(Horizontal Pod Autoscaler) 自動伸縮組件
  • 使用 kubectl scale 命令動態調整副本數
  • Deployment 被刪除或重新創建

如果明確沒有使用這些機制,那副本數量就是穩定不變的。

Deployment 設置了固定副本數(如 replicas: 5)的前提下Pod 的實際數量在正常情況下不會大于 5,但在以下特定場景中可能短暫超過這個數量:

? 可能導致 Pod 數量“暫時”大于 5 的幾種情況:

1. Pod 滾動更新過程中

當你更新鏡像或配置時,Kubernetes 會進行滾動更新

  • 新 Pod 先啟動(如 quant-abcde),
  • 再刪除舊 Pod(如 quant-xyz12

這個過程中,為了保持服務不中斷,Kubernetes 短時間內會同時保留舊 Pod 和新 Pod,所以可能出現:

實際 Pod 數量 = 6(1 個新的 + 5 個舊的,還未完全切換)

可通過 maxSurge 控制是否允許多啟動:

strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0

2. Pod 重啟失敗 / CrashLoopBackOff 時

某個 Pod 重啟中或卡在 Terminating 狀態,Kubernetes 可能拉起一個新的 Pod 補位,而舊的 Pod 還沒完全清理掉。

  • 這種狀態下,Pod 數量暫時會 > 5
  • 但不會長期維持

3. 調度器異常 or 節點漂移中

在節點失聯或遷移時,K8s 也可能多調度一個副本做備份,舊 Pod 仍未完全回收。

? 總結:

狀態是否可能大于5是否長期存在
正常運行? 否
滾動更新? 是(短暫)? 否(更新完成即恢復)
Pod 故障重啟? 是(短暫)? 否
手動誤擴容? 是(人為操作)? 是(需恢復)

? 應對建議:

  • 路由服務獲取 Pod 列表時,過濾掉非 Running 狀態的 Pod
  • 不要依賴 “當前 Pod 數量 == 5” 做分片判斷,而是基于實際可用 Pod 名單進行哈希分片
  • 避免在滾動更新時觸發重新分片(可加標志位鎖)

在設置 replicas: 5 的情況下,也有可能出現 Pod 數量短暫小于 5 的情況

? 出現小于 5 個 Pod 的常見原因:

1. Pod 異常退出 / CrashLoopBackOff

  • 某個 Pod 由于代碼異常、配置錯誤或資源不足掛掉了。
  • Kubernetes 會嘗試重啟它,但在短暫時間內,Running 狀態的 Pod 會小于 5。

2. 調度失敗

  • 有些節點資源不足(CPU/內存),導致 Pod 調度不成功。
  • 此時,Pending 狀態的 Pod 不計入 Running 的數量。

3. 節點宕機

  • Pod 所在的 Node 突然失聯或宕機。
  • Kubernetes 會重新調度 Pod,但需要一定時間。

4. 滾動更新中設定了 maxUnavailable > 0

例如:

strategy:rollingUpdate:maxUnavailable: 1
  • 表示允許最多有 1 個副本在更新過程中不可用。
  • 那么更新中最多只有 4 個 Pod 是可用的。

5. 手動干預

  • 人為刪除某些 Pod。
  • Deployment 會嘗試恢復,但恢復前數量會小于預設值。

? 是否是“正常”現象?

短時間內低于 replicas 是 Kubernetes 自愈機制的一部分,系統會自動嘗試恢復目標副本數。

? 建議應對:

  • 分片服務在判斷當前副本數是否達標時,不要依賴副本總數是否為 5,而是:
    • 拉取當前狀態為 Running 的 Pod 列表(過濾掉 Pending、CrashLoop、Terminating)
    • 以此為基礎進行路由與分片判斷
  • 在 Pod 啟動完成后再注冊分片,避免中間狀態時觸發不必要的重分片
  • 對于關鍵策略,可添加一個健康檢查機制,確保某個分片活躍地運行在某個 Pod 中

量化交易系統的 Pod 設計

在量化交易系統中,如果行情是廣播式推送(如通過行情網關、Kafka、Multicast、RabbitMQ fanout 等),那部署“可伸縮(自動伸縮)”的副本方式是沒有必要的。

可伸縮部署并不適合廣播式行情的量化系統,大多數情況下不建議自動彈性伸縮,建議使用固定副本數部署。
原因如下:

🚫【風險點】行情是廣播 → 副本數增加會造成重復消費、計算放大

如果行情是“廣播”給所有量化副本的(如 Kafka 的 fan-out 模式、行情接收層做了 multicast),那么:

  • 增加一個副本 = 每條行情被多處理一次
  • 會導致重復運算、系統資源浪費
  • 如果沒有良好的策略路由與隔離,會導致策略調度混亂或沖突

?【適合伸縮的場景】是pull 模式 / 隊列分片型系統

例如:

  • 使用 Kafka 按策略 ID 分區 + 分組消費
  • 或者策略是從數據庫拉取的任務型架構
  • 或者你對每個副本分派明確的策略子集

在這些模式下伸縮可以帶來負載均衡、性能彈性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81556.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81556.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81556.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于OpenCV中的圖像拼接方法詳解

文章目錄 引言一、圖像拼接的基本流程二、代碼實現詳解1. 準備工作2. 特征檢測與描述detectAndDescribe 函數詳解(1)函數功能(2)代碼解析(3)為什么需要這個函數?(4)輸出數…

Java-List集合類全面解析

Java-List集合類全面解析 前言一、List接口概述與核心特性1.1 List在集合框架中的位置1.2 List的核心特性1.3 常見實現類對比 二、ArrayList源碼剖析與應用場景2.1 內部結構與初始化2.2 動態擴容機制2.3 性能特點與最佳實踐 三、LinkedList 源碼剖析與應用場景3.1 內部結構與節…

Flink 并行度的設置

在 Apache Flink 中,并行度(Parallelism) 是控制任務并發執行的核心參數之一。Flink 提供了 多個層級設置并行度的方式,優先級從高到低如下: 🧩 一、Flink 并行度的四個設置層級 層級描述設置方式Operator…

OpenCV 筆記(39):頻域中的拉普拉斯算子

1. 拉普拉斯算子 在該系列的第八篇文章中,我們曾經介紹過在二維空間拉普拉斯算子的定義為: 這是對函數 的二階偏導數之和。 2. 拉普拉斯算子的傅里葉變換及其推導 在該系列的第三十二篇文章中,我們曾給介紹過下面的公式 二維連續傅里葉變換&…

入職軟件開發與實施工程師了后........

時隔幾個月沒有創作的我又回來了,這幾個月很忙,我一直在找工作,在自考(順便還處理了一下分手的事),到處奔波,心力交瘁。可能我骨子里比較傲吧。我不愿意著急謀生,做我不愿意做的普通…

多卡跑ollama run deepseek-r1

# 設置環境變量并啟動模型 export CUDA_VISIBLE_DEVICES0,1,2,3 export OLLAMA_SCHED_SPREAD1 # 啟用多卡負載均衡 ollama run deepseek-r1:32b 若 deepseek-r1:32b 的顯存需求未超過單卡容量(如單卡 24GB),Ollama 不會自動啟用多卡 在run…

09、底層注解-@Import導入組件

09、底層注解-Import導入組件 Import是Spring框架中的一個注解,用于將組件導入到Spring的應用上下文中。以下是Import注解的詳細介紹: #### 基本用法 - **導入配置類** java Configuration public class MainConfig { // 配置內容 } Configuration Impo…

題解:P12207 [藍橋杯 2023 國 Python B] 劃分

鏈接 題目描述 給定 40 個數,請將其任意劃分成兩組,每組至少一個元素。每組的權值為組內所有元素的和。劃分的權值為兩組權值的乘積。請問對于以下 40 個數,劃分的權值最大為多少。 5160 9191 6410 4657 7492 1531 8854 1253 4520 9231126…

配置ssh服務-ubuntu到Windows拷貝文件方法

背景: 在工作中,需要頻繁從ubuntu到Windows拷貝文件,但有時間總是無法拷出,每次重啟虛擬機又比較麻煩并且效率較低。可以使用scp服務進行拷貝,不僅穩定而且高效,現將配置過程進行梳理,以供大家參…

線程池模式與C#中用法

一、線程池模式解析 1. 核心概念 線程池是一種 管理線程生命周期的技術,主要解決以下問題: 減少線程創建/銷毀開銷:復用已存在的線程 控制并發度:避免無限制創建線程導致資源耗盡 任務隊列:有序處理異步請求 2. …

設置IDEA打開新項目使用JDK17

由于最近在學習Spring-AI&#xff0c;所以JDK8已經不適用了&#xff0c;但是每次創建新項目都還是JDK8&#xff0c;每次調來調去很麻煩 把Projects和SDKs都調整為JDK17即可 同時&#xff0c;Maven也要做些更改&#xff0c;主要是添加build標簽 <build><plugins>&…

初識MySQL · 索引

目錄 前言&#xff1a; 重溫磁盤 認識索引 為什么這么做&#xff0c;怎么做 重談page 聚簇索引VS非聚簇索引 回表查詢 索引分類 前言&#xff1a; 前文我們主要是介紹了MySQL的一些基本操作&#xff0c;增刪查改一類的操作都介紹了&#xff0c;并且因為大多數情況下&am…

MySQL——7、復合查詢和表的內外連接

復合查詢和表的內外連接 1、基本查詢回顧2、多表查詢3、自連接4、子查詢4.1、單行子查詢4.2、多行子查詢4.3、多列子查詢4.4、在from子句中使用子查詢4.5、合并查詢 5、表的內連和外連5.1、內連接5.2、外連接5.2.1、左外連接5.2.2、右外連接 1、基本查詢回顧 1.1、查詢工資高于…

MYSQL故障排查和環境優化

一、MySQL故障排查 1. 單實例常見故障 &#xff08;1&#xff09;連接失敗類問題 ERROR 2002 (HY000): Cant connect to MySQL server 原因&#xff1a;MySQL未啟動或端口被防火墻攔截。 解決&#xff1a;啟動MySQL服務&#xff08;systemctl start mysqld&#xff09;或開放…

7GB顯存如何部署bf16精度的DeepSeek-R1 70B大模型?

構建RAG混合開發---PythonAIJavaEEVue.js前端的實踐-CSDN博客 服務容錯治理框架resilience4j&sentinel基礎應用---微服務的限流/熔斷/降級解決方案-CSDN博客 conda管理python環境-CSDN博客 快速搭建對象存儲服務 - Minio&#xff0c;并解決臨時地址暴露ip、短鏈接請求改…

數字圖像處理——圖像壓縮

背景 圖像壓縮是一種減少圖像文件大小的技術&#xff0c;旨在在保持視覺質量的同時降低存儲和傳輸成本。隨著數字圖像的廣泛應用&#xff0c;圖像壓縮在多個領域如互聯網、移動通信、醫學影像和衛星圖像處理中變得至關重要。 技術總覽 當下圖像壓縮JPEG幾乎一統天下&#xff…

抖音視頻怎么去掉抖音號水印

你是不是經常遇到這樣的煩惱&#xff1f;看到喜歡的抖音視頻&#xff0c;想保存下來分享給朋友或二次創作&#xff0c;卻被抖音號水印擋住了畫面&#xff1f;別著急&#xff0c;今天教你幾種超簡單的方法&#xff0c;輕松去除水印&#xff0c;高清無水印視頻一鍵保存&#xff0…

RISC-V 開發板 MUSE Pi Pro PCIE 測試以及 fio 崩潰問題解決

視頻講解&#xff1a; RISC-V 開發板 MUSE Pi Pro PCIE 測試以及 fio 崩潰問題解決 板子上有一個m.2的pcie插槽&#xff0c;k1有三個pcie控制器&#xff0c;pcie0和usb3復用一個phy&#xff0c;所以實際開發板就兩個&#xff0c;測試的話&#xff0c;上一個nvme硬盤&#xff0c…

超級管理員租戶資源初始化與授權管理設計方案

背景說明 在多租戶系統中&#xff0c;資源&#xff08;如功能模塊、系統菜單、服務能力等&#xff09;需按租戶維度進行授權管理。超級管理員在創建新租戶時&#xff0c;需要初始化該租戶的資源授權信息。 兩種可選方案 方案描述方案 A&#xff1a;前端傳入選中的資源列表創…

stm32week16

stm32學習 十一.中斷 4.使用中斷 EXTI的配置步驟&#xff1a; 使能GPIO時鐘設置GPIO輸入模式使能AFIO/SYSCFG時鐘設置EXTI和IO對應關系設置EXTI屏蔽&#xff0c;上/下沿設置NVIC設計中斷服務函數 HAL庫的使用&#xff1a; 使能GPIO時鐘&#xff1a;__HAL_RCC_GPIOx_CLK_EN…