Gestion de la configuration des agents à l'aide d' Git
Vous pouvez gérer les configurations des agents via Git.
Les fonctions de gestion des configurations basées sur Gitsont facultatives. Si vous disposez déjà d'autres moyens de fournir des configurations sous forme de fichiers pour l'agent hôte, tels qu' Ansible, Terraform, Chef ou Puppet, vous n'avez probablement pas besoin de la gestion de configuration basée sur l' Git.
Remarques :
- Les fonctions de gestion des configurations basées sur Gitsont disponibles à partir de la version d'amorçage de l'agent hôte
1.2.11. - La version d'amorçage de l'agent hôte
1.2.12ajoute la prise en charge de l'authentification de baseHTTP/HTTPS.
L'agent hôte peut extraire ses configurations d'un référentiel Git distant. Toutes les configurations décrites dans la documentation relative à la configuration de l'agent hôte peuvent être gérées via Git. Certaines configurations d'agent hôte nécessitent le redémarrage de l'agent hôte avant de prendre effet (la documentation clarifie cette exigence dans la section correspondante).
Quand utiliser la gestion des configurations reposant sur Git ?
L'agent hôte d' Instana est fourni avec des configurations par défaut, et il n'est généralement pas nécessaire de les modifier dans la plupart des scénarios de production.
Cependant, des fonctionnalités telles que le verrouillage dynamique des versions, les configurations du backend de l'agent hôte (en particulier lorsque vous utilisez plusieurs backends ), les secrets et les balises d'hôte tirent grandement profit d'un système de contrôle de version centralisé qui vous permet de définir une configuration une seule fois, puis de la déployer sur tous les agents hôtes présents dans l'ensemble du parc ou de l'environnement.
L'agent hôte d' Instana intègre un client Git capable de récupérer des configurations à partir d'un référentiel distant que vous gérez. Lorsque l'agent hôte détecte un référentiel local Git dans son *instanaAgentDir*/etc/ répertoire, il active automatiquement ses fonctionnalités de gestion de configuration basées sur Git et recherche un élément distant Git dans le référentiel local nommé configuration. Au démarrage, l'agent hôte met à jour son référentiel local en fonction de ce qui est disponible dans le référentiel distant. Pour plus d'informations sur le processus de mise à jour de la configuration, voir la section Mises à jour de la configuration .
Les exigences de votre configuration de référentiel Git sont décrites dans la section Prérequis .
Prérequis
La gestion des configurations reposant sur Git ne prend pas en charge les clients Git locaux ou d'autres outils. L'agent hôte doit avoir accès au référentiel Git distant configuré. Cet accès inclut la connexion réseau et l'authentification Git :
Le système qui héberge le référentiel Git distant doit être accessible à l'aide d'une connexion réseau à partir de l'agent hôte. Le système doit fournir un accès basé sur le protocole de transportGit. Actuellement, l'agent hôte prend en charge les protocoles de transport HTTP et HTTPS. En outre, les ports appropriés doivent être ouverts.
A partir de l'amorçage de l'agent au-dessus de la version
1.2.12, l'authentificationHTTP/HTTPSde base est prise en charge. Les variables d'environnementINSTANA_GIT_REMOTE_USERNAMEetINSTANA_GIT_REMOTE_PASSWORDpeuvent être utilisées pour définir les données d'identification d'accès.
Configuration
certificats autosignés
Si vous hébergez le référentiel Git vous-même, vous pouvez utiliser un certificat autosigné. Pour que l'agent puisse se connecter en toute sécurité à un référentiel Git, vous devez importer le certificat auto-signé dans le magasin de certificats Java. Pour plus d'informations, consultez la section « Certificats auto-signés ».
Authentification à l'aide du fichier.netrc
L'accès à un référentiel Git peut être autorisé à l'aide d'un fichier .netrc pour fournir le mot de passe ou le jeton d'accès. .netrc est largement utilisé et des détails le concernant sont disponibles sur la page d'aide de .netrc.
Vous pouvez configurer le .netrc fichier situé dans le répertoire personnel de l'utilisateur (par exemple, root) sur lequel l'agent hôte de Instana est en cours d'exécution. Consultez l'exemple de fichier .netrc suivant pour le référentiel github.com :
machine github.com
login oauth2
password <access_token>
Git structure du référentiel
Dans le référentiel Git , vous devez disposer de la même structure de répertoires que dans *instanaAgentDir*/etc. Par exemple, si vous souhaitez obtenir des données du fichier Git nommé configuration-mysql.yaml, ce fichier doit être placé dans le répertoire Git nommé instana (c'est-à-dire le fichier instana/configuration-mysql.yaml). Sinon, lorsque le fichier est récupéré depuis le référentiel Git, il est placé au mauvais emplacement sur le serveur et n'est pas utilisé par l'agent hôte Instana.
La figure suivante illustre l'exemple de structure d'un référentiel Git :
repository-root/
├── instana/
│ ├── configuration-mysql.yaml
│ └── com.instana.agent.main.config.UpdateManager.cfg
└── org.ops4j.pax.url.mvn.cfg
Avec systemd
A l'aide de systemd, la méthode la plus simple pour spécifier les paramètres supplémentaires consiste à utiliser un fichier de dépôt. Pour afficher le chemin d'accès au répertoire de dépôt, exécutez la commande suivante:
systemctl status instana-agent
Les fichiers de ce répertoire doivent avoir l'extension de fichier .conf, sinon les fichiers sont ignorés.
- Créez un nouveau fichier dans le répertoire
/etc/systemd/system/instana-agent.service.d/avec l'extension.conf, par exemplegit-configuration-environments.conf. - Ajoutez le contenu suivant au fichier :
[Service] Environment=INSTANA_GIT_REMOTE_BRANCH=<branch> Environment=INSTANA_GIT_REMOTE_REPOSITORY=<repository_url> Environment=INSTANA_GIT_REMOTE_USERNAME=<username> Environment=INSTANA_GIT_REMOTE_PASSWORD=<access_token> ``` **Notes:** - Replace *<branch>* with the name of the remote branch that the Instana host agent connects to. - Replace *<repository_url>* with the URL of the remote Git repository; for example, `https://github.com/<your_account>/<your_repo>.git`. - Replace *<username>* with a username or access token (for basic authentication). If you are using a `.netrc` file or a public repository, you can remove the whole line `Environment=INSTANA_GIT_REMOTE_USERNAME=<username>`. - Replace *<access_token>* with an access token. If you are using an access token as username (basic authentication), a `.netrc` file, or a public repository, you can remove the whole line `Environment=INSTANA_GIT_REMOTE_PASSWORD=<access_token>`.
Après avoir ajouté ou modifié un fichier de dépôt, procédez comme suit:
- Rechargez les fichiers de dépôt en exécutant la commande systemctl daemon-reload .
- Redémarrez l'agent hôte d' Instana, en exécutant la commande systemctl restart instana-agent.
.git dossier situé dans *instanaAgentDir*/etc/ et redémarrer l'agent pour que les modifications prennent effet.À l'aide des variables d'environnement
Si vous avez défini les variables d'environnement suivantes, lorsqu'un agent hôte est démarré, il vérifie la présence du référentiel Git local dans le dossier *instanaAgentDir*/etc/ . Si le référentiel Git local n'est pas présent, l'agent hôte crée un référentiel local qui est connecté au référentiel distant.
Si l'agent « Instana » s'exécute directement sur un hôte, les variables d'environnement suivantes doivent être définies sur cet hôte. Si l'agent hôte s'exécute dans un environnement conteneurisé, définissez les variables au niveau du conteneur.
| Variable d"environnement | Description |
|---|---|
INSTANA_GIT_REMOTE_REPOSITORY |
L' URL e du référentiel distant Git; par exemple, https://github.com/<your_account>/<your_repo>.git. |
INSTANA_GIT_REMOTE_BRANCH |
Le nom de la branche distante que l'agent hôte d' Instana ation doit suivre; par exemple, main |
INSTANA_GIT_REMOTE_USERNAME |
Facultatif: nom d'utilisateur ou jeton d'accès à utiliser dans l'authentification de base (voir la remarque après ce tableau). |
INSTANA_GIT_REMOTE_PASSWORD |
Facultatif: mot de passe à utiliser dans l'authentification de base (voir la remarque après ce tableau). |
INSTANA_GIT_REMOTE_USERNAME. Cela garantit que l'authentification de base est correctement configurée sans nom d'utilisateur..git dossier situé dans *instanaAgentDir*/etc/ et redémarrer l'agent pour que les modifications prennent effet.À l'aide de la commande en une seule ligne
Reportez-vous à la section -g, -b, -u et -p options de la OneLiner documentation, qui correspond aux variables d'environnement INSTANA_GIT_REMOTE_REPOSITORYINSTANA_GIT_REMOTE_PASSWORD , INSTANA_GIT_REMOTE_BRANCH, INSTANA_GIT_REMOTE_USERNAME et pour le méthode environnementale.
Le tableau suivant présente le mappage entre les variables d'environnement et les paramètres de la commande à ligne unique:
| Variable d"environnement | Paramètre de la commande à ligne unique |
|---|---|
INSTANA_GIT_REMOTE_REPOSITORY |
-g = (facultatif, requis si -b est défini) |
INSTANA_GIT_REMOTE_BRANCH |
-b = (facultatif, requis si -g est défini) |
INSTANA_GIT_REMOTE_USERNAME |
-u = (facultatif, requis si -p est défini) |
INSTANA_GIT_REMOTE_PASSWORD |
-p = (facultatif) |
.git dossier situé dans *instanaAgentDir*/etc/ et redémarrer l'agent pour que les modifications prennent effet.Avec des images Docker
Les étapes sont fondamentalement les mêmes que la méthode d'environnement, en ajoutant les variables d'environnement INSTANA_GIT_REMOTE_REPOSITORY, INSTANA_GIT_REMOTE_BRANCH, INSTANA_GIT_REMOTE_USERNAME et INSTANA_GIT_REMOTE_PASSWORD au conteneur Docker .
Par exemple, l'extrait de code suivant indique les paramètres nécessaires au démarrage de l'agent hôte dans un conteneur, ainsi que les paramètres requis pour Git afin d'activer la gestion de la configuration via Git :
# Please enter proper values for all --env arguments.
docker run \
--detach \
--name instana-agent \
--volume /var/run:/var/run \
--volume /run:/run \
--volume /dev:/dev:ro \
--volume /sys:/sys:ro \
--volume /var/log:/var/log:ro \
--privileged \
--net=host \
--pid=host \
--env="INSTANA_AGENT_ENDPOINT=" \
--env="INSTANA_AGENT_ENDPOINT_PORT=" \
--env="INSTANA_AGENT_KEY=" \
--env="INSTANA_DOWNLOAD_KEY=" \
--env="INSTANA_AGENT_ZONE=" \
--env="INSTANA_GIT_REMOTE_BRANCH=" \
--env="INSTANA_GIT_REMOTE_PASSWORD=" \
--env="INSTANA_GIT_REMOTE_REPOSITORY=" \
--env="INSTANA_GIT_REMOTE_USERNAME=" \
icr.io/instana/agent
Avec le tableau de bord de gestion de l'agent
La gestion de configuration basée sur l' Git peut être configurée dans la section « Gestion de configuration » du tableau de bord de gestion des agents.
.git suffixe à la fin de l'adresse INSTANA_GIT_REMOTE_REPOSITORY, par exemple https://github.com/<your_account>/<your_repo>.git. De plus, pour configurer l'authentification de base afin d'accéder au référentiel Git, vous pouvez utiliser un .netrc fichier. Pour plus d'informations, consultez la section « Authentification à l'aide d'un fichier.netrc ».Avec l'API
La gestion de la configuration basée sur l' Git peut être initialisée et configurée à l'aide de l' API, comme décrit dans la Host Agent section de la documentation de l' Web REST API.
Configuration manuelle
Une configuration manuelle consiste à initialiser un référentiel Git dans le dossier *instanaAgentDir*/etc/ et à ajouter un remote nommé configuration.
L'agent hôte extrait la branche main locale à l'aide de la branche de suivi configurée à partir de la branche distante configuration . Il existe plusieurs façons de configurer le référentiel Git et vous pouvez choisir librement celle qui correspond le mieux à votre configuration.
Par exemple, la configuration suivante vous permet de disposer des configurations d'extraction d'agent hôte à partir de la branche main de la configuration distante:
etc> git init
etc> git remote add -m main -t main configuration <git-repository-url>
etc> git fetch configuration
etc> git checkout -f -b main --track configuration/main
L'exemple suivant vous permet d'extraire les configurations de la branche my-configurations dans le système distant configuration :
etc> git init
etc> git remote add -m main -t my-configurations configuration <git-repository-url>
etc> git fetch configuration
etc> git checkout -f -b main --track configuration/my-configurations
Les formats <git-repository-url> possibles sont décrits dans la documentation officielle sur URL Git.
Mises à jour des configurations
L'agent hôte extrait les mises à jour de configuration du référentiel distant:
- Au démarrage ou au redémarrage.
- Via une opération
rebootlancée depuis le tableau de bord de gestion des agents. - En modifiant la configuration via le tableau de bord de gestion des agents.
- Via l' API Web, comme décrit dans la
Host Agentsection, et les intégrations qui s'appuient sur celle-ci, telles que l 'action « GitHub Update Agent ».
La gestion des configurations basée sur Gitfonctionne sur la branche main locale et la met à jour avec la version de la branche de suivi à distance configurée. Si aucune branche de suivi n'est configurée, un message d'erreur est ajouté au fichier journal de l'agent hôte. Alors qu'aucune mise à jour de la configuration n'est exécutée, l'agent reprend sa surveillance à l'aide des configurations en cours.
Les modifications locales ne sont pas attendues et sont supprimées lors des mises à jour. Les fichiers non suivis sont affectés par la gestion des configurations basée sur Gitde sorte qu'au départ, tous les fichiers n'ont pas besoin d'être ajoutés au référentiel.
Déclencher des mises à jour à l'aide des hooks d' Git
Les points d'ancrage Git sont des programmes que vous pouvez placer dans le répertoire .git/hooks du référentiel et qui se déclenchent à des moments différents du cycle de vie de votre référentiel Git . Git offre de nombreux points d'ancrage différentset le point d'ancrage post-update est le mieux adapté à l'intégration à la gestion de la configuration Gitdes agents hôte.
Le dépôt « GitOps-Demo » fournit un exemple de hook post-update « Git » qui déclenche la mise à jour des agents hôtes chaque fois qu'une branche du dépôt est mise à jour.
Vous voyez que la sortie attendue du script est renvoyée à votre client Git après le déclenchement d'une commande push:
$ gitops-test# git push origin HEAD:main
[detached HEAD 9632c09] origin
1 file changed, 1 insertion(+), 1 deletion(-)
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 376 bytes | 376.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: GitOps update: Triggering the configuration update of agents matching the following query: 'entity.zone:"test"' ... OK
699ada9..9632c09 HEAD -> main
Déclencher des mises à jour à l'aide de l'action de mise à jour « GitHub »
L 'action « Instana » ( GitHub ) de « GitOps » vous permet de déclencher facilement les agents distants via l'interface Web de « Instana » ( API ).
Le référentiel « GitOps-Demo » explique comment configurer un référentiel sur GitHub pour gérer les configurations de vos agents hôtes, et comment déclencher automatiquement les mises à jour à l'aide de l'action « Instana » de GitHub pour GitOps.
Exemple
Référentiel GitHub privé
GitHub prend en charge l'authentification par jetons ( HTTPS ), et cette fonctionnalité peut être utilisée par l'agent hôte comme décrit dans cette section.
Pour utiliser un référentiel GitHub , vous devez d'abord créer un jeton d'accès personnel. Vous trouverez des informations détaillées à ce sujet sur la page de documentation « Créer un jeton d'accès personnel » de l' GitHub. Le jeton n'a besoin que de droits d'accès en lecture pour accéder au référentiel.
GitHub attend que le jeton soit fourni sous la forme d 'un nom d'utilisateur d'authentification de base HTTPS avec un mot de passe vide. Par conséquent, l'agent hôte peut être configuré pour utiliser l'authentification de base HTTPS pour les référentiels GitHub en définissant les variables d'environnement suivantes :
INSTANA_GIT_REMOTE_REPOSITORY='https://github.com/<user/organization>/<repository>.git
INSTANA_GIT_REMOTE_BRANCH='<branch>'
INSTANA_GIT_REMOTE_USERNAME='<token>'
INSTANA_GIT_REMOTE_PASSWORD=''
Notez que le même principe de mot de passe vide et de jeton personnel que le nom d'utilisateur fonctionne également avec les autres moyens de configuration de l'agent hôte pour la gestion de la configuration basée sur Git. Pour une présentation des approches de configuration possibles, reportez-vous à la section Configuration .
Gestion des mises à jour des agents avec Git
Vous pouvez utiliser plusieurs méthodes pour contrôler les mises à jour de la version de l'agent hôte qui est déployé dans vos environnements de production. Si vous utilisez des agents statiques, vous devez mettre à jour l'agent hôte manuellement selon vos besoins. Si vous utilisez des agents dynamiques, vous pouvez configurer les mises à jour pour définir les intervalles de mise à jour, les versions épinglées, etc. Pour plus d'informations, consultez la section « Configuration des mises à jour des agents hôtes dynamiques ». Si aucune configuration n'est spécifiée, les mises à jour sont automatiquement appliquées à l'agent dynamique tous les jours. En outre, si vous avez besoin d'un contrôle plus strict sur les mises à jour de la version de l'agent hôte, vous pouvez utiliser une combinaison de l'épinglage dynamique de la version de l'agent avec une gestion de la configuration basée sur Git. Si vous disposez d'un environnement de test, vous pouvez tester les déploiements d'agents par rapport à un scénario de type production avant d'appliquer la mise à jour à la production.
Gestion des mises à jour de l'agent d' Kubernetes
Vous pouvez utiliser Argo CD pour contrôler et gérer les mises à jour des agents dynamiques d' Kubernetes. En utilisant cette méthode, vous pouvez spécifier la version de l'agent en définissant une variable d'environnement.
Vous pouvez définir la variable d'environnement en utilisant une ressource personnalisée pour les installations via l'opérateur et le values.yaml fichier pour les installations via le tableau de bord d' Helm.
Argo CD surveille les branches désignées du référentiel et applique automatiquement toute nouvelle modification au cluster. En utilisant cette méthode pour configurer les mises à jour, vous pouvez contrôler avec précision le moment où celles-ci sont appliquées. Vous pouvez programmer l'installation des mises à jour pendant les heures creuses au lieu de les lancer automatiquement. De plus, cette configuration vous offre la possibilité de préciser la version exacte de l'agent utilisée.
Pour un exemple et des instructions sur la mise en œuvre du workflow combinant le verrouillage de version des agents et l'intégration d'Argo CD, consultez le référentiel instana/argocd-demo.
Dans cet exemple, le référentiel contient la main branche destinée au verrouillage de la version dans les clusters de production et la test branche destinée au verrouillage de la version dans les environnements de test. Par conséquent, test la branche utilise une version plus récente de l'agent. Cette configuration a pour but de tester toute nouvelle version dans les clusters de test avant de déployer la version de l'agent dans les clusters de production. Pour savoir comment utiliser Mend Renovate afin d'automatiser la création de nouvelles demandes de modification sur les branches testmain et lorsqu'une nouvelle version est disponible, consultez la section suivante.
Gestion des mises à jour de l'agent hôte
Pour un exemple de mise en œuvre du flux de travail dans lequel l'épinglage de la version de l'agent est combiné avec la gestion de la configuration basée sur Git, voir le référentiel instana/gitops-demo.
Ce dépôt d'exemple utilise GitHub comme service d'hébergement de dépôts, Mend Renovate pour l'automatisation de la mise à jour des dépendances, et les actions GitHub pour envoyer des requêtes au backend Instana. Vous pouvez remplacer tous ces services par les services de votre choix. Assurez-vous de remplir les conditions suivantes pour mettre en œuvre un flux de mise à jour basé sur l' Git :
Git comme format de dépôt de code source
automatisation permettant d'envoyer une requête d' HTTP ation au serveur Instana en cas de modification de la configuration
Vous pouvez utiliser l'automatisation de votre choix. Cependant, assurez-vous que la version dans
instana/com.instana.agent.bootstrap.AgentBootstrap.cfgest mise à jour et que vous utilisez des branches différentes pour des environnements différents.
Le référentiel contient la branche main qui suit l'état actuel des déploiements de production de l'agent et la branche test qui représente l'environnement de test de l'agent.
Mend Renovate est configuré pour surveiller le dépôt instana/agent-updates pour les nouvelles balises et comparer les balises avec la version dans le fichier de configuration instana/com.instana.agent.bootstrap.AgentBootstrap.cfg. Lorsqu'une nouvelle balise est détectée dans le dépôt instana/agent-updates, Mend Renovate crée une branche basée sur la branche test et lance une GitHub pull request pour ajouter les changements au fichier de configuration sur la branche test. Vous pouvez utiliser une variété d'options fournies par Renovate, par exemple, pour planifier les mises à jour seulement une fois par semaine, ou pour assigner certains GitHub handles aux pull requests pour une approbation manuelle. Lorsqu'une pull request est fusionnée dans la test branche « GitHub », Actions exécute un workflow afin d'envoyer une notification au backend Instana configuré. Le serveur central d' Instana s envoie ensuite une commande de redémarrage à tous les agents qui répondent aux critères de zone et de balise définis pour l'environnement de test.
En outre, un deuxième flux de travail copie le fichier instana/com.instana.agent.bootstrap.AgentBootstrap.cfg actuel de la branche test vers une nouvelle branche de fonctionnalités et ouvre une demande d'extraction contre la branche main, ce qui garantit la promotion de la version de l'agent de l'environnement de test à la production.
Une fois les modifications validées dans un environnement de production, vous pouvez les fusionner avec la branche main. Lorsque vous effectuez une fusion, GitHub Actions exécute un workflow afin d'envoyer une demande de mise à jour au backend Instana pour tous les agents connectés à l'environnement de production.
Voir l'exemple de configuration suivant :
# This field specifies which version set of components should be used by the agent;
# its value must be a valid tag from https://github.com/instana/agent-updates/tags
# version = <tag>
# renovate: datasource=github-tags depName=instana/agent-updates versioning=loose
version = 2024.09.02.0634
# This field controls which set of components is used by the agent at runtime.
productName = ${env:INSTANA_PRODUCT_NAME}
origin = package dynamic