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 :

  1. Statique.

    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.

  2. Découverte DNS.

    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 de new à 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

Igor Nikiforov

À propos du projet

Install and configures etcd key-value store

Installer
ansible-galaxy install igor_nikiforov.etcd
Licence
mit
Téléchargements
1.7M
Propriétaire