k8s使用keda基于prometheus指标(pod的limits内存和cpu)对pod扩容

运维小白 18 阅读 1 评论 云原生

keda官网地址:

https://keda.sh/

keda与k8s版本对应

安装keda(根据自己的k8s版本安装对应的keda)

kubectl apply --server-side -f keda-2.18.3.yaml
kubectl apply --server-side -f keda-2.18.3-core.yaml

创建自动扩容

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: 自定义名称
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: deployment名称
  minReplicaCount: 1
  maxReplicaCount: 10
  
  triggers:
    # CPU 触发器
    - type: prometheus
      name: cpu
      metadata:
        serverAddress: http://prometheus-k8s.monitoring.svc.cluster.local:9090
        query: |
          max(
            sum(rate(container_cpu_usage_seconds_total{container!="POD", container!="", pod=~"pod名称前缀-.*"}[2m])) by (pod)
            /
            sum(kube_pod_container_resource_limits{resource="cpu", pod=~"pod名称前缀-.*"}) by (pod)
          ) * 100
        threshold: '80'
        metricType: Value

    # 内存触发器
    - type: prometheus
      name: memory
      metadata:
        serverAddress: http://prometheus-k8s.monitoring.svc.cluster.local:9090
        query: |
          max(
            sum(container_memory_working_set_bytes{container!="POD", container!="", pod=~"pod名称前缀-.*"}) by (pod)
            /
            sum(kube_pod_container_resource_limits{resource="memory", pod=~"pod名称前缀-.*"}) by (pod)
          ) * 100
        threshold: '80'
        metricType: Value

最终的结果