[Kubernetes] - 运维开发实践 - HPA

1. 概述

HorizontalPodAutoscaler (简称HPA)自动更新工作负载,目的是按照预先定义好的指标,自动扩缩工作负载以满足需求;

2. 部署nginx-deployment应用

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      annotations:
        prometheus.io/port: "80"
        prometheus.io/scrape: "true"
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80
          volumeMounts:
            - name: nginx-volume
              mountPath: /usr/share/nginx/html
          resources:
            requests:
              memory: 50Mi
              cpu: 50m
            limits:
              memory: 256Mi
              cpu: 100m
      volumes:
        - name: nginx-volume
          hostPath:
            path: "/var/data"
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-deployment-svc
spec:
  selector:
    app: nginx
  ports:
    - name: nginx-deployment-svc-http
      protocol: TCP
      port: 80
      targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-deployment-svc-ing
  namespace: default
  annotations: 
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: yuanxi.com
    http: 
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-deployment-svc
            port: 
              number: 80
---

HINT: Ingress Controller 如何部署使用,参考 Ingress Controller 部署

3. metrics.k8s.io

3.1. 部署Metrics Server

首先我们需要有一个能提供指标的服务,这样我们可以按照这些指标来配置HPA, 参考部署metrics server 运维开发实践 - Metric Server安装使用
在这里插入图片描述

3.2. 测试 metrics.k8s.io

3.2.1. 部署HPA

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-deployment-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  maxReplicas: 10
  minReplicas: 1
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 20
#!/bin/bash
for((i=1;i<=10000;i++));
do
    curl http://yuanxi.com:30001/
done

通过运行上述脚本调用我们的nginx,服务,可以看到nginx服务的resource使用率在不断上涨,当cpu平均使用率大于20%的时候,Pod数量会增加。

4. custom.metrics.k8s.io

5. external.metrics.k8s.io

Reference

metrics server

你可能感兴趣的:(kubernetes,容器,云原生)