網站首頁 編程語言 正文
自動擴縮容HPA:全稱是Horizontal Pod Autoscaler
我們安裝k8s集群的時候,安裝過一個metrics-server
的組件,這是一個監控數據組件,提供HPA和基礎資源監控的能力。就是這面這個Pod:
[root@k8s-master01 ~]# kubectl get pod -n kube-system metrics-server-6bf7dcd649-5fhrw 1/1 Running 2 (3d5h ago) 8d
通過這個組件可以看到節點或者Pod的內存和CPU的使用率:
[root@k8s-master01 ~]# kubectl top pod -A NAMESPACE NAME CPU(cores) MEMORY(bytes) default busybox 0m 0Mi kube-system calico-kube-controllers-5dffd5886b-4blh6 3m 18Mi kube-system calico-node-fvbdq 42m 135Mi kube-system calico-node-g8nqd 52m 73Mi
除了可以進行簡單的監控功能,還可以利用這個監控的數據做一些其他的操作。
比如我們可以給Pod的資源設定某個值,當資源的使用超過這個值,那么系統就會認為這個Pod當前存在壓力,從而就行擴容。
一般使用CPU和自定義指標進行擴容,內存相對較少。
HPA實踐:
注意事項:要想實現HPA的自動擴容,需要滿足以下幾個條件
- 必須安裝metrics-server組件或其他自定義版本的metrics-server
- 必須配置requests參數
- 不能擴容無法縮放的對象,如DaemonSet
首先創建一個nginx的yaml文件:
kubectl create deployment hpa-nginx --image=nginx --dry-run=client -o yaml > hpa-nginx.yaml
然后進入yaml文件中進行配置:在配置鏡像那里進行配置,下列代碼的后三行,如果也想對基于內存擴容的話也可以將內存寫上。
resources:是資源的意思
requests:是請求的意思,這里應該是請求資源的意思
spec: containers: - image: nginx name: nginx resources: requests: cpu: 10m
執行yaml文件創建副本:
[root@k8s-master01 ~]# kubectl create -f hpa-nginx.yaml deployment.apps/hpa-nginx created
暴露出一個service端口:
[root@k8s-master01 ~]# kubectl expose deployment hpa-nginx --port=80 [root@k8s-master01 ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hpa-nginx ClusterIP 10.98.236.13480/TCP 3m17s kubernetes ClusterIP 10.96.0.1 443/TCP 8d
訪問測試一下:證明這個Pod可以用了
[root@k8s-master01 ~]# curl 10.98.236.134Welcome to nginx! Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.Thank you for using nginx.
配置Hpa自動擴縮容的規則:這條命令是說當hpa-nginx這個Pod的cpu值達到10的時候,將進行自動擴容,最小擴容1個,最大擴容10個。
[root@k8s-master01 ~]# kubectl autoscale deployment hpa-nginx --cpu-percent=10 --min=1 --max=10 horizontalpodautoscaler.autoscaling/hpa-nginx autoscaled
看一下hpa的規則情況:
[root@k8s-master01 ~]# kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-nginx Deployment/hpa-nginx 0%/10% 1 10 1 2m38s
下面進行一個循環訪問hpa-nginx:觀察hpa的cpu值會不會上升
[root@k8s-master01 ~]# while true; do wget -q -O- http://10.98.236.134 >/dev/null; done
觀察是否已經進行擴容:可以看到hpa-nginx的副本數已經進行了自動擴容
[root@k8s-master01 ~]# kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-nginx Deployment/hpa-nginx 640%/10% 1 10 1 7m14s [root@k8s-master01 ~]# kubectl top pod NAME CPU(cores) MEMORY(bytes) busybox 0m 0Mi hpa-nginx-bd88bdd8f-7gdwq 1m 3Mi hpa-nginx-bd88bdd8f-8c6j6 1m 3Mi hpa-nginx-bd88bdd8f-cfcjs 1m 7Mi hpa-nginx-bd88bdd8f-h8vx7 74m 7Mi hpa-nginx-bd88bdd8f-kpgl8 2m 3Mi hpa-nginx-bd88bdd8f-lpf45 1m 3Mi hpa-nginx-bd88bdd8f-lwc2h 1m 3Mi hpa-nginx-bd88bdd8f-qkgfd 1m 3Mi hpa-nginx-bd88bdd8f-t9fj9 1m 3Mi hpa-nginx-bd88bdd8f-tbrl4 1m 7Mi
那么,接下來將訪問測試停下,看副本是否會自動縮容到最初;等待一會發現副本回到了最原始的一個。注意這個時間可能會有點慢,稍微等一會,不是報錯了。
[root@k8s-master01 ~]# kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-nginx Deployment/hpa-nginx 2%/10% 1 10 10 11m [root@k8s-master01 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE busybox 1/1 Running 26 (46m ago) 8d hpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 27m
這個功能雖然好用,但在實際生成中一定要結合實際的情況使用!!!
原文鏈接:https://yyang.blog.csdn.net/article/details/122861622
相關推薦
- 2023-01-10 詳解C語言中的動態內存管理_C 語言
- 2021-12-16 .NET?Core配置TLS?Cipher(套件)的詳細過程_實用技巧
- 2022-05-18 python?安全地刪除列表元素的方法_python
- 2023-06-16 Python中ArcPy柵格裁剪柵格(批量對齊柵格圖像范圍并統一行數與列數)_python
- 2022-07-13 Dos攻擊Tomcat導致coredump問題分析
- 2022-03-16 詳解C語言在STM32中的內存分配問題_C 語言
- 2022-08-07 GoFrame框架gredis優雅的取值和類型轉換_Golang
- 2022-05-11 Nginx代理Redis哨兵主從配置
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支