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:

  1. Statisch.

    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.

  2. DNS-Entdeckung.

    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 von new auf existing 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

Igor Nikiforov

Über das Projekt

Install and configures etcd key-value store

Installieren
ansible-galaxy install igor_nikiforov.etcd
GitHub Repository
Lizenz
mit
Downloads
1.7M
Besitzer