Déploiement de services de surveillance sur Kubernetes

Cette rubrique décrit comment utiliser Prometheus pour déployer des services de surveillance pour un cluster Milvus sur Kubernetes.

Surveiller les métriques avec Prometheus

Les métriques sont des indicateurs qui fournissent des informations sur l'état de fonctionnement de votre système. Par exemple, avec les métriques, vous pouvez comprendre combien de ressources mémoire ou CPU sont consommées par un nœud de données dans Milvus. Le fait de connaître les performances et l'état des composants de votre cluster Milvus vous permet d'être bien informé et donc de prendre de meilleures décisions et d'ajuster l'allocation des ressources de manière plus opportune.

En général, les mesures sont stockées dans une base de données de séries temporelles (TSDB), comme Prometheus, et les mesures sont enregistrées avec un horodatage. Dans le cas de la surveillance des services Milvus, vous pouvez utiliser Prometheus pour extraire des données des points d'extrémité définis par les exportateurs. Prometheus exporte ensuite les métriques de chaque composant Milvus à l'adresse http://<component-host>:9091/metrics.

Cependant, vous pouvez avoir plusieurs répliques pour un composant, ce qui rend la configuration manuelle de Prometheus trop compliquée. Vous pouvez donc utiliser Prometheus Operator, une extension de Kubernetes, pour une gestion automatisée et efficace des instances de surveillance Prometheus. L'utilisation de Prometheus Operator vous évite d'ajouter manuellement des cibles métriques et des fournisseurs de services.

La définition de ressource personnalisée (CRD) ServiceMonitor vous permet de définir de manière déclarative la manière dont un ensemble dynamique de services est surveillé. Il permet également de sélectionner les services à surveiller avec la configuration souhaitée à l'aide de sélections d'étiquettes. Avec Prometheus Operator, vous pouvez introduire des conventions spécifiant comment les métriques sont exposées. Les nouveaux services peuvent être automatiquement découverts en suivant la convention que vous avez définie, sans qu'il soit nécessaire de procéder à une reconfiguration manuelle.

L'image suivante illustre le flux de travail de Prometheus.

Prometheus_architecture Architecture de Prometheus

Conditions préalables

Ce tutoriel utilise kube-prometheus pour vous éviter d'installer et de configurer manuellement chaque composant de surveillance et d'alerte.

Kube-prometheus rassemble les manifestes Kubernetes, les tableaux de bord Grafana et les règles Prometheus combinés à la documentation et aux scripts.

Avant de déployer des services de surveillance, vous devez créer une pile de surveillance en utilisant la configuration dans le répertoire kube-prometheus manifests.

$ git clone https://github.com/prometheus-operator/kube-prometheus.git
$ cd kube-prometheus
$ kubectl apply --server-side -f manifests/setup
$ kubectl wait \
        --for condition=Established \
        --all CustomResourceDefinition \
        --namespace=monitoring
$ kubectl apply -f manifests/
Le rôle de cluster prometheus-k8s par défaut ne peut pas capturer les métriques de milvus, il est nécessaire de le corriger :
kubectl patch clusterrole prometheus-k8s --type=json -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": [""], "resources": ["pods", "services", "endpoints"], "verbs": ["get", "watch", "list"]}}]'

Pour supprimer une pile, exécutez kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup.

Déployer des services de surveillance sur Kubernetes

1. Accéder aux tableaux de bord

Transférer le service Prometheus vers le port 9090, et le service Grafana vers le port 3000.

$ kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/prometheus-k8s 9090
$ kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/grafana 3000

2. Activer ServiceMonitor

Le ServiceMonitor n'est pas activé par défaut pour Milvus Helm. Après avoir installé l'opérateur Prometheus dans le cluster Kubernetes, vous pouvez l'activer en ajoutant le paramètre metrics.serviceMonitor.enabled=true.

Avec Helm

Vous pouvez activer le ServiceMonitor en définissant le paramètre metrics.serviceMonitor.enabled=true comme suit si vous avez installé la carte Milvus Helm.

```
$ helm upgrade my-release milvus/milvus --set metrics.serviceMonitor.enabled=true --reuse-values
```

Une fois l'installation terminée, utilisez kubectl pour vérifier la ressource ServiceMonitor.

Avec Milvus Operator

Vous pouvez activer le ServiceMonitor comme suit si vous avez installé Milvus à l'aide de Milvus Operator.

  1. Exécutez la commande suivante pour modifier la ressource personnalisée Milvus. La commande suivante suppose que la ressource personnalisée est nommée my-release.

    $ kubectl edit milvus my-release
    
  2. Modifier le champ spec.components.disableMetric en false.

    ...
    spec:
      components:
        disableMetric: false # set to true to disable metrics
    ...
    
  3. Enregistrez et quittez l'éditeur.

  4. Attendez que l'opérateur rapproche les modifications. Vous pouvez vérifier l'état de la ressource personnalisée Milvus en exécutant la commande suivante.

    $ kubectl get milvus my-release -o yaml
    

Le champ status.components.metrics.serviceMonitor.enabled doit être true.

3. Vérifier les métriques

Après avoir activé le ServiceMonitor, vous pouvez accéder au tableau de bord Prometheus à l'adresse http://localhost:9090/.

Cliquez sur l'onglet Status puis sur Targets. Vous devriez voir les cibles des composants Milvus.

Prometheus_targets Prometheus_targets

Cliquez sur l'onglet Graph et entrez l'expression up{job="default/my-release"} dans la boîte de saisie de l'expression. Les métriques des composants Milvus doivent s'afficher.

Prometheus_graph Prometheus_graph

4. Vérifier le ServiceMonitor

$ kubectl get servicemonitor
NAME                           AGE
my-release-milvus              54s

Prochaine étape