igor_nikiforov.etcd

Rol de Ansible: etcd

Este rol configura etcd y etcdctl en tu host de destino. Soporta todas las opciones de configuración de etcd y busca ser lo más flexible posible.

Requisitos

Este rol se desarrolló y probó con las siguientes versiones de Ansible:

Nombre Versión
ansible >= 2.9.13
ansible-base >= 2.10.1

Otras versiones de Ansible no se han probado, pero probablemente funcionen.

Instalación

Usa ansible-galaxy install igor_nikiforov.etcd para instalar la última versión estable del rol.

También puedes instalarlo desde los requisitos usando ansible-galaxy install -r requirements.yml:

# requirements.yml
---
roles:
  - name: igor_nikiforov.etcd
    version: v1.0.0

Plataformas

Nombre Versión
Debian buster, bullseye
Ubuntu focal, jammy
CentOS 7.4+, stream8
RedHat 7.4+, 8

Otras distribuciones de SO no se han probado, pero probablemente funcionen. Si no, por favor, ¡abre un PR!

Variables

Nombre Descripción Predeterminado
etcd_version Versión de etcd a instalar 3.4.13
etcd_user Usuario de etcd etcd
etcd_group Grupo de etcd etcd
etcd_config Lista de parámetros de configuración de etcd. {}
etcd_service_enabled Si el servicio debe iniciarse al arrancar. True
etcd_service_state Estado del servicio para etcd. started
etcdctl_output_format Formato de salida a utilizar en etcdctl. table

Uso

El rol soporta todos los parámetros de configuración de etcd que pueden ser pasados mediante la variable etcd_config. Puedes encontrar un ejemplo del formato de configuración YAML en el repositorio oficial de etcd y todos los flags disponibles con su descripción en la documentación oficial de etcd.

etcd soporta dos métodos principales para construir un clúster:

  1. Estático.

    Después de ejecutar el playbook, deberás añadir manualmente cada miembro desde uno de los hosts utilizando el comando etcdctl member add. Se supone que harás esto manualmente o automatizarás en una tarea de Ansible separada.

  2. Descubrimiento DNS.

    El requisito principal aquí es tener registros SRV y A listos en tu zona DNS local. Por favor, verifica cuidadosamente los requisitos para los registros DNS que deben ser creados con antelación. Si todo está creado correctamente, las propiedades relacionadas con el descubrimiento DNS deben ser añadidas a etcd_config:

    etcd_config:
      discovery-srv: "company.local"
      discovery-srv-name: "dev" # opcional
    

    Después de ejecutar el playbook, el clúster etcd se creará automáticamente. Se recomienda encarecidamente utilizar este método en producción.

Importante:

  • No olvides cambiar etcd_config.initial-cluster-state de new a existing en el playbook después de la primera ejecución.
  • Usa serial: 1 en tu playbook después de construir un clúster para actualizarlo de manera segura en caso de cambios de configuración. Más información aquí.

Ejemplos

Estático

# playbook.yml
---
- hosts: all
  become: True
  gather_facts: False

  pre_tasks:
    - wait_for_connection: {timeout: 300}
    - setup:

  tasks:
    - name: Instalar 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"

Descubrimiento DNS

# playbook.yml
---
- hosts: all
  become: True
  gather_facts: False

  pre_tasks:
    - wait_for_connection: {timeout: 300}
    - setup:

  tasks:
    - name: Instalar 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"

Licencia

MIT

Información del autor

Igor Nikiforov

Acerca del proyecto

Install and configures etcd key-value store

Instalar
ansible-galaxy install igor_nikiforov.etcd
Licencia
mit
Descargas
1.7M
Propietario