Vous n’avez pas pu assister au Mobitalks Infra #1 ? Pas de panique ! Voici un récap’ de la présentation faite par Xavier Pestel, DevOps chez Oscaro.com & Youtubeur xavki : docker, ansible, kubernetes, haproxy...
1- Qu’est-ce que Consul ?
Notion de service
○ émergé avec les microservices (découpage d’applications monolithes)
○ un service dispose de plusieurs instances
○ twelve factors
○ principe :
- découpage par brique métier
- petites équipes de développement
- évolutions/itérations plus faciles (CI/CD…)
- isolation et résilience
- scalabilité
Consul (Hashicorp)
○ registry de services
○ découverte de services/instances
○ interrogeable par API : facilite la mise à jour de configurations et permet :
- enregistrements port/ip des instances
- entrées/sorties de pool (rolling update)
- healthcheck des instances
- mise à jour dynamique des configurations
- stockage clefs/valeurs
- interface graphique
- Policies/ACL : droits d’accès par token (lecture, écriture…)
- Intentions : quels services accèdent auxquels ?
2- Installation
Architecture
Processus simple et classique
- Download du binaire
- Positionnement dans le PATH
- Création d’un user et répertoires (datas et configuration)
- Fichiers de configurations (conf + ACL + UI)
- Création d’un service systemd
- Activation et Démarrage
Rq : ajout d’ACL (production) avec gestion de rôles et token
Répertoire et user :
Master Fichier de configuration : json
- advertise : connue des autres machines
- client_addr : adresse d’écoute
- datacenter : groupe
- data_dir
- domain : dns srv
- encrypt : clef
- x_join : master
- ui : activation de la GUI
Agent Fichier de configuration : json
Services Fichier de configuration : json
- nom de service
- tags : plus utiles qu’on le pense
- timeout
- interval
- check :
- args : custom
- script
- http
- tls
- grpc
SystemD
- nom de service
- tags : plus utiles qu’on le pense
- timeout
- interval
- check :
- args : custom
- script
- http
- tls
- grpc
3- Interactions, API, module ansible
CLI
○ consul members
○ consul catalog nodes
○ consul catalog services
○ consul maint -enable
○ consul catalog -disable
○ consul catalog reload
○ consul kv put monrep/monfichier.conf @monfichier.txt
○ consul get monrep/monfichier.conf
API
○ curl https://192.168.57.10:8500/v1/catalog/services | jq
○ curl https://192.168.57.10:8500/v1/catalog/service/myapp | jq
○ curl https://192.168.57.10:8500/v1/agent/members | jq
○ curl https://192.168.57.10:8500/v1/catalog/node/<id_node> | jq
○ curl https://192.168.57.10:8500/v1/catalog/node/<id_node> | jq
○ clefs / valeurs
○ entrée d’instances
○ entrée de services
○ maintenance
4- DNS SRV
- url service
- instances
- priorité : instance de sauvegarde
- poids : si même priorité pondération
dnsmasq
5- Mesh — ex : Linkerd
Linkerd
- LoadBalancer (retryable notamment)
- ReverseProxy
- Bonne prise en compte de consul
- Controler Ingress (k8s)
Deux méthodes
- host (header)
- route (/nom_service/)
Méthode
- Host (header)
curl -H ‘Host:myapp’ https://127.0.0.1:4040
Méthode
- Route
https://127.0.0.1:4141/myapp
6- LB — ex : HAProxy
HAProxy
- loadbalancer reconnu
- reverse proxy
- controller ingress (k8s)
Consul Template
- lecture des données de consul
- édition dynamique de fichier
- lancement d’une commande
- aussi bien service que key/value
Template
- GO template (~ Jinja)
7- Prometheus
● Autodiscovery : consul fourni les targets
● Route prometheus : métriques de consul
● Consul exporter : état des services etc
Autodiscovery
- Métriques des instances applicatives
- Entrées et sorties des noeuds
- Exploitations possibles :
- tags
- ports
- hostname
- service
Ex :
- remplacement du port métriques
- renseignement de labels
- filtre sur tags
https://192.168.57.15:9090/graph
Route consul
- Métriques de consul
- Etat des services
- Etat des instances
- Temps de réponse de consul
- etc
Consul exporter
- ajout d’une route prometheus
- spécifique services (état…)
- docker ou classique
8- Ansible
Inventory dynamique
- utilisation de la base consul
- filtre : noms de services
- filtre : tags
https://github.com/ansible/ansible/blob/devel/ contrib/inventory/consul_io.py
9- Conf : key/value
Et bien plus …
- création de GUI à la volée :
- portail de swaggers
- alerting : consul-alerts
- mattermost
- webhook
- https://github.com/AcalephStorage/consul -alerts
- … la limite de l’imagination
https://www.slideshare.net/PierreSouchay/2019-0528-sre-consul-criteo-meetup
À bientôt pour un prochain meetup !
- La Team Mobiskill