千家信息网

用heapster实现HPA

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,Horizontal Pod Autoscaling(Pod水平自动伸缩),简称HPA。HAP通过监控分析RC或者Deployment控制的所有Pod的负载变化情况来确定是否需要调整Pod的副本数量,
千家信息网最后更新 2024年11月19日用heapster实现HPA

Horizontal Pod Autoscaling(Pod水平自动伸缩),简称HPA。HAP通过监控分析RC或者Deployment控制的所有Pod的负载变化情况来确定是否需要调整Pod的副本数量,这是HPA最基本的原理。
HPA在kubernetes集群中被设计成一个controller,HPA Controller默认30s轮询一次(可通过kube-controller-manager的标志--horizontal-pod-autoscaler-sync-period进行设置),查询指定的资源(RC或者Deployment)中Pod的资源使用率,并且与创建时设定的值和指标做对比,从而实现自动伸缩的功能。
HPA可以从两个地方获取数据:
1、Heapster:仅支持CPU使用率
2、自定义监控

安装配置heapster
https://github.com/kubernetes-retired/heapster/tree/v1.4.2/deploy/kube-config/influxdb
$ docker pull docker.io/zhaoqing/heapster-amd64:1.4.2
$ docker pull docker.io/pupudaye/heapster-influxdb-amd64:v1.3.3
1、安装heapster数据库influxdb

---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: monitoring-influxdb  namespace: kube-systemspec:  replicas: 1  template:    metadata:      labels:        task: monitoring        k8s-app: influxdb    spec:      containers:      - name: influxdb        image: docker.io/pupudaye/heapster-influxdb-amd64:v1.3.3        volumeMounts:        - mountPath: /data          name: influxdb-storage      volumes:      - name: influxdb-storage        emptyDir: {}---apiVersion: v1kind: Servicemetadata:  labels:    task: monitoring    kubernetes.io/cluster-service: 'true'    kubernetes.io/name: monitoring-influxdb  name: monitoring-influxdb  namespace: kube-systemspec:  ports:  - port: 8086    targetPort: 8086  selector:    k8s-app: influxdb

2、安装heapster

---apiVersion: v1kind: ServiceAccountmetadata:  name: heapster  namespace: kube-system---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata:  name: dongyali-sa2-clusterrolebindingsubjects:- kind: ServiceAccount  name: heapster  namespace: kube-systemroleRef:  kind: ClusterRole  name: cluster-admin  apiGroup: rbac.authorization.k8s.io---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: heapster  namespace: kube-systemspec:  replicas: 1  template:    metadata:      labels:        task: monitoring        k8s-app: heapster    spec:      serviceAccountName: heapster      containers:      - name: heapster        image: docker.io/zhaoqing/heapster-amd64:1.4.2        imagePullPolicy: IfNotPresent        command:        - /heapster        - --source=kubernetes:https://kubernetes.default        - --sink=influxdb:http://monitoring-influxdb.kube-system.svc:8086---apiVersion: v1kind: Servicemetadata:  labels:    task: monitoring    kubernetes.io/cluster-service: 'true'    kubernetes.io/name: Heapster  name: heapster  namespace: kube-systemspec:  ports:  - port: 80    targetPort: 8082  selector:    k8s-app: heapster

3、修改kube-controller-manager.yaml
$ cd /etc/kubernetes/manifests/
$ vim kube-controller-manager.yaml

spec:  containers:  - command:    - kube-controller-manager    - --horizontal-pod-autoscaler-use-rest-clients=false         #增加

修改后自动生效
4、创建应用pod用户测试hpa

apiVersion: apps/v1beta1kind: Deploymentmetadata:  name: hpa-nginx-deploy  labels:    app: nginx-demospec:  revisionHistoryLimit: 15  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx        resources:          requests:            cpu: 100m        ports:        - containerPort: 80

5、针对上述pod创建hpa
$ kubectl autoscale deployment hpa-nginx-deploy --cpu-percent=10 --min=1 --max=10
设置最小的 pod 副本数为1,最大为10。HPA会根据设定的 cpu使用率(10%)动态的增加或者减少pod数量。
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS
hpa-nginx-deploy Deployment/hpa-nginx-deploy 0%/10% 1 10 1
$ kubectl get hpa hpa-nginx-deploy -o yaml
$ kubectl describe hpa hpa-nginx-deploy
6、用压力测试查看hpa变化情况
$ kubectl get pod -o wide|grep hpa
hpa-nginx-deploy-7db6976d9b-p7llf 1/1 Running 0 155m 10.244.2.250 server242.example.com
$ kubectl run -i --tty load-generator --image=busybox /bin/sh
/ # while true; do wget -q -O- http://10.244.2.250; done
在另一个终端查看
$ kubectl get hpa
$ kubectl get deployment hpa-nginx-deploy
$ kubectl delete deployments.apps load-generator

0