etcd

Ansible роль: etcd

Эта роль настраивает etcd и etcdctl на вашем целевом хосте. Она поддерживает все параметры конфигурации etcd и старается быть максимально гибкой.

Требования

Эта роль разработана и протестирована с следующими версиями Ansible:

Название Версия
ansible >= 2.9.13
ansible-base >= 2.10.1

Другие версии Ansible не тестировались, но, вероятно, будут работать.

Установка

Используйте ansible-galaxy install igor_nikiforov.etcd, чтобы установить последнюю стабильную версию роли.

Вы также можете установить ее из файла требований с помощью ansible-galaxy install -r requirements.yml:

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

Платформы

Название Версия
Debian buster, bullseye
Ubuntu focal, jammy
CentOS 7.4+, stream8
RedHat 7.4+, 8

Другие дистрибутивы ОС не тестировались, но, вероятно, будут работать. Если нет, пожалуйста, создайте PR!

Переменные

Название Описание Значение по умолчанию
etcd_version Версия etcd для установки 3.4.13
etcd_user Пользователь etcd etcd
etcd_group Группа etcd etcd
etcd_config Список параметров конфигурации etcd. {}
etcd_service_enabled Должен ли сервис запускаться при загрузке. True
etcd_service_state Состояние сервиса для etcd. started
etcdctl_output_format Формат вывода, используемый в etcdctl. table

Использование

Роль поддерживает все параметры конфигурации etcd, которые можно передать через переменную etcd_config. Вы можете найти пример формата конфигурации YAML в официальном репозитории etcd и все доступные флаги с описанием в официальной документации etcd.

etcd поддерживает два основных метода для построения кластера:

  1. Статический.

    После выполнения плейбука вы должны вручную добавить каждого участника из одного из хостов, используя команду etcdctl member add. Предполагается, что вы будете делать это вручную или автоматизировать в отдельной задаче Ansible.

  2. Обнаружение DNS.

    Основное требование здесь — наличие готовых записей SRV и A в вашей локальной зоне DNS. Пожалуйста, внимательно проверьте требования к DNS записям, которые должны быть созданы заранее. Если все создано правильно, следующие свойства, связанные с обнаружением DNS, необходимо добавить в etcd_config:

    etcd_config:
      discovery-srv: "company.local"
      discovery-srv-name: "dev" # опционально
    

    После выполнения плейбука кластер etcd будет создан автоматически. Настоятельно рекомендуется использовать этот метод в производственной среде.

Важно:

  • Не забудьте изменить etcd_config.initial-cluster-state с new на existing в плейбуке после первого выполнения.
  • Используйте serial: 1 в своем плейбуке после сборки кластера, чтобы безопасно обновлять его в случае изменения конфигурации. Более подробная информация здесь.

Примеры

Статический

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

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

  tasks:
    - name: Установить 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"

Обнаружение DNS

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

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

  tasks:
    - name: Установить 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"

Лицензия

MIT

Информация об авторе

Игорь Никифоров

О проекте

Install and configures etcd key-value store

Установить
ansible-galaxy install igor-nikiforov/ansible-role-etcd
Лицензия
mit
Загрузки
1748925
Владелец