網站首頁 編程語言 正文
自動擴縮容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.134 <none> 80/TCP 3m17s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8d
訪問測試一下:證明這個Pod可以用了
[root@k8s-master01 ~]# curl 10.98.236.134
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
配置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://blog.csdn.net/qq_42527269/article/details/122861622
相關推薦
- 2022-08-14 在WPF中合并兩個ObservableCollection集合_C#教程
- 2023-02-01 Python?AI編程助手AICodeHelper使用示例_python
- 2022-11-12 C語言大小端字節序存儲模式深入解讀_C 語言
- 2022-07-29 Ceph分布式存儲集群Pool資源池簡介及使用小結_其它綜合
- 2022-10-04 python中xml格式的轉換方法_python
- 2022-05-15 Python數據結構與算法中的棧詳解_python
- 2022-10-07 C#如何實現調取釘釘考勤接口的功能_C#教程
- 2022-11-30 React18?中的?Suspense?API使用實例詳解_React
- 最近更新
-
- 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同步修改后的遠程分支