一、系統環境
CentOS Linux release 7.9.2009 (Core)
kubectl-1.20.4-0.x86_64
kubelet-1.20.4-0.x86_64
kubeadm-1.20.4-0.x86_64
kubernetes-cni-0.8.7-0.x86_64
二、k8s架構
| 用途 | ip地址 | 主機名 |
| master | 192.168.10.127 | minio-4 |
| node01 | 192.168.10.124 | minio-1 |
| node02 | 192.168.10.125 | minio-2 |
| node03 | 192.168.10.126 | minio-3 |
| nfs存盤 | 192.168.10.143 |
三、HPA簡介
關于具體的概念請參考,官方檔案(Pod 水平自動伸縮 - Kubernetes)
HPA的全稱為(Horizontal Pod Autoscaling)它可以根據當前pod資源的使用率(如CPU、磁盤、記憶體等),進行副本數的動態的擴容與縮容,以便減輕各個pod的壓力,當pod負載達到一定的閾值后,會根據擴縮容的策略生成更多新的pod來分擔壓力,當pod的使用比較空閑時,在穩定空閑一段時間后,還會自動減少pod的副本數量,
若要實作自動擴縮容的功能,要基于CPU利用率自動伸縮 replication controller、deployment和 replica set 中的 pod 數量,(除了 CPU 利用率)也可以 基于其他應程式提供的度量指標custom metrics, pod 自動縮放不適用于無法縮放的物件,比如 DaemonSets,
Pod 水平自動伸縮特性由 Kubernetes API 資源和控制器實作,資源決定了控制器的行為, 控制器會周期性的獲取平均 CPU 利用率,并與目標值相比較后來調整 replication controller 或 deployment 中的副本數量,

所以要實作水平自動擴縮容的功能,我們在k8s集群上要先安裝【K8s 核心監控聚合器 metrics-server】沒有安裝這個功能模塊,具體安裝方法請參考我上一編文章(CSDN)
總之要在master上執行kubectl top node后,各項的資源使用指標能夠出來,就沒有問題
# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
minio-1 55m 2% 1216Mi 64%
minio-2 66m 3% 1063Mi 56%
minio-3 36m 3% 1107Mi 58%
minio-4 130m 6% 1382Mi 73%
四、實作pod自動水平擴縮容
1、生成HPA控制器
vim php-fpm74-hpa.yaml
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: php-fpm74-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-fpm74
minReplicas: 1 #最小pod數量
maxReplicas: 3 #最大pod數量
metrics: #我是以cpu資源和記憶體資源來衡量指標,來擴縮容的
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
- type: Resource
resource:
name: memory
targetAverageValue: 80Mi
kubectl create -f php-fpm74-hpa.yaml
# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-fpm74-hpa Deployment/php-fpm74 23281664/80Mi, 1%/50% 1 3 1 38d
#在k8s面版上也可以看到創建的HPA

2、驗證自動伸縮服務
用nginx+php服務來測驗的
#創建php服務
vim php-fpm74-dep.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-fpm74
spec:
selector:
matchLabels:
app: php-fpm74
replicas: 1 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: php-fpm74
spec:
containers:
- name: php-fpm74
image: registry-op.test.cn/php-fpm:7.4
ports:
- containerPort: 9000
resources:
requests:
cpu: 100m #這些資源的設定是必要的
memory: 30Mi
limits:
cpu: 100m
memory: 30Mi
kubectl create -f php-fpm74-dep.yaml
#vim php-fpm74-service.yaml
apiVersion: v1
kind: Service
metadata:
name: php-fpm74
labels:
app: php-fpm74
spec:
ports:
- port: 9000
targetPort: 9000
protocol: TCP
type: ClusterIP
selector:
app: php-fpm74
kubcectl create -f php-fpm74-service.yaml
#vim nginx-dep.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-php74
spec:
selector:
matchLabels:
app: nginx-php74
replicas: 1 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx-php74
spec:
containers:
- name: nginx
image: registry-op.test.cn/nginx:1.14.9
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 30Mi
limits:
cpu: 100m
memory: 30Mi
volumeMounts:
- mountPath: /etc/nginx/nginx.conf
name: nginx-php74
subPath: nginx.conf
volumes:
- name: nginx-php74
configMap:
name: nginx-php-configmap
items:
- key: nginx_php_conf
path: nginx.conf
imagePullSecrets:
- name: registry-op.hjimi.cn
kubcectl create -f nginx-dep.yaml
#vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-php74
labels:
app: nginx-php74
spec:
ports:
- port: 80
targetPort: 80
nodePort: 30001
protocol: TCP
type: NodePort
selector:
app: nginx-php74
#測驗方法
這里是用ab工具測驗的,直接測驗phpinfo()頁面
# ab -n 10000 -c 1000 http://pvc.test.cn/index.php
測驗5分鐘左右,使用kubectl get hpa查看一下結果,可以看到結果是按照預想的,HPA實作pod副本數量的自動擴容與縮容就實作了,
# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-fpm74-hpa Deployment/php-fpm74 15829674666m/80Mi, 9%/50% 1 3 3 38d
# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
php-fpm74-6dfd9d9b4c-8cr5b 1m 23Mi
php-fpm74-6dfd9d9b4c-k9w8v 1m 7Mi
php-fpm74-6dfd9d9b4c-lbbq4 1m 14Mi
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/302748.html
標籤:其他
上一篇:簡單幾個操作小技巧提高你的生產力!??我好了,你呢??
下一篇:WireShark 使用說明
