githubixx.etcd

ansible-role-etcd

Diese Ansible-Rolle wird in Kubernetes the not so hard way with Ansible - etcd cluster verwendet. Sie kann jedoch auch ohne ein Kubernetes-Cluster verwendet werden.

Sie installiert ein etcd-Cluster. HINWEIS: Dieses Playbook lädt die etcd-Cluster-Prozesse nicht neu oder startet sie nicht, nachdem die systemd-Dienstdatei geändert wurde! Das ist absichtlich so! Es wäre eine sehr schlechte Idee, alle etcd-Prozesse gleichzeitig neu zu starten. Wenn die Datei etcd.service geändert wurde, starten Sie etcd manuell, einen Knoten nach dem anderen, und überprüfen Sie die Protokollausgaben, ob der Knoten danach wieder dem Cluster beigetreten ist! Dieser Prozess kann natürlich auch automatisiert werden, ist aber derzeit nicht Teil dieser Rolle. Als zusätzlicher Hinweis: Das Skript führt ein systemctl daemon-reload aus, nachdem die Dienstdatei von etcd geändert wurde, sodass systemd zumindest über die geänderte Datei informiert ist und Sie sich darum nicht kümmern müssen. Ein Neustart eines etcd-Knotens würde auch die neue Konfiguration aktivieren.

Ein Upgrade eines etcd-Clusters, das mit dieser Rolle installiert wurde, ist hier beschrieben.

Versions

Ich tagge jede Veröffentlichung und versuche, mit Semantic Versioning zu arbeiten. Wenn Sie die Rolle verwenden möchten, empfehle ich, den neuesten Tag abzurufen. Der Master-Branch ist prinzipiell für die Entwicklung gedacht, während die Tags stabile Versionen markieren. Ein Tag 13.1.1+3.5.13 bedeutet, dass dies die Version 13.1.1 dieser Rolle ist und sie für die Verwendung mit etcd-Version 3.5.13 gedacht ist (sollte aber auch mit neueren Versionen funktionieren). Wenn sich die Rolle selbst ändert, wird X.Y.Z vor dem + erhöht. Wenn sich die etcd-Version ändert, wird X.Y.Z nach dem + erhöht. Dadurch kann ich Bugfixes und neue Hauptversionen der Rolle kennzeichnen, während sie weiterhin für eine bestimmte etcd-Version entwickelt wird.

Changelog

siehe CHANGELOG.md

Anforderungen

Diese Rolle erfordert, dass Sie bereits einige Zertifikate für etcd erstellt haben (siehe Kubernetes the not so hard way with Ansible - Zertifizierungsstelle (CA) und die Ansible-Rolle kubernetes_ca). Das Playbook sucht die Zertifikate im etcd_ca_conf_directory auf dem Host, auf dem dieses Playbook ausgeführt wird. Natürlich können Sie die Zertifikate auch selbst erstellen (siehe Selbstsignierte Zertifikate generieren - Das Git-Repository ist zwar archiviert, aber die Informationen sind nach wie vor gültig).

Rollenvariablen

# Das Verzeichnis, von dem aus die etcd-Zertifikate kopiert werden. Dies
# wird standardmäßig auf das lokale $HOME des Benutzers erweitert (der Benutzer, der "ansible-playbook ..."
# ausführt) plus "/etcd-certificates". Das bedeutet, wenn das $HOME-Verzeichnis des Benutzers z.B.
# "/home/da_user" ist, dann hat "etcd_ca_conf_directory" den Wert
# "/home/da_user/etcd-certificates".
etcd_ca_conf_directory: "{{ '~/etcd-certificates' | expanduser }}"

# etcd Ansible-Gruppe
etcd_ansible_group: "k8s_etcd"

# etcd-Version
etcd_version: "3.5.13"

# Port, an dem etcd auf Clients hört
etcd_client_port: "2379"

# Port, an dem etcd auf seine Peers hört
etcd_peer_port: "2380"

# Schnittstelle, an die etcd-Ports gebunden werden
etcd_interface: "tap0"

# Führen Sie den etcd-Daemon als diesen Benutzer aus.
#
# Hinweis 1: Wenn Sie einen "etcd_peer_port" < 1024 verwenden möchten, müssen Sie "etcd"
# wahrscheinlich als Benutzer "root" ausführen.
# Hinweis 2: Wenn der in "etcd_user" angegebene Benutzer nicht existiert, wird die Rolle
# ihn erstellen. Nur wenn der Benutzer bereits existiert, wird die Rolle ihn nicht erstellen,
# sondern sie wird seine UID/GID und die Shell anpassen, sofern angegeben (siehe 
# die Einstellungen unten). Zusätzlich, wenn "etcd_user" "root" ist, wird diese Rolle 
# den Benutzer überhaupt nicht verändern.
etcd_user: "etcd"

# UID des in "etcd_user" angegebenen Benutzers. Wenn nicht angegeben, wird die nächste verfügbare
# UID aus "/etc/login.defs" verwendet (siehe Einstellung "SYS_UID_MAX").
# etcd_user_uid: "999"

# Shell für den in "etcd_user" angegebenen Benutzer. Zum erhöhten Schutz die 
# Standardeinstellung beibehalten.
etcd_user_shell: "/bin/false"

# Gibt an, ob der in "etcd_user" angegebene Benutzer ein Systembenutzer (Standard)
# sein wird oder nicht. Wenn "true" wird die Einstellung "etcd_user_home" ignoriert. Im Allgemeinen
# macht es Sinn, die Standardeinstellung zu belassen, da es normalerweise keinen Grund gibt, sich 
# als der Benutzer, der "etcd" ausführt, anzumelden.
etcd_user_system: true

# Heimatverzeichnis des in "etcd_user" angegebenen Benutzers. Wird ignoriert, wenn
# "etcd_user_system" auf "true" gesetzt ist. In diesem Fall wird kein Heimatverzeichnis erstellt. Normalerweise nicht nötig.
# etcd_user_home: "/home/etcd"

# Führen Sie den etcd-Daemon als diese Gruppe aus.
#
# Hinweis: Wenn die in "etcd_group" angegebene Gruppe nicht existiert, wird die Rolle
# sie erstellen. Nur wenn die Gruppe bereits existiert, wird die Rolle sie nicht erstellen,
# sondern sie wird die GID anpassen, wenn sie in "etcd_group_gid" angegeben ist (siehe untenstehende Einstellung).
etcd_group: "etcd"

# GID der in "etcd_group" angegebenen Gruppe. Wenn nicht angegeben, wird die nächste verfügbare
# GID aus "/etc/login.defs" verwendet (siehe Einstellung "SYS_GID_MAX").
# etcd_group_gid: "999"

# Gibt an, ob die in "etcd_group" angegebene Gruppe eine Systemgruppe (Standard)
# sein wird oder nicht.
etcd_group_system: true

# Verzeichnis für die etcd-Konfiguration
etcd_conf_dir: "/etc/etcd"

# Berechtigungen für das Verzeichnis für die etcd-Konfiguration
etcd_conf_dir_mode: "0750"

# Besitzer des in "etcd_conf_dir" angegebenen Verzeichnisses
etcd_conf_dir_user: "root"

# Gruppenbesitzer des in "etcd_conf_dir" angegebenen Verzeichnisses
etcd_conf_dir_group: "{{ etcd_group }}"

# Verzeichnis zum Speichern des heruntergeladenen etcd-Archivs
# Sollte nicht gelöscht werden, um wiederholtes Herunterladen zu vermeiden
etcd_download_dir: "/opt/etcd"

# Berechtigungen für das Verzeichnis zum Speichern des heruntergeladenen etcd-Archivs
etcd_download_dir_mode: "0755"

# Besitzer des in "etcd_download_dir" angegebenen Verzeichnisses
etcd_download_dir_user: "{{ etcd_user }}"

# Gruppenbesitzer des in "etcd_download_dir" angegebenen Verzeichnisses
etcd_download_dir_group: "{{ etcd_group }}"

# Verzeichnis zum Speichern der etcd-Binärdateien
#
# WICHTIG: Wenn Sie den Standardwert für "etcd_bin_dir", der
# "/usr/local/bin" ist, verwenden, werden die in "etcd_bin_dir_mode",
# "etcd_bin_dir_user" und "etcd_bin_dir_group" festgelegten Einstellungen ignoriert. Dies
# geschieht, um zu verhindern, dass die Berechtigungen von "/usr/local/bin" geändert werden.
# Dieses Verzeichnis existiert normalerweise bereits auf jeder Linux-Installation
# und sollte nicht geändert werden.
# Seien Sie also vorsichtig, wenn Sie ein Verzeichnis wie "/usr/bin" oder
# "/bin" als "etcd_bin_dir" angeben, da dies die Berechtigungen
# dieser Verzeichnisse ändert, was normalerweise nicht gewünscht ist.
etcd_bin_dir: "/usr/local/bin"

# Berechtigungen für das Verzeichnis zum Speichern der etcd-Binärdateien
etcd_bin_dir_mode: "0755"

# Besitzer des in "etcd_bin_dir" angegebenen Verzeichnisses
etcd_bin_dir_user: "{{ etcd_user }}"

# Gruppenbesitzer des in "etcd_bin_dir" angegebenen Verzeichnisses
etcd_bin_dir_group: "{{ etcd_group }}"

# etcd-Datenverzeichnis (etcd-Datenbankdateien sozusagen)
etcd_data_dir: "/var/lib/etcd"

# Berechtigungen für das Verzeichnis zum Speichern der etcd-Daten
etcd_data_dir_mode: "0700"

# Besitzer des in "etcd_data_dir" angegebenen Verzeichnisses
etcd_data_dir_user: "{{ etcd_user }}"

# Gruppenbesitzer des in "etcd_data_dir" angegebenen Verzeichnisses
etcd_data_dir_group: "{{ etcd_group }}"

# Architektur zum Herunterladen und Installieren
etcd_architecture: "amd64"

# Ändern Sie dies nur, wenn die von Ihnen verwendete Architektur nicht unterstützt wird
# Weitere Informationen finden Sie hier:
# https://github.com/etcd-io/website/blob/main/content/en/docs/v3.5/op-guide/supported-platform.md
etcd_allow_unsupported_archs: false

# Standardmäßig wird das etcd-Tarball aus dem offiziellen
# etcd-Repository heruntergeladen. Wenn nötig, kann dies in eine benutzerdefinierte
# URL geändert werden. Für weitere Informationen zu verwendbaren Protokollen lesen Sie:
# https://docs.ansible.com/ansible/latest/collections/ansible/builtin/get_url_module.html
# Es ist nur wichtig, die Namensschema der Datei beizubehalten:
# "etcd-v{{ etcd_version }}-linux-{{ etcd_architecture }}.tar.gz"
etcd_download_url: "https://github.com/etcd-io/etcd/releases/download/v{{ etcd_version }}/etcd-v{{ etcd_version }}-linux-{{ etcd_architecture }}.tar.gz"

# Standardmäßig wird die SHA256SUMS-Datei verwendet, um die
# Prüfziffer des Tarball-Archivs zu überprüfen. Dies kann ebenfalls
# an Ihre Bedürfnisse angepasst werden.
etcd_download_url_checksum: "sha256:https://github.com/coreos/etcd/releases/download/v{{ etcd_version }}/SHA256SUMS"

# Optionen für den Abschnitt [Service]. Für weitere Informationen siehe:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html#Options
# Die unten aufgeführten Optionen "Type=notify" sind hauptsächlich Sicherheits-/Sandbox-bezogene Einstellungen
# und beschränken die Exposition des Systems gegenüber den Prozessen des Dienstes.
# https://www.freedesktop.org/software/systemd/man/systemd.exec.html
etcd_service_options:
  - User={{ etcd_user }}
  - Group={{ etcd_group }}
  - Restart=on-failure
  - RestartSec=5
  - Type=notify
  - ProtectHome=true
  - PrivateTmp=true
  - ProtectSystem=full
  - ProtectKernelModules=true
  - ProtectKernelTunables=true
  - ProtectControlGroups=true
  - CapabilityBoundingSet=~CAP_SYS_PTRACE

etcd_settings:
  "name": "{{ ansible_hostname }}"
  "cert-file": "{{ etcd_conf_dir }}/cert-etcd-server.pem"
  "key-file": "{{ etcd_conf_dir }}/cert-etcd-server-key.pem"
  "trusted-ca-file": "{{ etcd_conf_dir }}/ca-etcd.pem"
  "peer-cert-file": "{{ etcd_conf_dir }}/cert-etcd-peer.pem"
  "peer-key-file": "{{ etcd_conf_dir }}/cert-etcd-peer-key.pem"
  "peer-trusted-ca-file": "{{ etcd_conf_dir }}/ca-etcd.pem"
  "advertise-client-urls": "{{ 'https://' + hostvars[inventory_hostname]['ansible_' + etcd_interface].ipv4.address + ':' + etcd_client_port }}"
  "initial-advertise-peer-urls": "{{ 'https://' + hostvars[inventory_hostname]['ansible_' + etcd_interface].ipv4.address + ':' + etcd_peer_port }}"
  "listen-peer-urls": "{{ 'https://' + hostvars[inventory_hostname]['ansible_' + etcd_interface].ipv4.address + ':' + etcd_peer_port }}"
  "listen-client-urls": "{{ 'https://' + hostvars[inventory_hostname]['ansible_' + etcd_interface].ipv4.address + ':' + etcd_client_port + ',https://127.0.0.1:' + etcd_client_port }}"
  "peer-client-cert-auth": "true"            # Aktivieren Sie die Authentifizierung von Peer-Client-Zertifikaten
  "client-cert-auth": "true"                 # Aktivieren Sie die Authentifizierung von Client-Zertifikaten
  "initial-cluster-token": "etcd-cluster-0"  # Initiales Cluster-Token für das etcd-Cluster während des Bootstraps.
  "initial-cluster-state": "new"             # Anfangszustand des Clusters ('new' oder 'existing')
  "data-dir": "{{ etcd_data_dir }}"          # etcd-Datenverzeichnis (etcd-Datenbankdateien sozusagen)
  "wal-dir": ""                              # Eigenes WAL-Verzeichnis ("" bedeutet kein separates WAL-Verzeichnis)
  "auto-compaction-retention": "0"           # Aufbewahrung der automatischen Kompaktierung in Stunden. 0 bedeutet, dass die automatische Kompaktierung deaktiviert ist.
  "snapshot-count": "100000"                 # Anzahl der bestätigten Transaktionen, die eine Snapshot-Disk erstellen
  "heartbeat-interval": "100"                # Zeit (in Millisekunden) eines Herzschlagsintervalls
  "election-timeout": "1000"                 # Zeit (in Millisekunden), bis eine Wahl abläuft. Siehe Tuning-Dokumentation für Details
  "max-snapshots": "5"                       # Maximale Anzahl von Snapshot-Dateien, die beibehalten werden sollen (0 ist unbegrenzt)
  "max-wals": "5"                            # Maximale Anzahl von WAL-Dateien, die beibehalten werden sollen (0 ist unbegrenzt)
  "quota-backend-bytes": "0"                 # Alarm auslösen, wenn die Backend-Größe die angegebene Quote überschreitet (0 bedeutet niedrige Raumquote)
  "logger": "zap"                            # 'zap' für strukturiertes Logging oder 'capnslog' angeben.
  "log-outputs": "systemd/journal"           # Geben Sie 'stdout' oder 'stderr' an, um das Journald-Logging zu überspringen, auch wenn Sie unter systemd laufen
  "enable-v2": "true"                        # v2 API aktivieren, um mit der vorherigen etcd 3.3.x kompatibel zu bleiben (benötigt z.B. für flannel)
  "discovery-srv": ""                        # Entdeckungsdomäne aktivieren, um die DNS SRV-Entdeckung zu ermöglichen, leer lassen, um zu deaktivieren. Wenn festgelegt, wird die initial-cluster überschrieben.

# Zertifizierungsstelle und Zertifikatsdateien für etcd
etcd_certificates:
  - ca-etcd.pem               # Zertifizierungsstellen-Datei
  - ca-etcd-key.pem           # Zertifizierungsstellen-Schlüsseldatei
  - cert-etcd-peer.pem        # Peer-TLS-Zertifikatdatei
  - cert-etcd-peer-key.pem    # Peer-TLS-Schlüsseldatei
  - cert-etcd-server.pem      # Server-TLS-Zertifikatdatei
  - cert-etcd-server-key.pem  # Server-TLS-Schlüsseldatei

Die Standardwerte für etcd, die in etcd_settings definiert sind, können überschrieben werden, indem eine Variable namens etcd_settings_user definiert wird. Sie können auch zusätzliche Einstellungen hinzufügen, indem Sie diese Variable verwenden. Zum Beispiel, um den Standardwert für die Einstellung log-output zu überschreiben und eine neue Einstellung wie grpc-keepalive-min-time hinzuzufügen, fügen Sie die folgenden Einstellungen zu group_vars/k8s.yml hinzu:

etcd_settings_user:
  "log-output": "stdout"
  "grpc-keepalive-min-time": "10s"

Beispiel-Playbook

- hosts: k8s_etcd
  roles:
    - githubixx.etcd

Tests

Diese Rolle hat eine kleine Testeinrichtung, die mit Molecule, libvirt (vagrant-libvirt) und QEMU/KVM erstellt wurde. Bitte lesen Sie meinen Blogbeitrag Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVM, um zu erfahren, wie Sie es einrichten können. Die Testkonfiguration finden Sie hier.

Danach kann Molecule ausgeführt werden:

molecule converge

Dies richtet drei virtuelle Maschinen (VM) mit Ubuntu 20.04/22.04 ein und installiert ein etcd-Cluster. Ein kleiner Verifizierungsschritt ist ebenfalls enthalten:

molecule verify

Zum Aufräumen führen Sie aus:

molecule destroy

Lizenz

GNU ALLGEMEINE ÖFFENTLICHE LIZENZ Version 3

Autoreninformation

http://www.tauceti.blog

Über das Projekt

Installs etcd cluster.

Installieren
ansible-galaxy install githubixx.etcd
Lizenz
gpl-3.0
Downloads
3k
Besitzer
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)