Vertical Pod Autoscaler пайдалану
Vertical Pod Autoscaler (VPA) — Kubernetes контейнерлері үшін ресурстарды (CPU және RAM) автоматты түрде баптауға арналған құрал. Оның жұмысын толық көлемде зерделеу үшін оны Updater компонентімен Recreate режимінде пайдаланыңыз. Бұл режимде VPA:
- Бар подтар үшін ресурстар сұрауы бойынша ұсынымдар жасайды.
- Осы подтарды жояды және оларды ұсынылған мәндермен қайта жасайды.
-
Жасаңыз Kubernetes кластерін өзекті нұсқада, егер бұл әлі жасалмаған болса.
-
Орнатып, баптаңыз
kubectl, егер бұл әлі жасалмаса. -
Қосылыңыз
kubectlкөмегімен кластерге. -
VPA аддонын орнатыңыз, егер бұл әлі жасалмаса.
-
(Опционалды) Kube Prometheus Stack аддонын орнатыңыз, егер бұл әлі жасалмаса. Оны VPA дашбордтарын қарау үшін пайдалана аласыз.
Аддонды орнату кезінде өңдеңіз оның кодын,
kube-state-metricsкомпонентіне VPA дашбордтарын баптауға арналған метрикаларды қосып:
-
nginxқосымшасы үшінDeploymentтүріндегі жұмыс жүктемесі контроллеріне арналған манифест файлын жасаңыз:kubectl apply -f -apiVersion: apps/v1kind: Deploymentmetadata:labels:app: nginxname: nginxspec:replicas: 2selector:matchLabels:app: nginxstrategy: {}template:metadata:labels:app: nginxspec:containers:- image: nginxname: nginxresources:requests:cpu: 50mmemory: 50Milimits:cpu: 100mmemory: 100MiМұнда подтар үшін
resourcesблогында 50 мебибайт RAM және 50m CPU сұралады, ал шектеу 100 мебибайт RAM және 100m CPU болып орнатылады. -
Deploymentконтроллері үшінLoadBalancerтүрін көрсетіңіз:kubectl expose deployment nginx --type=LoadBalancer --port 80 -
Жүктеме теңгергіші қосылғанша бірнеше минут күтіңіз де, оның сыртқы IP-мекенжайын алу үшін команданы орындаңыз:
kubectl get services nginxШығарылған кестеден
EXTERNAL-IPмәнін табыңыз:NAME TYPE ... EXTERNAL-IP ...nginx LoadBalancer ... 100.70.146.28 ...
2. Recreate режиміндегі Updater компоненті бар VPA аддонының объектісін жасаңыз және тестілеуді іске қосыңыз
-
Recreateжұмыс режиміндегі Updater компоненті бар VPA аддоны үшін манифест файлын жасаңыз (updateMode: "Recreate"):kubectl apply -f -apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata:name: nginx-vpaspec:targetRef:apiVersion: "apps/v1"kind: Deploymentname: nginxupdatePolicy:updateMode: "Recreate"resourcePolicy:containerPolicies:- containerName: "nginx"minAllowed:cpu: "250m"memory: "100Mi"maxAllowed:cpu: "2000m"memory: "2048Mi" -
Бұрын жасалған қосымша үшін жүктеме теңгергішінің IP-мекенжайын пайдаланып, жүктемелік тестілеуді іске қосыңыз:
hey -z 300s -c 1000 http://100.70.146.28
-
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:45ZGeneration: 1Resource Version: 10112725UID: 35866c72-60b4-4b7c-87e3-f79de17c4263Spec:Resource Policy:Container Policies:Container Name: nginxMax Allowed:Cpu: 2000mMemory: 2048MiMin Allowed:Cpu: 250mMemory: 100MiTarget Ref:API Version: apps/v1Kind: DeploymentName: nginxUpdate Policy:Update Mode: RecreateStatus:Conditions:Last Transition Time: 2025-09-16T12:03:38ZStatus: TrueType: RecommendationProvidedRecommendation:Container Recommendations:Container Name: nginxLower Bound:Cpu: 250mMemory: 104857600Target:Cpu: 250mMemory: 104857600Uncapped Target:Cpu: 15mMemory: 104857600Upper Bound:Cpu: 250mMemory: 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% жоғары немесе төмен.
-
Келесі команданы орындап, подтардың күйін нақты уақыт режимінде бақылаңыз:
kubectl get po --watchКоманда шығысында
updateMode: "Recreate"параметрімен VPA жұмысының нәтижесін көресіз: VPA ресурс сұрауына арналған ұсынымдарды өзгертті, соның нәтижесіндеDeploymentобъектісі ескі подты жойып, оны жаңа параметрлермен қайта жасады. Шығыс мысалы:NAME READY STATUS RESTARTS AGEmetrics-scraper 1/1 Running 0 29dnginx-76894897bc-vfm9n 1/1 Running 0 55snginx-76894897bc-wrbj7 0/1 ContainerCreating 0 7svpa-admission-controller-5f84cf7bf5-9xr8p 1/1 Running 0 15mvpa-recommender-8d8999979-8stct 1/1 Running 0 4d21hvpa-updater-6d48bdf676-p7vbj 1/1 Running 0 15mnginx-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 0snginx-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 -
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=nginxpod-template-hash=76894897bcAnnotations: cni.projectcalico.org/containerID: 161f4da190ec19f47c835ec3b2078e8c65750468c0eca310cec5f1e47f92a49ecni.projectcalico.org/podIP: 10.100.124.114/32cni.projectcalico.org/podIPs: 10.100.124.114/32vpaObservedContainers: nginxvpaUpdates: Pod resources updated by nginx-vpa: container 0: cpu request, memory request, cpu limit, memory limitStatus: RunningIP: 10.100.124.114 -
(Опционалды) Аддон жұмысының нәтижелерін Grafana дашбордында қараңыз:
- Қосылыңыз Kube Prometheus Stack аддоны құрамына кіретін Grafana веб-интерфейсіне.
- Home → Dashboards → General → VPA Recommendations бөліміндегі дашбордтарды қараңыз.
Жұмыс істеп тұрған кластер тарификацияланады және есептеу ресурстарын тұтынады. Егер сіз кластерді тестілеу мақсатында жасап, ол енді қажет болмаса:
- тоқтатыңыз оны кейінірек пайдалану үшін;
- жойыңыз оны біржола.