K8S HPA 彈性水平擴縮容 Pod 詳解

文章目錄

  • 1、前置準備
  • 2、需求場景
  • 3、Scale 靜態擴縮容
    • 3.1、創建 Deployment 腳本
    • 3.2、Scale 擴縮容
  • 3、HPA 自動擴縮容
    • 3.1、安裝 Metrics
    • 3.2、創建 Deployment 演示案例
    • 3.3、創建 HPA
    • 3.4、觸發 HPA 自動擴縮容

1、前置準備

本次案例演示,我選擇了阿里云ECS(搶占式)搭建了 K8S 1主2從集群,資源配置規格如下:

  • 主節點 k8s-master:4核8G、40GB硬盤、CentOS7.9(內網IP:172.16.0.172)
  • 從節點 k8s-node1: 4核8G、40GB硬盤、CentOS7.9(內網IP:172.16.0.173)
  • 從節點 k8s-node2: 4核8G、40GB硬盤、CentOS7.9(內網IP:172.16.0.174)

K8S集群構建參考:https://blog.csdn.net/weixin_46594796/article/details/139649056

2、需求場景

在企業級生產環境中,經常會遇到某個服務容器性能不足的情況,例如:CPU、內存飚高,這種情況一般會想到對該服務進行橫向擴容,創建更多的服務容器來分攤工作量。或者說容器資源過剩,想要把資源節省出來,通常這種情況需要我們去手動的進行擴縮容。動態調整應用實例數量以滿足業務需求,同時優化資源利用率。

  • 突發流量:當應用訪問量突然激增(如促銷活動、熱點事件),增加Pod副本數,避免服務過載或崩潰。
  • 低峰時段:在流量低谷時減少Pod數量,節省資源成本。

3、Scale 靜態擴縮容

3.1、創建 Deployment 腳本

在K8S環境中,我們一般使用 scale 命令來對 Pod 資源進行手動擴縮容,首先先通過 Deployment 創建3個 Niginx Pod,deploy-nginx.yaml內容如下:

mkdir /etc/k8s
cat > /etc/k8s/deploy-nginx.yaml <<-'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: deploy-nginx
spec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:containers:- name: container-nginximage: nginx:1.20.2-alpineports:- containerPort: 80
EOF

執行 delopment 文件:

kubectl apply -f /etc/k8s/deploy-nginx.yaml

此時可以看到,3個Pod容器已經成功部署完成了:
在這里插入圖片描述

3.2、Scale 擴縮容

上面腳本執行完畢后,已經自動創建3個Pod了,想要把3個Pod擴容為5個,就需要使用 scale 命令手動執行:

kubectl scale deploy deploy-nginx --replicas=5

就可以看到,直接將容器數量擴容為5個了:
在這里插入圖片描述
縮容只需要把數字調小即可,這里就不演示了。

但是這樣終歸是需要運維人員手動的進行調整,有些特殊場景流量高峰期可能很隨機,這樣在通過人工進行處理就不太合適了,有沒有可以根據資源使用情況自動擴縮容Pod的方案,官方提供了就是 HPA

3、HPA 自動擴縮容

3.1、安裝 Metrics

首先,通過命令查看哪些 Pod 占用資源比較高:kubectl top pods,執行完畢后可以發現,錯誤日志:error: Metrics API not available,說明沒有安裝Metrics
在這里插入圖片描述
首先在主節點上下載配置文件:

wget https://xuzhibin-bucket.oss-cn-beijing.aliyuncs.com/k8s/metric-server.yaml

這個配置文件中已經被修改過,相比于官方的配置文件有兩處修改:

  1. 處理加密證書不匹配問題(生產環境需要配置好證書的)
  2. Metrics鏡像改成了使用阿里云,否則無法下載
    在這里插入圖片描述

這個時候,就可以直接部署 Metrics:

kubectl apply -f metric-server.yaml

最后通過該命令查看,部署是否完畢:

kubectl get po -n kube-system | grep metrics-server

3.2、創建 Deployment 演示案例

演示案例 deployment 腳本(svc-hpa.yaml),這是由Apache提供的,配置如下:

mkdir -p /etc/sca/hpa
cd /etc/sca/hpa
cat > svc-hpa.yaml <<-'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: php-apache
spec:selector:matchLabels:run: php-apachetemplate:metadata:labels:run: php-apachespec:containers:- name: php-apacheimage: deis/hpa-exampleports:- containerPort: 80resources:limits:cpu: 500mrequests:cpu: 200m
---
apiVersion: v1
kind: Service
metadata:name: php-apachelabels:run: php-apache
spec:ports:- port: 80selector:run: php-apache
EOF

啟動演示案例容器,就會創建一個Pod:

kubectl apply -f svc-hpa.yaml

這里面主要注意的是,有個資源限定的配置:表示對pod容器資源的限定,啟動最少占用0.2核CPU,最大占用0.5核CPU:
在這里插入圖片描述

3.3、創建 HPA

創建HPA需要使用 autoscale 命令,這里--cpu-percent=50說明是50%,結合上面最大占用500m(0.5核)CPU,所以如果當前Pod占用了0.25核CPU,就會對Pod容器進行擴容,最多可以達到10個,但不會少于1個。

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

在這里插入圖片描述
?? 如果不再使用HPA,可以用下述命令進行刪除:

kubectl delete hpa php-apache

3.4、觸發 HPA 自動擴縮容

先新開一個窗口,通過下述命令監聽一下HPA狀態:

kubectl get hpa php-apache --watch

此時沒有請求量,還是比較平靜的:
在這里插入圖片描述
在新開一個窗口,通過 Linux 系統提供的工具BusyBox,每過0.1s發送請求,模擬大流量場景讓HPA觸發擴容,通過下述命令:

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

過了一段時間,可以看到窗口展示大量接口調用:
在這里插入圖片描述
這個時候再去看監控窗口,發現確實開始自動擴容了:只要過了50%,Pod副本數量就開始不斷新增,隨著Pod增多,CPU占用也逐漸下降了,發現8個Pod就能控制在50%以下,就不會繼續擴容了。
在這里插入圖片描述

此時已經擴容到8個容器了:
在這里插入圖片描述
這個時候把調用腳本停掉,再看監控日志會發現,Pod自動被逐漸銷毀,但是并不是馬上進行縮容,CPU使用率降下來后,他會先等待一會兒,然后才開始銷毀Pod容器,原因是擔心只是短暫流量跌下來,會給一點緩沖時間,重復創建銷毀容器的代價太高了!
在這里插入圖片描述

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

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

相關文章

對話訪談|盤古信息×智晟威:深度挖掘數字化轉型的奧秘

在數字化轉型的浪潮中&#xff0c;傳統設備企業如何突破“純硬件”的邊界&#xff0c;實現從“賣產品”到“賣生態”的跨越&#xff1f;數字化轉型究竟是“高不可攀的奢侈品”&#xff0c;還是“觸手可及的生存技能”&#xff1f;近日&#xff0c;廣東盤古信息科技股份有限公司…

什么是模型預測控制?

一、概念模型預測控制&#xff08;Model Predictive Control, MPC&#xff09;是一種先進的控制方法&#xff0c;廣泛應用于工業過程控制、機器人控制、自動駕駛等領域。MPC的核心思想是利用系統的動態模型預測未來的行為&#xff0c;并通過優化算法計算出當前時刻的最優控制輸…

類與類加載器

在Java中&#xff0c;類和類加載器是密切相關的兩個概念&#xff0c;理解它們有助于我們更好地掌握Java的運行機制。什么是Java類&#xff1f;Java類就像是一個模板或藍圖&#xff0c;它定義了對象的屬性和行為。比如"汽車"可以看作一個類&#xff0c;它有顏色、品牌…

一文速通Python并行計算:14 Python異步編程-協程的管理和調度

一文速通 Python 并行計算&#xff1a;14 Python 異步編程-協程的管理和調度 摘要&#xff1a; Python 異步編程基于 async/await 構建協程&#xff0c;運行在事件循環中。協程生成 Task&#xff0c;遇到?await?時掛起&#xff0c;I/O 完成觸發回調恢復運行&#xff0c;通過…

Node.js面試題及詳細答案120題(16-30) -- 核心模塊篇

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

RabbitMQ:Windows版本安裝部署

目錄一、概述二、OPT三、安裝RabbitMQ四、登錄測試一、概述 什么是MQ&#xff0c;有什么做作用&#xff1f; MQ即MessageQueue&#xff0c;消息隊列。可以分為兩部分理解&#xff1a;消息Message用于在不同的應用程序中傳遞數據。隊列Queue&#xff0c;一種FIFO先進先出的數據…

酒店行業安全體系構建與優化策略

酒店行業安全體系構建與優化策略為確保酒店行業領導及賓客的安全&#xff0c;構建全面的治安聯防體系及事故處理預案至關重要。某招待所通過設立保衛部&#xff0c;細化內保、治安、防火及交通管理職能&#xff0c;并下設警衛班、監控中心和電瓶車班&#xff0c;以全方位保障安…

python30-正則表達式

在Python中需要通過正則表達式對字符串進?匹配的時候&#xff0c;可以使??個python自帶的模塊&#xff0c;名字為re。 re模塊的使用&#xff1a;import re 一、匹配函數 1-1、re.match函數&#xff1a;返回匹配對象 match函數實現的是精準匹配&#xff0c;嘗試從字符串的…

EP1C12F324I7N Altera Cyclone FPGA

EP1C12F324I7N 是 阿爾特拉 Altera Cyclone 系列中的一款 SRAM-based FPGA&#xff0c;定位為低成本、低功耗、面向嵌入式與消費/工業類量產應用的器件。該器件提供約 12,060 個邏輯單元&#xff08;Logic Elements&#xff09;&#xff0c;片上嵌入式存儲約 234 kbit&#xff…

html5語義元素

1、參考&#xff1a;HTML5 語義元素 | 菜鳥教程 2、實戰 HTML5 <section> 元素 <section> 標簽定義文檔中的節&#xff08;section、區段&#xff09;。比如章節、頁眉、頁腳或文檔中的其他部分。 根據W3C HTML5文檔: section 包含了一組內容及其標題。 <!D…

java調用PyTorch 訓練模型實現神經網絡全流程

以下是完整的操作流程:用 PyTorch 訓練模型 → 導出為 ONNX 格式 → 用 Java 加載并推理,兼顧開發效率(PyTorch 快速訓練)和生產部署(Java 穩定運行)。 一、PyTorch 訓練模型并導出為 ONNX 1. 安裝依賴 bash pip install torch onnx # PyTorch 和 ONNX 庫2. 訓練一個…

Maven - Spring Boot 項目打包本地 jar 的 3 種方法

文章目錄Pre概述方案思路構建流程圖工作機制說明目錄結構示例POM 配置模板構建與驗證注意事項方案優缺點Pre Maven - Manual Maven JAR Installation&#xff1a;用 mvn install:install-file 安裝本地 JAR 的實用指南 概述 在 Spring Boot 項目中&#xff0c;通常依賴包會從…

平替 Claude Code,API接入 GPT-5,Codex CLI 國內直接使用教程

最新升級接入GPT-5的 Codex 擁有可以媲美 Claude Code 的AI編碼能力&#xff0c;本文將指導你在 Windows系統上部署原生的 Codex CLI程序&#xff0c;并且接入超低價中轉API&#xff0c;讓你在國內直接用上超高性價比的 OpenAI Codex CLI 應用。關于 CodexCodex 是 OpenAI 開發…

kubernertes (K8S)部署

參考&#xff1a; https://blog.csdn.net/yu33575/article/details/135387548 二進制安裝k8s&#xff1a; https://blog.csdn.net/qq_73990369/article/details/143217084 K8S二進制安裝與部署 &#xff1a;https://blog.csdn.net/fantuan_sss/article/details/139073366 k8s…

LeetCode 簡單JS刷題

目錄 返回數組最后一個元素 2787.將一個數字表示成冪的和的方案數 326.3的冪 1780.判斷一個數字是否可以表示成三的冪的和 342.4的冪 返回數組最后一個元素 1.請你編寫一段代碼實現一個數組方法&#xff0c;使任何數組都可以調用 array.last() 方法&#xff0c;這個方法將…

七大排序算法全解析:從入門到精通

目錄 一.排序的概念 二.常見排序算法的實現 2.1 插入排序 &#xff08;1&#xff09;直接插入排序&#xff1a; 當插入第i(i>1)個元素時&#xff0c;前面的array[0],array[1],…,array[i-1]已經排好序&#xff0c;此時用array[i]的排序碼與array[i-1],array[i-2],…的排序…

20250814在榮品RD-RK3588開發板的Android13下解決卡迪的LCD屏在開機的時候brightness最暗【背光的pwm信號的極性反了】

20250814在榮品RD-RK3588開發板的Android13下解決卡迪的LCD屏在開機的時候brightness最暗【背光的pwm信號的極性反了】 2025/8/14 11:33緣起&#xff1a;在榮品RD-RK3588開發板的Android13下&#xff0c;卡迪的LCD屏在開機的時候很暗&#xff0c;幾乎看不見。 在命令行查看亮度…

Flink的狀態管理

一、狀態的概念Flink的狀態其實你就可以將其想象為中間結果就可以了。在Flink中&#xff0c;算子的任務可以分為無狀態和有狀態兩種情況。無狀態算子任務在計算過程中是不依賴于其他數據的&#xff0c;只根據當前的輸入數據就可以得到結果輸出。比如之前講到的Map、FlatMap、Fi…

GoLand 項目從 0 到 1:第八天 ——GORM 命名策略陷阱與 Go 項目啟動慢問題攻堅

第八天核心任務&#xff1a;解決開發中的兩大技術卡點今天的開發不僅聚焦于代碼層面的數據庫字段映射問題&#xff0c;還遭遇了一個困擾團隊許久的環境難題 ——Go 項目啟動異常緩慢。經過多維度排查&#xff0c;我們不僅理清了 GORM 命名策略的設計邏輯&#xff0c;還找到了影…

在Ubuntu上安裝Google Chrome的詳細教程

步驟 1&#xff1a;下載 Google Chrome 安裝包 打開瀏覽器輸入https://www.google.cn/chrome/&#xff0c;然后進入Chrome瀏覽器官方網站 點擊下載選擇Debian/Ubuntu版本 google-chrome-stable_current_amd64.deb步驟 2&#xff1a;安裝下載的.deb 包 sudo dpkg -i google-chro…