VK Cloud logo

Vertical Pod Autoscaler пайдалану

Vertical Pod Autoscaler (VPA) — Kubernetes контейнерлері үшін ресурстарды (CPU және RAM) автоматты түрде баптауға арналған құрал. Оның жұмысын толық көлемде зерделеу үшін оны Updater компонентімен Recreate режимінде пайдаланыңыз. Бұл режимде VPA:

  1. Бар подтар үшін ресурстар сұрауы бойынша ұсынымдар жасайды.
  2. Осы подтарды жояды және оларды ұсынылған мәндермен қайта жасайды.

Дайындық қадамдары

  1. Жасаңыз Kubernetes кластерін өзекті нұсқада, егер бұл әлі жасалмаған болса.

  2. Орнатып, баптаңыз kubectl, егер бұл әлі жасалмаса.

  3. Қосылыңыз kubectl көмегімен кластерге.

  4. VPA аддонын орнатыңыз, егер бұл әлі жасалмаса.

  5. (Опционалды) Kube Prometheus Stack аддонын орнатыңыз, егер бұл әлі жасалмаса. Оны VPA дашбордтарын қарау үшін пайдалана аласыз.

    Аддонды орнату кезінде өңдеңіз оның кодын, kube-state-metrics компонентіне VPA дашбордтарын баптауға арналған метрикаларды қосып:

1. Deployment жұмыс жүктемесі контроллерін жасаңыз

  1. nginx қосымшасы үшін Deployment түріндегі жұмыс жүктемесі контроллеріне арналған манифест файлын жасаңыз:

    kubectl apply -f -apiVersion: apps/v1kind: Deploymentmetadata:  labels:    app: nginx  name: nginxspec:  replicas: 2  selector:    matchLabels:      app: nginx strategy: {} template:   metadata:     labels:       app: nginx  spec:    containers:    - image: nginx      name: nginx      resources:        requests:          cpu: 50m          memory: 50Mi        limits:          cpu: 100m          memory: 100Mi

    Мұнда подтар үшін resources блогында 50 мебибайт RAM және 50m CPU сұралады, ал шектеу 100 мебибайт RAM және 100m CPU болып орнатылады.

  2. Deployment контроллері үшін LoadBalancer түрін көрсетіңіз:

    kubectl expose deployment nginx --type=LoadBalancer --port 80
  3. Жүктеме теңгергіші қосылғанша бірнеше минут күтіңіз де, оның сыртқы IP-мекенжайын алу үшін команданы орындаңыз:

    kubectl get services nginx

    Шығарылған кестеден EXTERNAL-IP мәнін табыңыз:

    NAME     TYPE             ...          EXTERNAL-IP             ...nginx    LoadBalancer     ...          100.70.146.28           ...

2. Recreate режиміндегі Updater компоненті бар VPA аддонының объектісін жасаңыз және тестілеуді іске қосыңыз

  1. Recreate жұмыс режиміндегі Updater компоненті бар VPA аддоны үшін манифест файлын жасаңыз (updateMode: "Recreate"):

    kubectl apply -f -apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata: name: nginx-vpaspec: targetRef:   apiVersion: "apps/v1"   kind:       Deployment   name:       nginx updatePolicy:   updateMode: "Recreate" resourcePolicy:   containerPolicies:     - containerName: "nginx"       minAllowed:         cpu: "250m"         memory: "100Mi"       maxAllowed:         cpu: "2000m"         memory: "2048Mi"
  2. Бұрын жасалған қосымша үшін жүктеме теңгергішінің IP-мекенжайын пайдаланып, жүктемелік тестілеуді іске қосыңыз:

    hey -z 300s -c 1000 http://100.70.146.28

3. Нәтижелерді қараңыз

  1. VPA ұсынымдарын келесі командамен қараңыз:

    kubectl describe vpa nginx-vpa

    Команда шығысының Recommendation блогында Deployment объектісі үшін VPA ұсынымдарын көресіз, олар подтарды кейін қолмен немесе VPA арқылы жасау кезінде ресурстарды қалай өзгертуге болатынын көрсетеді. Шығыс мысалы:

    Name:         nginx-vpaNamespace:    defaultLabels:       <none>Annotations:  <none>API Version:  autoscaling.k8s.io/v1Kind:         VerticalPodAutoscalerMetadata:  Creation Timestamp:  2025-09-16T12:02:45Z  Generation:          1  Resource Version:    10112725  UID:                 35866c72-60b4-4b7c-87e3-f79de17c4263Spec:  Resource Policy:    Container Policies:      Container Name:  nginx      Max Allowed:        Cpu:     2000m        Memory:  2048Mi      Min Allowed:        Cpu:     250m        Memory:  100Mi  Target Ref:    API Version:  apps/v1    Kind:         Deployment    Name:         nginx  Update Policy:    Update Mode:  RecreateStatus:  Conditions:    Last Transition Time:  2025-09-16T12:03:38Z    Status:                True    Type:                  RecommendationProvided Recommendation:   Container Recommendations:     Container Name:  nginx     Lower Bound:       Cpu:     250m       Memory:  104857600     Target:       Cpu:     250m       Memory:  104857600     Uncapped Target:       Cpu:     15m       Memory:  104857600     Upper Bound:       Cpu:     250m       Memory:  104857600Events:  Type    Reason      Age   From         Message  ----    ------      ----  ----         -------  Normal  EvictedPod  100s  vpa-updater  VPA Updater evicted Pod nginx-76894897bc-tmc44 to apply resource recommendation.  Normal  EvictedPod  40s   vpa-updater  VPA Updater evicted Pod nginx-76894897bc-vfm9n to apply resource recommendation.

    Мұнда Recommendation блогында:

    • Lower Bound (төменгі шекара) — подтың жұмысқа қабілеттілігін кепілдендіруге болатын ресурстардың ең төменгі ұсынылған мәні. Төменгі шекара подты ресурстардың жетіспеуінен қорғайды, бұл тұрақсыз жұмысқа немесе қателерге әкелуі мүмкін.
    • Target (мақсат) — ресурстарды нақты тұтынуды көрсететін мән.
    • Uncapped Target (көрсетілген шектеулерсіз мақсат) — VPA подтың нақты тұтынуы негізінде есептеген ресурстың оңтайлы мәні. Target мәнімен сәйкес келуі мүмкін.
    • Upper Bound (жоғарғы шекара) — под үшін ұсынылатын ресурстардың ең жоғары мүмкін мәні. Жоғарғы шекара бөлінген ресурстардың шамадан тыс артуын болдырмайды.

    VPA Updater компонентімен Recreate режимінде жұмыс істеген кезде подты жою және кейін қайта жасау мына шарттар бір уақытта орындалса болады:

    • Подтың тұтынуы Lower Bound мәнінен төмен және Target мәнінен 10% жоғары немесе төмен.
    • Подтың тұтынуы Upper Bound мәнінен жоғары және Target мәнінен 10% жоғары немесе төмен.
  2. Келесі команданы орындап, подтардың күйін нақты уақыт режимінде бақылаңыз:

    kubectl get po --watch

    Команда шығысында updateMode: "Recreate" параметрімен VPA жұмысының нәтижесін көресіз: VPA ресурс сұрауына арналған ұсынымдарды өзгертті, соның нәтижесінде Deployment объектісі ескі подты жойып, оны жаңа параметрлермен қайта жасады. Шығыс мысалы:

    NAME                                        READY   STATUS              RESTARTS   AGE  metrics-scraper                             1/1     Running             0          29d  nginx-76894897bc-vfm9n                      1/1     Running             0          55s  nginx-76894897bc-wrbj7                      0/1     ContainerCreating   0          7s   vpa-admission-controller-5f84cf7bf5-9xr8p   1/1     Running             0          15m  vpa-recommender-8d8999979-8stct             1/1     Running             0          4d21hvpa-updater-6d48bdf676-p7vbj                1/1     Running             0          15m  nginx-76894897bc-wrbj7                      1/1     Running             0          12snginx-76894897bc-vfm9n                      1/1     Running             0          108snginx-76894897bc-vfm9n                      1/1     Terminating         0          108snginx-76894897bc-vfm9n                      1/1     Terminating         0          108snginx-76894897bc-mskzl                      0/1     Pending             0          0s  nginx-76894897bc-mskzl                      0/1     Pending             0          0snginx-76894897bc-mskzl                      0/1     ContainerCreating   0          0snginx-76894897bc-mskzl                      0/1     ContainerCreating   0          0snginx-76894897bc-vfm9n                      1/1     Terminating         0          109snginx-76894897bc-vfm9n                      0/1     Terminating         0          109snginx-76894897bc-vfm9n                      0/1     Terminating         0          109snginx-76894897bc-vfm9n                      0/1     Terminating         0          109snginx-76894897bc-vfm9n                      0/1     Terminating         0          109snginx-76894897bc-mskzl                      1/1     Running             0          11s
  3. Updater компоненті жойған под қайта жасалған кезде Admission Controller компоненті қосатын мета-ақпаратты қараңыз. Ол үшін келесі команданы орындаңыз:

    kubectl describe po nginx-76894897bc-mskzl

    Шығыс мысалы:

    Name:             nginx-76894897bc-mskzlNamespace:        defaultPriority:         0Service Account:  defaultNode:             k8s-test-129-prometheus-0/192.168.1.27Start Time:       Tue, 16 Sep 2025 15:04:54 +0300Labels:           app=nginx                  pod-template-hash=76894897bcAnnotations:      cni.projectcalico.org/containerID: 161f4da190ec19f47c835ec3b2078e8c65750468c0eca310cec5f1e47f92a49e                  cni.projectcalico.org/podIP: 10.100.124.114/32                  cni.projectcalico.org/podIPs: 10.100.124.114/32                  vpaObservedContainers: nginx                  vpaUpdates: Pod resources updated by nginx-vpa: container 0: cpu request, memory request, cpu limit, memory limitStatus:           RunningIP:               10.100.124.114
  4. (Опционалды) Аддон жұмысының нәтижелерін Grafana дашбордында қараңыз:

    1. Қосылыңыз Kube Prometheus Stack аддоны құрамына кіретін Grafana веб-интерфейсіне.
    2. Home → Dashboards → General → VPA Recommendations бөліміндегі дашбордтарды қараңыз.

Пайдаланылмайтын ресурстарды жойыңыз

Жұмыс істеп тұрған кластер тарификацияланады және есептеу ресурстарын тұтынады. Егер сіз кластерді тестілеу мақсатында жасап, ол енді қажет болмаса: