Cette rubrique explique comment configurer des métriques définies par l'utilisateur pour l'autoscaling horizontal des pods (HPA, Horizontal Pod Autoscaling) dans Anthos Clusters on VMware (GKE On-Prem) .
Activer Logging et Monitoring pour les applications utilisateur
La configuration de Logging et Monitoring se trouve dans un objet Stackdriver nommé stackdriver
.
Ouvrez l'objet
stackdriver
à modifier :kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Remplacez USER_CLUSTER_KUBECONFIG par le chemin d'accès du fichier kubeconfig de votre cluster d'utilisateur.
Sous
spec
, définissezenableStackdriverForApplications
etenableCustomMetricsAdapter
surtrue
:apiVersion: addons.sigs.k8s.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: project-id clusterName: cluster-name clusterLocation: cluster-location proxyConfigSecretName: secret-name enableStackdriverForApplications: true enableCustomMetricsAdapter: true enableVPC: stackdriver-enable-VPC optimizedMetrics: true
Enregistrez et fermez le fichier modifié.
Une fois ces étapes effectuées, tous les journaux des applications utilisateur sont envoyés à Cloud Logging.
L'étape suivante consiste à annoter l'application utilisateur pour la collecte de métriques.
Annoter une application utilisateur pour la collecte de métriques
Pour annoter une application utilisateur de sorte qu'elle soit interrogée et les journaux envoyés à Cloud Monitoring, vous devez ajouter les annotations
correspondant aux métadonnées du service, du pod et des points de terminaison.
metadata: name: "example-monitoring" namespace: "default" annotations: prometheus.io/scrape: "true" prometheus.io/path: "" - Overriding metrics path (default "/metrics")
Déployer un exemple d'application utilisateur
Dans cette section, vous allez déployer un exemple d'application à la fois avec des journaux et des métriques compatibles avec prometheus.
- Enregistrez les fichiers manifeste de service et de déploiement suivants dans un fichier nommé
my-app.yaml
. Notez que le service possède l'annotationprometheus.io/scrape: "true"
:
kind: Service
apiVersion: v1
metadata:
name: "example-monitoring"
namespace: "default"
annotations:
prometheus.io/scrape: "true"
spec:
selector:
app: "example-monitoring"
ports:
- name: http
port: 9090
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: "example-monitoring"
namespace: "default"
labels:
app: "example-monitoring"
spec:
replicas: 1
selector:
matchLabels:
app: "example-monitoring"
template:
metadata:
labels:
app: "example-monitoring"
spec:
containers:
- image: gcr.io/google-samples/prometheus-example-exporter:latest
name: prometheus-example-exporter
imagePullPolicy: Always
command:
- /bin/sh
- -c
- ./prometheus-example-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
resources:
requests:
cpu: 100m
Créez le déploiement et le service :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Utiliser les métriques personnalisées dans le HPA
Déployez l'objet HPA pour utiliser la métrique exposée à l'étape précédente. Pour en savoir plus sur les différents types de métriques personnalisées, consultez la section Autoscaling sur plusieurs métriques et métriques personnalisées.
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: example-monitoring-hpa namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example-monitoring minReplicas: 1 maxReplicas: 5 metrics: - type: Pods pods: metric: name: example_monitoring_up target: type: AverageValue averageValue: 20
La métrique du type de pods comporte un sélecteur de métriques par défaut pour les libellés des pods cibles, ce qui correspond au fonctionnement de kube-controller-manager. Dans cet exemple, vous pouvez interroger la métrique example_monitoring_up avec le sélecteur {matchLabels: {app: example-monitoring}}
, car elle est disponible dans les pods cibles. Tout autre sélecteur spécifié est ajouté à la liste. Pour éviter d'utiliser le sélecteur par défaut, vous pouvez supprimer n'importe quel libellé du pod cible ou utiliser la métrique de type objet.
Vérifier que les métriques d'application définies par l'utilisateur sont utilisées par le HPA
Vérifiez que le HPA utilise les métriques d'application définies par l'utilisateur :
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG describe hpa example-monitoring-hpa
Le résultat doit se présenter comme suit :
Name: example-monitoring-hpa Namespace: default Labels:Annotations: CreationTimestamp: Mon, 19 Jul 2021 16:00:40 -0800 Reference: Deployment/example-monitoring Metrics: ( current / target ) "example_monitoring_up" on pods: 1 / 20 Min replicas: 1 Max replicas: 5 Deployment pods: 1 current / 1 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 pods metric example_monitoring_up ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
Coûts
L'utilisation de métriques personnalisées pour le HPA n'entraîne aucuns frais supplémentaires. Les utilisateurs ne sont facturés que pour les métriques et les journaux de l'application. Pour en savoir plus, consultez les tarifs de la suite Google Cloud Operations. Le pod permettant d'activer les métriques personnalisées consomme 15 m de processeur et 20 Mo de mémoire supplémentaires.