前言
生产环境中我们经常会遇见服务器资源不够的情况,如果是以往的扩容方式步骤十分繁琐,如果是在k8s集群里面那,那就十分简单了,只要资源池中的资源足够,那么就可以在很短的时间里对pod进行扩容,解决资源不足的情况,在这里介绍k8s的hpa自动扩缩容。
一、配置HPA
1、部署 metrics-server
git clone https://github.com/kubernetes-incubator/metrics-server.git
修改默认的启动命令:
vim metrics-server-deployment.yaml
添加以下几行:
command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
cd metrics-server/deploy
kubectl create -f metrics-server-deployment.yaml
#查看容器是否创建成功
kubectl get pods -n kube-system
2、创建测试实例
#以php-apache rc为例,设置cpu request为200m,未设置limit的值:
vim php-apache-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: php-apache
spec:
replicas: 1
template:
metadata:
name: php-apache
labels:
app: php-apache
spec:
containers:
- name: php-apache
image: gcr.io/google_containers/hpa-example
resources:
requests:
cpu: 200m
ports:
- containerPort: 80
#创建pod
kubectl create -f php-apache-rc.yaml
#创建php-apache的service
vim php-apache-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: php-apache
spec:
ports:
- port: 80
selector:
app: php-apache
#创建service
kubectl create -f php-apache-svc.yaml
二、创建HPA
1、使用命令
kubectl autoscale rc php-apache --min=1 --max=10 --cpu-percent=50
2、使用yaml文件创建实例
vim hpa-php-apache.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: v1
kind: ReplicationController
name: php-apache
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 50
#创建pod
kubectl create -f hpa-php-apache.yaml
#查看创建的hpa
kubectl get hpa
查看创建的hpa
kubectl get hpa
查看状态
kubectl describe hpa php-apache
动态查看
kubectl get hpa -w
3、创建一个压力测试实例
vim busybox-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox
spec:
containers:
- name: busybox
image: busybox
command: [ "sleep", "3600" ]
#创建pod
kubectl create -f busybox-pod.yaml
#登录busybox实例,执行一个无限循环的wget命令访问php-apache
kubectl exec -it busybox – sh
#执行一下命令进行测试
while true; do wget -q -O- http://php-apache >/dev/null;done
#过一段时间后,观察hpa
然后再查看pod 副本个数的变化
最后我们停止压力测试,观察HPA的变化
查看php-apache pod副本数量
恢复到开始时的状态。