Kubernetes在autoscalingV2版本的api中支持了Resource、Object、Pods三种指标类型,其中
Resource类型:主要用于受限于requests和limits的资源,比如cpu、memory
Object类型:主要用于Kubernetes内置的资源对象,如Ingress的每秒请求数指标
Pods类型: 主要用于每个pod内的指标,比如tps等。
要使用hpa,第一步是安装heapster(下面的10.135.19.77换成自己k8s可以访问到的ip)
wget https://github.com/kubernetes/heapster/archive/master.zip unzip master.zip cd heapster-master/ sed -i "s/gcr.io/Google_containers/heapster-grafana-amd64:v4.4.3/index.tenxcloud.com/jimmy/heapster-grafana-amd64:v4.0.2/g" deploy/kube-config/influxdb/grafana.yaml sed -i "s/gcr.io/google_containers/heapster-amd64:v1.4.0/index.tenxcloud.com/jimmy/heapster-amd64:v1.3.0-beta.1/g" deploy/kube-config/influxdb/heapster.yaml sed -i "s/https://kubernetes.default/http://10.135.19.77:8080?inClusterConfig=false&useServiceAccount=false/g" deploy/kube-config/influxdb/heapster.yaml sed -i "s/monitoring-influxdb.kube-system.svc/10.135.19.77/g" deploy/kube-config/influxdb/heapster.yaml sed -i "s/gcr.io/google_containers/heapster-influxdb-amd64:v1.3.3/index.tenxcloud.com/jimmy/heapster-influxdb-amd64:v1.1.1/g" deploy/kube-config/influxdb/influxdb.yaml /bin/bash deploy/kube.sh start
编写测试例子
编写文件a.yaml
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app spec: replicas: 2 template: metadata: labels: app: my-app spec: containers: - name: my-app image: registry.alauda.cn/yubang/paas_base_test ports: - containerPort: 80 command: ["/bin/bash", "/var/start.sh"] resources: limits: cpu: 0.01 memory: 64Mi
编写文件b.yaml
apiVersion: v1 kind: Service metadata: name: my-app-svc labels: app: my-app spec: ports: - port: 80 targetPort: 80 nodePort: 30964 type: NodePort selector: app: my-app
编写文件c.yaml
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: my-app-hpa namespace: default spec: scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: my-app minReplicas: 1 maxReplicas: 10 targetCPUUtilizationPercentage: 5
启动服务
kubectl apply -f a.yaml --validate kubectl apply -f b.yaml --validate kubectl apply -f c.yaml --validate
查看是否正常运行
kubectl get horizontalpodautoscaler