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:
-
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. -
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
denew
aexisting
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
ansible-galaxy install igor_nikiforov.etcd