igor_nikiforov.etcd
Rôle Ansible : etcd
Ce rôle configure etcd et etcdctl sur votre hôte cible. Il prend en charge toutes les options de configuration d'etcd et vise à être aussi flexible que possible.
Exigences
Ce rôle a été développé et testé avec les versions d'Ansible suivantes :
Nom | Version |
---|---|
ansible | >= 2.9.13 |
ansible-base | >= 2.10.1 |
D'autres versions d'Ansible n'ont pas été testées mais fonctionneront probablement.
Installation
Utilisez ansible-galaxy install igor_nikiforov.etcd
pour installer la dernière version stable du rôle.
Vous pouvez également l'installer à partir du fichier des exigences avec ansible-galaxy install -r requirements.yml
:
# requirements.yml
---
roles:
- name: igor_nikiforov.etcd
version: v1.0.0
Plates-formes
Nom | Version |
---|---|
Debian | buster, bullseye |
Ubuntu | focal, jammy |
CentOS | 7.4+, stream8 |
RedHat | 7.4+, 8 |
D'autres distributions de systèmes d'exploitation n'ont pas été testées mais fonctionneront probablement. Si ce n'est pas le cas, merci de soumettre une PR !
Variables
Nom | Description | Par défaut |
---|---|---|
etcd_version | Version d'etcd à installer | 3.4.13 |
etcd_user | Utilisateur etcd | etcd |
etcd_group | Groupe etcd | etcd |
etcd_config | Liste des paramètres de configuration d'etcd. | {} |
etcd_service_enabled | Si le service doit démarrer au démarrage. | True |
etcd_service_state | État du service pour etcd. | started |
etcdctl_output_format | Format de sortie à utiliser dans etcdctl. | table |
Utilisation
Le rôle prend en charge tous les paramètres de configuration d'etcd qui peuvent être passés via la variable etcd_config
. Vous pouvez trouver un exemple de format de configuration YAML dans le dépôt officiel d'etcd et tous les indicateurs disponibles avec leur description dans la documentation officielle d'etcd.
etcd prend en charge deux méthodes principales pour construire un cluster :
-
Après l'exécution du playbook, vous devez ajouter manuellement chaque membre depuis l'un des hôtes en utilisant la commande
etcdctl member add
. Cela suppose que vous le ferez manuellement ou que vous l'automatiserez dans une tâche Ansible distincte. -
La condition principale ici est d'avoir des enregistrements SRV et A prêts dans votre zone DNS locale. Veuillez vérifier attentivement les exigences pour les enregistrements DNS qui doivent être créés à l'avance. Si tout est correctement créé, les propriétés liées à la découverte DNS suivantes doivent être ajoutées à
etcd_config
:etcd_config: discovery-srv: "company.local" discovery-srv-name: "dev" # optionnel
Après l'exécution du playbook, le cluster etcd sera automatiquement créé. Il est fortement recommandé d'utiliser cette méthode en production.
Important :
- N'oubliez pas de changer
etcd_config.initial-cluster-state
denew
àexisting
dans le playbook après la première exécution. - Utilisez
serial: 1
dans votre playbook après avoir construit un cluster pour le mettre à jour en toute sécurité en cas de changement de configuration. Plus d'infos ici.
Exemples
Statique
# playbook.yml
---
- hosts: all
become: True
gather_facts: False
pre_tasks:
- wait_for_connection: {timeout: 300}
- setup:
tasks:
- name: Installer etcd
import_role:
name: etcd
vars:
etcd_version: "3.4.13"
etcd_config:
name: "{{ ansible_facts.hostname }}"
data-dir: "/var/lib/etcd/data"
wal-dir: "/var/lib/etcd/wal"
initial-advertise-peer-urls: "https://{{ ansible_facts.fqdn }}:2380"
initial-cluster-token: "token"
initial-cluster-state: "new"
advertise-client-urls: "https://{{ ansible_facts.fqdn }}:2379"
listen-client-urls: "https://{{ ansible_default_ipv4.address }}:2379,https://127.0.0.1:2379"
listen-peer-urls: "https://{{ ansible_default_ipv4.address }}:2380"
client-transport-security:
trusted-ca-file: "{{ etcd_conf_dir }}/certs/ca.crt"
cert-file: "{{ etcd_conf_dir }}/certs/server.crt"
key-file: "{{ etcd_conf_dir }}/certs/server.key"
peer-transport-security:
trusted-ca-file: "{{ etcd_conf_dir }}/certs/ca.crt"
cert-file: "{{ etcd_conf_dir }}/certs/server.crt"
key-file: "{{ etcd_conf_dir }}/certs/server.key"
log-level: "debug"
logger: "zap"
Découverte DNS
# playbook.yml
---
- hosts: all
become: True
gather_facts: False
pre_tasks:
- wait_for_connection: {timeout: 300}
- setup:
tasks:
- name: Installer etcd
import_role:
name: etcd
vars:
etcd_version: "3.4.13"
etcd_config:
name: "{{ ansible_facts.hostname }}"
data-dir: "/var/lib/etcd/data"
wal-dir: "/var/lib/etcd/wal"
discovery-srv: "company.local"
initial-advertise-peer-urls: "https://{{ ansible_facts.fqdn }}:2380"
initial-cluster-token: "token"
initial-cluster-state: "new"
advertise-client-urls: "https://{{ ansible_facts.fqdn }}:2379"
listen-client-urls: "https://{{ ansible_default_ipv4.address }}:2379,https://127.0.0.1:2379"
listen-peer-urls: "https://{{ ansible_default_ipv4.address }}:2380"
client-transport-security:
trusted-ca-file: "{{ etcd_conf_dir }}/certs/ca.crt"
cert-file: "{{ etcd_conf_dir }}/certs/server.crt"
key-file: "{{ etcd_conf_dir }}/certs/server.key"
peer-transport-security:
trusted-ca-file: "{{ etcd_conf_dir }}/certs/ca.crt"
cert-file: "{{ etcd_conf_dir }}/certs/server.crt"
key-file: "{{ etcd_conf_dir }}/certs/server.key"
log-level: "debug"
logger: "zap"
Licence
MIT
Informations sur l'auteur
ansible-galaxy install igor_nikiforov.etcd