igor_nikiforov.etcd
Ansible Rolle: etcd
Diese Rolle konfiguriert etcd und etcdctl auf deinem Zielhost. Sie unterstützt alle etcd-Konfigurationsoptionen und ist so flexibel wie möglich.
Anforderungen
Diese Rolle wurde mit den folgenden Ansible-Versionen entwickelt und getestet:
Name | Version |
---|---|
ansible | >= 2.9.13 |
ansible-base | >= 2.10.1 |
Andere Ansible-Versionen wurden nicht getestet, sollten aber vermutlich funktionieren.
Installation
Verwende ansible-galaxy install igor_nikiforov.etcd
, um die neueste stabile Version der Rolle zu installieren.
Du kannst sie auch aus den Anforderungen installieren: ansible-galaxy install -r requirements.yml
:
# requirements.yml
---
roles:
- name: igor_nikiforov.etcd
version: v1.0.0
Plattformen
Name | Version |
---|---|
Debian | buster, bullseye |
Ubuntu | focal, jammy |
CentOS | 7.4+, stream8 |
RedHat | 7.4+, 8 |
Andere Betriebssysteme wurden nicht getestet, sollten aber vermutlich funktionieren. Wenn nicht, bitte eine PR erstellen!
Variablen
Name | Beschreibung | Standard |
---|---|---|
etcd_version | Version von etcd, die installiert werden soll | 3.4.13 |
etcd_user | etcd Benutzer | etcd |
etcd_group | etcd Gruppe | etcd |
etcd_config | Liste der Schlüssel-Werte für Konfigurationsparameter. | {} |
etcd_service_enabled | Ob der Dienst beim Booten gestartet werden soll. | True |
etcd_service_state | Dienststatus für etcd. | started |
etcdctl_output_format | Ausgabeformat für etcdctl. | table |
Verwendung
Die Rolle unterstützt alle Konfigurationsparameter von etcd, die über die Variable etcd_config
übergeben werden können. Ein Beispiel für das YAML-Konfigurationsformat findest du im offiziellen Repository von etcd und alle verfügbaren Flags mit Beschreibungen in der offiziellen Dokumentation von etcd.
etcd unterstützt zwei Hauptmethoden zur Bildung eines Clusters:
-
Nach der Ausführung des Playbooks solltest du manuell jedes Mitglied von einem der Hosts mit dem Befehl
etcdctl member add
hinzufügen. Es wird angenommen, dass du dies manuell machst oder in einer separaten Ansible-Aufgabe automatisierst. -
Die Hauptvoraussetzung ist hier, dass die SRV- und A-Records in deiner lokalen DNS-Zone vorhanden sind. Bitte überprüfe sorgfältig die Anforderungen für DNS-Records, die im Voraus erstellt werden müssen. Wenn alles richtig erstellt wurde, müssen die folgenden DNS-Entdeckungs-Eigenschaften zu
etcd_config
hinzugefügt werden:etcd_config: discovery-srv: "company.local" discovery-srv-name: "dev" # optional
Nach der Ausführung des Playbooks wird das etcd-Cluster automatisch erstellt. Es wird dringend empfohlen, diese Methode in der Produktion zu verwenden.
Wichtig:
- Vergiss nicht,
etcd_config.initial-cluster-state
nach der ersten Ausführung im Playbook vonnew
aufexisting
zu ändern. - Verwende
serial: 1
in deinem Playbook, nachdem du ein Cluster aufgebaut hast, um es sicher bei einer Konfigurationsänderung zu aktualisieren. Mehr Informationen hier.
Beispiele
Statisch
# playbook.yml
---
- hosts: all
become: True
gather_facts: False
pre_tasks:
- wait_for_connection: {timeout: 300}
- setup:
tasks:
- name: Installiere 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-Entdeckung
# playbook.yml
---
- hosts: all
become: True
gather_facts: False
pre_tasks:
- wait_for_connection: {timeout: 300}
- setup:
tasks:
- name: Installiere 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"
Lizenz
MIT
Autoreninformation
ansible-galaxy install igor_nikiforov.etcd