Using Metrics Provider to stream Yandex Managed Service for Kubernetes metrics
Metrics Provider delivers metrics of Managed Service for Kubernetes cluster objects to monitoring systems and automatic scaling systems.
In this tutorial, you will learn how to set up the delivery of external metrics to Horizontal Pod Autoscaler using Metrics Provider.
To set up the delivery of metrics:
- Set up the runtime environment.
- Install Metrics Provider and the runtime environment.
- Test Metrics Provider.
If you no longer need the resources you created, delete them.
Required paid resources
The support cost for this solution includes:
- Fee for using the master and outgoing traffic in a Managed Service for Kubernetes cluster (see Managed Service for Kubernetes pricing).
- Fee for using computing resources, OS, and storage in cluster nodes (VMs) (see Compute Cloud pricing).
- Fee for a public IP address assigned to cluster nodes (see Virtual Private Cloud pricing).
Getting started
-
If you do not have the Yandex Cloud CLI installed yet, install and initialize it.
By default, the CLI uses the folder specified when creating the profile. To change the default folder, use the
yc config set folder-id <folder_ID>command. You can also set a different folder for any specific command using the--folder-nameor--folder-idparameter. -
Create security groups for the Managed Service for Kubernetes cluster and its node groups.
Warning
The configuration of security groups determines the performance and availability of the cluster and the services and applications running in it.
-
Create a Managed Service for Kubernetes cluster and node group with any suitable configuration. When creating, specify the preconfigured security groups.
-
Install kubect
and configure it to work with the new cluster.
Set up the runtime environment
To test Metrics Provider, you will create the nginx test app and Horizontal Pod Autoscaler to receive CPU utilization metrics from Metrics Provider.
-
Create the
app.yamlfile with thenginxapp manifest:app.yaml
--- ### Deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: kube-system labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: registry.k8s.io/hpa-example resources: requests: memory: "256Mi" cpu: "500m" limits: memory: "500Mi" cpu: "1" --- ### Service apiVersion: v1 kind: Service metadata: name: nginx namespace: kube-system spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer -
Create the
hpa.yamlfile with the Horizontal Pod Autoscaler manifest fortest-hpa:apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: test-hpa namespace: kube-system spec: maxReplicas: 2 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx metrics: - type: External external: metric: name: cpu_usage selector: matchLabels: service: "compute" resource_id: "<node_name>" resource_type: "vm" target: type: Value value: "20"You can get the name of the node for deploying Metrics Provider and the runtime environment with the list of cluster nodes:
kubectl get nodes
Install Metrics Provider and the runtime environment
-
Install Metrics Provider by following this guide.
-
Create a test application and Horizontal Pod Autoscaler:
kubectl apply -f app.yaml && \ kubectl apply -f hpa.yaml -
Make sure the app pods switched to
Running:kubectl get pods -n kube-system | grep nginx && \ kubectl get pods -n kube-system | grep metricsResult:
nginx-6c********-dbfrn 1/1 Running 0 2d22h nginx-6c********-gckhp 1/1 Running 0 2d22h metrics-server-v0.3.1-6b********-f7dv6 2/2 Running 4 7d3h
Test Metrics Provider
Make sure that Horizontal Pod Autoscaler receives metrics from Metrics Provider and uses them to calculate the number of the nginx app pods:
kubectl -n kube-system describe hpa test-hpa
In the expected command output, the AbleToScale and ScalingActive conditions should be True:
Name: test-hpa
Namespace: kube-system
...
Min replicas: 1
Max replicas: 2
Deployment pods: 2 current / 2 desired
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale recommended size matches current size
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from external metric cpu_usage(&LabelSelector{MatchLabels:map[string]string{resource_id: <node_name>,resource_type: vm,service: compute,},MatchExpressions:[]LabelSelectorRequirement{},})
Events: <none>
Note
Metrics Provider will take some time to fetch metrics from the Managed Service for Kubernetes cluster. If the unable to get external metric ... no metrics returned from external metrics API error occurs, repeat the provider test after a few minutes.
Delete the resources you created
Delete the resources you no longer need to avoid paying for them:
- Delete the Managed Service for Kubernetes cluster.
- Delete the cluster public static IP address if you reserved one.