在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现。 Kubernetes支持对Pod的手动扩容和自动扩容。在扩容的时候可以定义CPU、内存等指标来激活扩容动作。
HPA 指标服务器部署
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
kubectl describe hpa … unable to get metrics for resource cpu: no metrics returned from resource metrics API
kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache /20% 1 10 1 21m
#https://github.com/kubernetes-sigs/metrics-server#flags
修复 修改components.yaml
containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server/metrics-server:v0.3.7
imagePullPolicy: IfNotPresent
args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls #add
- --kubelet-preferred-address-types=InternalIP #add
然后kubectl apply -f components.yaml
测试
kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master16 238m 5% 2564Mi 32%
master17 167m 4% 2029Mi 25%
master18 213m 5% 2774Mi 35%
node19 201m 3% 4095Mi 31%
node20 222m 2% 3690Mi 23%
node21 172m 2% 5165Mi 32%
kubectl top po
NAME CPU(cores) MEMORY(bytes)
php-apache-79544c9bd9-4vbhw 1m 9Mi
php-apache-79544c9bd9-5wwh9 1m 9Mi
php-apache-79544c9bd9-9jj2f 1m 12Mi
php-apache-79544c9bd9-kwrsm 1m 9Mi
php-apache-79544c9bd9-mkz5z 1m 9Mi
php-apache-79544c9bd9-n578h 1m 9Mi
php-apache-79544c9bd9-p77t5 1m 12Mi
php-apache-79544c9bd9-wxq8k 1m 9Mi
php-apache-79544c9bd9-zv69v 1m 12Mi
有数据指标出现,表示部署正确。
部署测试deploy
application/php-apache.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: k8s.gcr.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
#kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
创建HPA伸缩策略
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
查看策略
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 10 9 46m
#负载装载
kubectl run -it --rm load-generator --image=busybox /bin/sh
/ # while true; do wget -q -O- http://php-apache; done
#查看扩容效果
kubectl get pod,hpa
NAME READY STATUS RESTARTS AGE
pod/load-generator-5fb4fb465b-wrj79 1/1 Running 0 40m
pod/php-apache-79544c9bd9-9jj2f 1/1 Running 0 44s
pod/php-apache-79544c9bd9-p77t5 1/1 Running 0 15m
pod/php-apache-79544c9bd9-zv69v 1/1 Running 0 44s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/php-apache Deployment/php-apache 138%/50% 1 10 3 40m
#冷却后情况:
kubectl get hpa,pod
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/php-apache Deployment/php-apache 0%/50% 1 10 1 48m
NAME READY STATUS RESTARTS AGE
pod/php-apache-79544c9bd9-p77t5 1/1 Running 0 23m