3 Kasım 2022 Perşembe

Kubernetes kind: HorizontalPodAutoscaler - CPU İle Ölçekleme

Giriş
Değerler iki şekilde verilebiliyor
1. Yüzde Olarak
2. Mutlak Değer Olarak

Yüzde Olarak
targetCPUUtilizationPercentage kullanılır. Tüm podlardaki ortalama CPU kullanımını alır belirtilen yüzde ile çarpar ve resources/requests alanında belirtilen değer ile karşılaştırır

Mutlak Değer Olarak
targetAverageUtilization kullanılır. Açıklaması şöyle
When a targetAverageValue or targetAverageUtilization is specified, the currentMetricValue is computed by taking the average of the given metric across all Pods in the HorizontalPodAutoscaler's scale target.

1. Yüzde Olarak
Örnek
Yüzde olarak hesaplarken şuna dikkat etmek lazım. Yani resources bölümlü altındaki requests değeri kullanılır. limit değeri kullanılmaz
The documentation states “Utilization is the ratio between the current usage of resource to the requested resources of the pod.”
Deployment şöyle olsun.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworld-deployment
spec:
  template:
    spec:
      containers:
        - name: hello-world
          image: helloworld-webserver:v1.0.0
          resources:
            requests:
              cpu: 10m
              memory: 32Mi
            limits:
              cpu: 100m
              memory: 64Mi
              ...
HPA şöyle olsun. Burada yüzde olarak belirtirsek 10m değeri dikkate alınır. Eğer ortalama 8m'nin üzerine çıkarsa HPA çalışır
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: helloworld-deployment
spec:
  maxReplicas: 4
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: helloworld-deployment
  targetCPUUtilizationPercentage: 80
Açıklaması şöyle
Your HPA will start scaling the replicas up when average CPU utilization exceeds 8m, not 80m.

If you wanted your HPA to allow CPU utilization greater than the request before scaling up, you can simply specify a target utilization percentage greater than 100. In this example, to allow the utilization to reach 60m before scaling up, you could specify a target utilization percentage of 600.
2. Mutlak Değer Olarak
Örnek
Deployment şöyle olsun
apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-deployment
  namespace: default
  labels:
    app: order-deployment
spec:
  selector:
    matchLabels:
      app: order-deployment
  template:
    metadata:
      labels:
        app: order-deployment
    spec:
      containers:
        - name: order-service
          image: ...
          env:
            - name: SPRING_DATASOURCE_URL
              value: "jdbc:postgresql://postgres-service:5432/postgres?currentSchema=order
          resources:
            limits:
              cpu: "500m"
              memory: "1024Mi"
            requests:
              cpu: "200m"
              memory: "256Mi"
Şöyle yaparız. Burada 200m istenmiş. Eğer ortalama 85m'nin üzerine çıkarsa HPA çalışır
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: order-deployment-hpa
  namespace: default
  labels:
    app: order-deployment
spec:
  scaleTargetRef:
    kind: Deployment
    name: order-deployment
    apiVersion: apps/v1
  minReplicas: 2
  maxReplicas: 4
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 85

Hiç yorum yok:

Yorum Gönder

Cluster Propotional Autoscaler - ReplicaSet Ekler/Siler

Giriş Açıklaması şöyle CPA aims to horizontally scale the number of Pod replicas based on the cluster’s scale. A common example is DNS ser...