生产环境中我们经常会遇见服务器资源不够的情况,如果是以往的扩容方式步骤十分繁琐,如果是在k8s集群里面那,那就十分简单了,只要资源池中的资源足够,那么就可以在很短的时间里对pod进行扩容,解决资源不足的情况,在这里介绍k8s的hpa自动扩缩容。
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
#以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
kubectl autoscale rc php-apache --min=1 --max=10 --cpu-percent=50
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
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副本数量
恢复到开始时的状态。