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 поддерживает два основных метода для построения кластера:
-
После выполнения плейбука вы должны вручную добавить каждого участника из одного из хостов, используя команду
etcdctl member add
. Предполагается, что вы будете делать это вручную или автоматизировать в отдельной задаче Ansible. -
Основное требование здесь — наличие готовых записей 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
Информация об авторе
ansible-galaxy install igor-nikiforov/ansible-role-etcd