Aller au contenu principal

Netdata sur GKE Autopilot

Netdata sur GKE Autopilot

Netdata est un agent open source de supervision en temps réel des performances et de la santé, qui collecte des milliers de métriques à la seconde (CPU, mémoire, disque, réseau, conteneurs, services) sans aucune configuration et les visualise sur un tableau de bord web interactif intégré. Il est écrit en C pour une surcharge minimale et expose une API REST permettant d'interroger les données collectées. Ce module déploie Netdata sur GKE Autopilot au-dessus du socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.

Ce guide se concentre sur les services cloud qu'utilise Netdata et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toute application GKE — Workload Identity, entrée, autoscaling, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — reportez-vous au guide du socle App_GKE plutôt que de les répéter ici.


1. Vue d'ensemble​

Netdata s'exécute en tant que charge de travail Kubernetes unique. Le déploiement assemble un ensemble ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculGKE AutopilotUn seul pod Netdata sur le port 19999, 1 vCPU / 1 GiB par défaut
Base de donnéesAucunedatabase_type = "NONE" — Netdata conserve sa propre base de métriques interne (dbengine) sur disque ; aucune instance Cloud SQL n'est créée
Persistance des fichiersPVC en mode bloc par pod (par défaut)stateful_pvc_enabled = true provisionne un PVC standard-rwo (SSD) de 20Gi sur /var/lib/netdata ; Cloud Filestore (NFS) est disponible mais désactivé par défaut
Stockage d'objetsCloud StorageUn bucket storage est toujours provisionné, mais n'est monté sur /var/lib/netdata via GCS FUSE que lorsque le PVC en mode bloc est désactivé
SecretsSecret ManagerNETDATA_ADMIN_PASSWORD facultatif (désactivé par défaut) — le tableau de bord local de Netdata n'a pas de connexion intégrée
EntréeService Kubernetes (LoadBalancer par défaut)Domaine personnalisé facultatif via Kubernetes Gateway ; ClusterIP/NodePort disponibles

Valeurs par défaut judicieuses à connaître d'emblée :

  • Aucune base de données. Netdata ne s'appuie pas sur Cloud SQL — tout l'état (le stockage de métriques dbengine, le journal d'alarmes/de santé et la configuration) réside sur le volume persistant monté. La variante GKE transmet en dur enable_cloudsql_volume = false et il n'y a pas de job db-init.
  • Le PVC de stockage en mode bloc est le mécanisme de persistance par défaut. stateful_pvc_enabled = true (et, comme aucun workload_type n'est défini, la charge de travail est automatiquement résolue en StatefulSet — voir « StatefulSet auto-select » dans les conventions du dépôt). Le PVC utilise par défaut la StorageClass standard-rwo (adossée à des SSD), d'une taille de 20Gi, montée sur /var/lib/netdata. Une véritable sémantique de périphérique en mode bloc est requise, car GCS FUSE corrompt les fichiers dbengine de Netdata.
  • Le bucket GCS storage est créé dans tous les cas, mais n'est monté qu'en solution de repli. Le main.tf de Netdata_GKE définit enable_gcs_storage_volume = !stateful_pvc_enabled ; avec la valeur par défaut du PVC (true), le montage GCS FUSE est donc ignoré pour éviter un double montage sur le même chemin. Désactivez stateful_pvc_enabled pour revenir au bucket GCS au lieu d'un PVC en mode bloc.
  • Redis est désactivé de force. Le main.tf de Netdata_GKE code en dur enable_redis = false dans l'appel à App_GKE, ce qui remplace la valeur par défaut true de la variable elle-même — Netdata n'utilise pas Redis.
  • Un seul réplica par défaut. min_instance_count = 1, max_instance_count = 1. Netdata écrit sa base de métriques sur un seul PVC ; exécuter plusieurs réplicas sur le même volume n'est pas pris en charge.
  • Pas d'authentification intégrée. Le tableau de bord local de Netdata n'est pas authentifié par défaut — quiconque peut atteindre le Service peut consulter toutes les métriques collectées. Le secret facultatif enable_admin_password ne configure pas la connexion propre à Netdata ; il génère un identifiant stable pour un reverse proxy géré par l'opérateur ou pour un flux de rattachement à Netdata Cloud placé en amont.
  • service_type vaut LoadBalancer par défaut (accès externe) : le tableau de bord est donc accessible depuis l'extérieur du cluster via une IP externe dès que le Service est provisionné — aucune connexion intégrée ne le protège (voir la remarque sur l'authentification ci-dessus). Définissez service_type = ClusterIP pour le garder uniquement interne, ou configurez un domaine personnalisé via enable_custom_domain (qui vaut lui-même true par défaut mais n'a aucun effet tant que application_domains n'est pas renseigné).
  • L'image est un build personnalisé minimal. Netdata_Common fournit un Dockerfile minimal (FROM netdata/netdata:${NETDATA_VERSION}) uniquement pour que le socle puisse mettre en miroir l'image amont dans Artifact Registry ; application_version = "latest" épingle le build sur un tag éprouvé (v2.2.6) via l'ARG de build propre à l'application NETDATA_VERSION.

2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que vous avez exécuté gcloud container clusters get-credentials <cluster> --region <region> --project <project> et que PROJECT, REGION et NAMESPACE sont définis. L'espace de noms et les autres identifiants figurent dans les sorties du déploiement.

A. GKE Autopilot — la charge de travail Netdata​

Netdata s'exécute dans un seul pod planifié sur Autopilot, qui facture le CPU et la mémoire que le pod demande réellement. Avec la valeur par défaut stateful_pvc_enabled = true, la charge de travail est un StatefulSet doté d'une identité de pod stable et d'un PVC dédié par pod.

  • Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail Netdata pour voir les pods, les révisions et les événements. Kubernetes Engine → Services & Ingress affiche la ClusterIP ou l'IP externe.
  • CLI :
    kubectl get pods,svc -n "$NAMESPACE"
    kubectl logs -n "$NAMESPACE" statefulset/<service-name> --tail=100
    kubectl describe pod -n "$NAMESPACE" -l app=<service-name>

Consultez App_GKE pour la manière dont Autopilot, la mise à l'échelle et le type de charge de travail (Deployment ou StatefulSet) sont gérés.

B. Stockage persistant — PVC en mode bloc (par défaut) ou NFS​

Le stockage de métriques dbengine, le journal d'alarmes/de santé et la configuration de Netdata résident sous /var/lib/netdata. Par défaut, il s'agit d'un PVC de stockage en mode bloc par pod (stateful_pvc_enabled = true, StorageClass standard-rwo, 20Gi) — requis parce que le format de fichier du dbengine exige une véritable sémantique de périphérique en mode bloc (GCS FUSE le corrompt). Cloud Filestore (NFS) est disponible comme montage partagé alternatif (enable_nfs, par défaut false), mais ce n'est pas la voie recommandée pour les fichiers de données propres à Netdata.

  • Console : Kubernetes Engine → Storage → Persistent Volume Claims ; Filestore → Instances (uniquement si NFS est activé).
  • CLI :
    kubectl get pvc -n "$NAMESPACE"
    gcloud filestore instances list --project "$PROJECT"

Consultez App_GKE pour le provisionnement des PVC des StatefulSets, le compromis HDD/SSD de stateful_pvc_storage_class et la découverte NFS.

C. Cloud Storage (solution de repli)​

Un bucket Cloud Storage (suffixe storage) est provisionné automatiquement quel que soit le paramètre du PVC, et le compte de service de la charge de travail reçoit l'accès à ce bucket. Il n'est monté dans le pod (via GCS FUSE) que lorsque stateful_pvc_enabled = false, comme mécanisme de persistance de repli pour /var/lib/netdata.

  • Console : Cloud Storage → Buckets.
  • CLI :
    gcloud storage buckets list --project "$PROJECT" --filter="name~netdata"

Consultez App_GKE pour les options CMEK et les montages GCS Fuse.

D. Secret Manager​

Netdata n'a aucun secret généré obligatoire. Le seul secret facultatif est NETDATA_ADMIN_PASSWORD (conditionné par enable_admin_password, par défaut false) — une valeur aléatoire de 32 caractères stockée dans Secret Manager et injectée sous forme de Secret Kubernetes natif (via explicit_secret_values, et non via le chemin Secret Store CSI/SecretSync). Il ne configure pas l'authentification propre à Netdata ; il existe en tant qu'identifiant stable pour un reverse proxy côté opérateur ou pour une étape de rattachement à Netdata Cloud.

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT" --filter="name~netdata-admin-password"
    gcloud secrets versions access latest --secret=<admin-password-secret-name> --project "$PROJECT"

Consultez App_GKE pour l'intégration Secret Store CSI et la rotation.

E. Réseau et entrée​

Par défaut, la charge de travail est exposée à l'extérieur via une IP éphémère ou réservée (service_type = LoadBalancer, reserve_static_ip = true). Définissez service_type = ClusterIP pour la garder uniquement interne, ou configurez application_domains (avec enable_custom_domain, par défaut true) pour un accès acheminé par Gateway avec un certificat géré.

  • Console : Network services → Load balancing ; VPC network → IP addresses.
  • CLI :
    kubectl get svc,ingress -n "$NAMESPACE"
    gcloud compute addresses list --project "$PROJECT"

Consultez App_GKE pour les domaines personnalisés, Cloud CDN et les détails des IP statiques.

F. Cloud Logging et Monitoring​

Les flux stdout/stderr des pods sont envoyés à Cloud Logging ; les métriques GKE sont envoyées à Cloud Monitoring. Des tests de disponibilité et des règles d'alerte facultatifs sont disponibles (uptime_check_config, désactivé par défaut ; alert_policies).

  • Console : Logging → Logs Explorer ; Monitoring → Dashboards / Alerting.
  • CLI :
    gcloud logging read 'resource.type="k8s_container" AND resource.labels.namespace_name="'"$NAMESPACE"'"' \
    --project "$PROJECT" --limit 50

3. Comportement de l'application Netdata​

  • Aucun job d'initialisation par défaut. initialization_jobs vaut par défaut [] — Netdata initialise lui-même sa base de métriques sur disque au premier démarrage ; il n'y a aucun job db-init ou de migration à attendre. Des jobs personnalisés peuvent être fournis pour des tâches de chargement/migration de données si nécessaire.
  • Pas d'assistant de premier lancement ni de connexion obligatoire. Le tableau de bord est accessible et pleinement fonctionnel (sous réserve de service_type/l'entrée) dès que le pod est Ready — Netdata n'exige pas la création d'un compte administrateur avant utilisation.
  • Les sondes de santé ciblent /api/v1/info. La sonde de démarrage (startup_probe : initial_delay=15s, timeout=5s, period=10s, failure_threshold=10) et la sonde de vivacité (liveness_probe : initial_delay=30s, timeout=5s, period=30s, failure_threshold=3) effectuent toutes deux un HTTP GET /api/v1/info, sans authentification. Le même chemin est la valeur par défaut des variables de niveau du socle health_check_config, startup_probe_config et uptime_check_config.
  • Mise à l'échelle sur une seule instance. min_instance_count = 1 / max_instance_count = 1 par défaut — la base de métriques sur le PVC est écrite par un seul processus ; ne dépassez pas 1 sans avoir vérifié la configuration distribuée/de streaming de Netdata.
  • Épinglage de la version de l'image. application_version = "latest" est résolu au moment du build en la valeur par défaut épinglée du Dockerfile, v2.2.6 (l'ARG de build propre à l'application NETDATA_VERSION, et non le APP_VERSION générique que le socle injecte) — définissez une version explicite pour suivre une autre version.
  • Vérifiez la charge de travail en cours d'exécution :
    kubectl get pods,pvc -n "$NAMESPACE"
    kubectl exec -n "$NAMESPACE" <pod-name> -- wget -qO- http://127.0.0.1:19999/api/v1/info
    kubectl port-forward -n "$NAMESPACE" svc/<service-name> 19999:19999
    # then browse http://127.0.0.1:19999

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Netdata ou notables pour lui sont listés ; toutes les autres entrées sont héritées d'App_GKE avec leur comportement et leurs valeurs par défaut standard.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_namenetdataNom de base des ressources. Ne le modifiez pas après le premier déploiement.
application_versionlatestTag de l'image netdata/netdata utilisé comme base du build personnalisé ; latest est épinglé sur un tag éprouvé (v2.2.6) au moment du build.
enable_admin_passwordfalseGénère un identifiant Secret Manager pour une couche d'authentification côté opérateur. Le tableau de bord propre à Netdata reste non authentifié, quel que soit ce paramètre.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
cpu_limit1000m1 vCPU.
memory_limit1GiÀ augmenter pour un nombre de collections plus élevé / une rétention plus longue.
min_instance_count1Conservez 1 pour éviter les démarrages à froid.
max_instance_count1Conservez 1 — un PVC, un rédacteur.
container_port19999Fixé par Netdata_Common ; cette variable est purement informative et n'est pas transmise à App_GKE.
enable_cloudsql_volumefalseNetdata n'a pas de base de données Cloud SQL — conservez false.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
service_typeLoadBalancerIP publique par défaut ; définissez ClusterIP pour le garder uniquement interne.
workload_typenull → StatefulSetRésolu automatiquement en StatefulSet parce que stateful_pvc_enabled = true.
session_affinityNoneAucun routage persistant n'est nécessaire avec un seul réplica.

Groupe 7 — Configuration du StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enabledtrueProvisionne un PVC en mode bloc par pod — requis pour que les fichiers dbengine de Netdata bénéficient d'une véritable sémantique de périphérique en mode bloc (GCS FUSE les corrompt).
stateful_pvc_size20GiTaille permettant de contenir votre fenêtre de rétention des collections, plus une marge.
stateful_pvc_mount_path/var/lib/netdataEmplacement où Netdata fait persister sa base de métriques, son journal d'alarmes et sa configuration.
stateful_pvc_storage_classstandard-rwo (SSD)Balanced-PD, adossé à des SSD. Consomme le quota SSD_TOTAL_GB — remplacez-le par standard (HDD) si le quota est limité ; le profil d'écriture de Netdata n'exige pas les IOPS d'un SSD.
stateful_fs_group3000Rend le PVC accessible en écriture au groupe ; Netdata s'exécute avec l'UID 1000 / le GID 2000.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probe / liveness_probeHTTP GET /api/v1/infoSondes au niveau du conteneur, câblées via Netdata_Common.
health_check_config / startup_probe_configHTTP GET /api/v1/infoConfiguration des sondes au niveau du socle (même point de terminaison).
uptime_check_configdésactivé, chemin /api/v1/infoÀ activer pour un google_monitoring_uptime_check_config externe, utile uniquement une fois le Service accessible publiquement.

Groupe 13 — Système de fichiers (NFS)​

VariableValeur par défautDescription
enable_nfsfalseDésactivé par défaut — la persistance est assurée par le PVC en mode bloc du StatefulSet. Activez-le uniquement si vous avez besoin d'un montage NFS partagé pour un autre usage que les données dbengine propres à Netdata.
nfs_mount_path/mnt/nfsPas le même chemin que le montage du PVC (/var/lib/netdata) — évitez de pointer NFS vers le chemin du PVC.

Groupe 15 — Redis (non utilisé)​

Netdata n'utilise pas Redis. enable_redis vaut true par défaut au niveau de la variable, mais le main.tf de Netdata_GKE transmet inconditionnellement enable_redis = false à App_GKE ; la valeur par défaut de la variable est donc sans effet pour ce module — aucune connexion Redis n'est jamais injectée.

Groupe 16 — Base de données (non utilisée)​

database_type est fixé à NONE par Netdata_Common ; aucune instance Cloud SQL, base de données ni utilisateur n'est créé. Les variables application_database_name (netdatadb) / application_database_user (netdatauser) et les variables db_* associées ne sont déclarées que pour la compatibilité avec la reproduction des variables du socle et n'ont aucun effet.

Groupe 19 — Domaine personnalisé, IP statique et réseau​

VariableValeur par défautDescription
enable_custom_domaintrueActive le routage basé sur Gateway, mais n'a aucun effet tant que application_domains n'est pas renseigné.
application_domains[]Noms d'hôte personnalisés + certificat géré.
reserve_static_iptrueIP externe stable d'un redéploiement à l'autre, dès que service_type = LoadBalancer ou qu'une Gateway est utilisée.

Toutes les autres entrées suivent le comportement standard d'App_GKE.


5. Sorties​

Ces valeurs sont renvoyées lors d'un déploiement réussi et constituent le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.

SortieDescription
service_nameNom du Service Kubernetes.
namespaceEspace de noms dans lequel s'exécute la charge de travail.
service_cluster_ipClusterIP interne au cluster.
stage_service_cluster_ipsMap des ClusterIP des services propres à chaque étape.
service_external_ipIP externe du LoadBalancer (lorsque service_type = LoadBalancer et qu'une IP statique est réservée).
service_urlURL permettant d'atteindre Netdata.
netdata_admin_password_secret_idID du secret Secret Manager de l'identifiant de mot de passe administrateur ; vide lorsque enable_admin_password = false.
storage_bucketsBuckets Cloud Storage créés.
network_name / network_exists / regionsRéseau VPC, présence, régions disponibles.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channelsÉtat de la surveillance et canaux.
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
initialization_jobsNoms des éventuels jobs d'initialisation fournis par l'utilisateur (aucun par défaut).
statefulset_nameNom du StatefulSet (lorsque stateful_pvc_enabled = true).
cicd_enabled / cicd_configurationÉtat et détails du CI/CD (dépôt, déclencheur, registre).
github_repository_url / github_repository_owner / github_repository_nameDétails GitHub du CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
kubernetes_readyIndique si le cluster/la charge de travail est prêt.
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat de VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat de la journalisation d'audit et de CMEK.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

Validation héritée au moment du plan. Ce module fait passer sa configuration par le moteur du socle App_GKE, qui valide les valeurs et leurs combinaisons au moment du plan — un StatefulSet imposé en même temps qu'un paramètre sans état, IAP sans identités autorisées, des quota_memory_* exprimés en entiers bruts, un container_port/ backup_retention_days hors plage. Netdata_GKE contrôle en outre, au moment du plan, min_instance_count <= max_instance_count et l'activation d'IAP sans identifiants OAuth (voir validation.tf). Une configuration invalide fait échouer le plan avec une erreur claire et nommée avant la création de toute ressource ; la plupart des erreurs ci-dessous sont donc détectées en amont plutôt qu'à l'application ou à l'exécution.

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
service_type (par défaut LoadBalancer) + enable_admin_passwordDéfinissez service_type = ClusterIP pour rester uniquement interne, ou ajoutez une couche reverse proxy/authentification avant toute exposition externeCritiqueLe tableau de bord de Netdata n'a pas de connexion intégrée ; le Service LoadBalancer par défaut (ou un domaine personnalisé configuré) expose à l'extérieur toutes les métriques collectées des hôtes et des conteneurs, sans couche d'authentification ajoutée par l'opérateur.
stateful_pvc_enabledtrueCritiqueLe désactiver fait revenir à GCS FUSE, qui corrompt les fichiers de métriques dbengine de Netdata — perte de données / redémarrages en boucle.
max_instance_count1ÉlevéLe dbengine de Netdata est écrit par un seul processus sur un PVC ; dépasser 1 expose à une corruption des fichiers / une contention sur les verrous.
stateful_pvc_storage_classstandard-rwo (SSD)MoyenConsomme le quota régional SSD_TOTAL_GB, très limité ; passez à standard (HDD) sur les projets dont le quota est contraint — le profil d'écriture de Netdata n'a pas besoin des IOPS d'un SSD.
enable_nfsfalse (à laisser désactivé)MoyenNFS n'est pas la voie prise en charge pour les fichiers de données propres à Netdata (/var/lib/netdata) ; activez-le uniquement pour un montage partagé sans rapport, sur un autre chemin.
application_versionlatest (→ v2.2.6 épinglé)MoyenÉpingler un tag arbitraire qui n'existe pas en amont fait échouer l'étape de mise en miroir/de build de l'image Cloud Build.
memory_limit1Gi (à augmenter pour un grand nombre de collections)MoyenNetdata conserve les métriques récentes en mémoire ; un sous-dimensionnement provoque des redémarrages pour OOM sous une forte charge de collecte.
quota_memory_requests / _limitsunités binaires (4Gi, 8192Mi)CritiqueLes entiers bruts sont interprétés comme des octets et bloquent toute planification de pods dans l'espace de noms.
enable_custom_domain (par défaut true) avec application_domains videRenseignez application_domains ou ne modifiez ni l'un ni l'autreFaibleenable_custom_domain=true seul n'a aucun effet tant qu'aucun domaine n'est listé — ce n'est pas un risque fonctionnel, mais cela peut prêter à confusion lors d'un audit de l'exposition.
backup_retention_days7 (à augmenter en production)MoyenTrop court pour une rétention réglementaire.

Pour le comportement du socle évoqué tout au long de ce guide — IAM et Workload Identity, autoscaling, entrée et certificats, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — consultez App_GKE. La configuration applicative propre à Netdata, partagée avec la variante Cloud Run, est décrite dans Netdata_Common.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.