githubixx.etcd
ansible-rola-etcd
Ta rola Ansible jest używana w Kubernetes nie jest taki trudny sposób przy użyciu Ansible - klaster etcd. Oczywiście można jej używać również bez klastra Kubernetes.
Instaluje klaster etcd. UWAGA: Ten playbook nie przeładowuje ani nie restartuje procesów klastra etcd po zmianie pliku usługi systemd! To jest zamierzone! Restartowanie wszystkich procesów etcd jednocześnie byłoby bardzo złym pomysłem. Jeśli plik etcd.service
został zmieniony, uruchom ponownie/przeładuj etcd ręcznie na jednym węźle po drugim i sprawdź logi, aby upewnić się, że węzeł ponownie dołączył do klastra! Oczywiście ten proces można również zautomatyzować, ale obecnie nie jest to część tej roli.
Na marginesie: Skrypt wykona systemctl daemon-reload
po zmianie pliku usługi etcd, aby systemd był świadomy zmienionego pliku i nie musisz się o to martwić. Zrestartowanie węzła etcd aktywuje również nową konfigurację.
Aktualizacja klastra etcd zainstalowanego tą rolą jest opisana tutaj.
Wersje
Oznaczam każdą wersję i staram się stosować semantyczne wersjonowanie. Jeśli chcesz użyć tej roli, zalecam sprawdzenie najnowszej wersji. Gałąź główna jest zasadniczo miejscem do rozwoju, podczas gdy tagi oznaczają stabilne wersje. Tag 13.1.1+3.5.13
oznacza, że jest to wydanie 13.1.1
tej roli i jest przeznaczone do użycia z wersją etcd 3.5.13
(ale powinno działać również z nowszymi wersjami). Jeśli rola sama się zmieni, numer X.Y.Z
przed +
będzie wzrastał. Jeśli zmieni się wersja etcd, numer X.Y.Z
po +
będzie wzrastał. Pozwala to na oznaczanie poprawek błędów i nowych wersji głównych roli, podczas gdy wciąż jest ona rozwijana dla konkretnego wydania etcd.
Dziennik zmian
zobacz CHANGELOG.md
Wymagania
Ta rola wymaga, abyś wcześniej utworzył certyfikaty dla etcd
(zobacz Kubernetes nie jest taki trudny sposób przy użyciu Ansible - Władza certyfikacji (CA) oraz rola Ansible kubernetes_ca). Playbook szuka certyfikatów w etcd_ca_conf_directory
na hoście, na którym jest uruchamiany. Oczywiście możesz stworzyć certyfikaty samodzielnie (zobacz Generowanie certyfikatów samopodpisanych - repozytorium Git jest archiwizowane, ale informacje są nadal ważne).
Zmienne roli
# Katalog, z którego będą kopiowane certyfikaty etcd. Domyślnie
# rozwinie się do lokalnego katalogu $HOME użytkownika (tego, który uruchamia "ansible-playbook ..."
# plus "/etcd-certificates". To oznacza, że jeśli katalog $HOME użytkownika to np.
# "/home/da_user", to "etcd_ca_conf_directory" będzie miało wartość
# "/home/da_user/etcd-certificates".
etcd_ca_conf_directory: "{{ '~/etcd-certificates' | expanduser }}"
# Grupa Ansible dla etcd
etcd_ansible_group: "k8s_etcd"
# Wersja etcd
etcd_version: "3.5.13"
# Port, na którym etcd nasłuchuje klientów
etcd_client_port: "2379"
# Port, na którym etcd nasłuchuje swoich sąsiadów
etcd_peer_port: "2380"
# Interfejs, do którego są przypisane porty etcd
etcd_interface: "tap0"
# Uruchom demon etcd jako tego użytkownika.
#
# Uwaga 1: Jeśli chcesz użyć "etcd_peer_port" < 1024, prawdopodobnie będziesz musiał
# uruchomić "etcd" jako użytkownik "root".
# Uwaga 2: Jeśli użytkownik określony w "etcd_user" nie istnieje, rola
# go utworzy. Tylko jeśli użytkownik już istnieje, rola go nie utworzy,
# ale dostosuje jego UID/GID i powłokę, jeśli są one określone (zobacz ustawienia poniżej).
# Dodatkowo, jeśli "etcd_user" to "root", ta rola nie wpłynie na użytkownika
# w ogóle.
etcd_user: "etcd"
# UID użytkownika określonego w "etcd_user". Jeśli nie jest określony, zostanie wzięty
# następny dostępny UID z "/etc/login.defs" (zobacz ustawienie "SYS_UID_MAX").
# etcd_user_uid: "999"
# Powłoka dla użytkownika określonego w "etcd_user". Dla zwiększonego bezpieczeństwa,
# zachowaj domyślnie.
etcd_user_shell: "/bin/false"
# Określa, czy użytkownik podany w "etcd_user" będzie użytkownikiem systemowym (domyślnie)
# czy nie. Jeśli "true", ustawienie "etcd_user_home" zostanie zignorowane. Zasadniczo
# warto zachować domyślną wartość, ponieważ nie powinno być potrzeby logowania się jako
# użytkownik, który uruchamia "etcd".
etcd_user_system: true
# Katalog domowy użytkownika określonego w "etcd_user". Zostanie zignorowany, jeśli
# "etcd_user_system" jest ustawione na "true". W takim przypadku nie zostanie utworzony
# katalog domowy. Zwykle niepotrzebne.
# etcd_user_home: "/home/etcd"
# Uruchom demona etcd jako tę grupę
#
# Uwaga: Jeśli grupa określona w "etcd_group" nie istnieje, to rola
# ją utworzy. Tylko jeśli grupa już istnieje, rola jej nie utworzy,
# ale dostosuje GID, jeśli jest określony w "etcd_group_gid" (zobacz poniższe ustawienie).
etcd_group: "etcd"
# GID grupy określonej w "etcd_group". Jeśli nie jest określona, zostanie wzięta
# następna dostępna GID z "/etc/login.defs" (zobacz ustawienie "SYS_GID_MAX").
# etcd_group_gid: "999"
# Określa, czy grupa określona w "etcd_group" będzie grupą systemową (domyślnie)
# czy nie.
etcd_group_system: true
# Katalog konfiguracyjny etcd
etcd_conf_dir: "/etc/etcd"
# Uprawnienia dla katalogu konfiguracyjnego etcd
etcd_conf_dir_mode: "0750"
# Właściciel katalogu określonego w "etcd_conf_dir"
etcd_conf_dir_user: "root"
# Grupa właściciela katalogu określonego w "etcd_conf_dir"
etcd_conf_dir_group: "{{ etcd_group }}"
# Katalog do przechowywania pobranego archiwum etcd
# Nie powinien być usuwany, aby uniknąć ciągłego pobierania
etcd_download_dir: "/opt/etcd"
# Uprawnienia dla katalogu do przechowywania pobranego archiwum etcd
etcd_download_dir_mode: "0755"
# Właściciel katalogu określonego w "etcd_download_dir"
etcd_download_dir_user: "{{ etcd_user }}"
# Grupa właściciela katalogu określonego w "etcd_download_dir"
etcd_download_dir_group: "{{ etcd_group }}"
# Katalog do przechowywania binariów etcd
#
# WAŻNE: Jeśli używasz domyślnej wartości dla "etcd_bin_dir", która wynosi
# "/usr/local/bin", to ustawienia określone w "etcd_bin_dir_mode",
# "etcd_bin_dir_user" i "etcd_bin_dir_group" są ignorowane. To
# robi się, aby zapobiec zmianie uprawnień katalogu "/usr/local/bin".
# Ten katalog zwykle istnieje już na każdej instalacji Linuxa,
# i nie powinien być zmieniany.
# Dlatego upewnij się, że wskazujesz katalog taki jak "/usr/bin" lub
# "/bin" jako "etcd_bin_dir", ponieważ to zmieni uprawnienia
# tych katalogów, co zazwyczaj nie jest pożądane.
etcd_bin_dir: "/usr/local/bin"
# Uprawnienia dla katalogu do przechowywania binariów etcd
etcd_bin_dir_mode: "0755"
# Właściciel katalogu określonego w "etcd_bin_dir"
etcd_bin_dir_user: "{{ etcd_user }}"
# Grupa właściciela katalogu określonego w "etcd_bin_dir"
etcd_bin_dir_group: "{{ etcd_group }}"
# Katalog danych etcd (pliki bazy danych etcd)
etcd_data_dir: "/var/lib/etcd"
# Uprawnienia dla katalogu do przechowywania danych etcd
etcd_data_dir_mode: "0700"
# Właściciel katalogu określonego w "etcd_data_dir"
etcd_data_dir_user: "{{ etcd_user }}"
# Grupa właściciela katalogu określonego w "etcd_data_dir"
etcd_data_dir_group: "{{ etcd_group }}"
# Architektura do pobrania i zainstalowania
etcd_architecture: "amd64"
# Zmień to tylko, jeśli używana architektura jest nieobsługiwana
# Więcej informacji znajdziesz tutaj:
# https://github.com/etcd-io/website/blob/main/content/en/docs/v3.5/op-guide/supported-platform.md
etcd_allow_unsupported_archs: false
# Domyślnie archiwum etcd jest pobierane z oficjalnej
# repozytorium etcd. Można to zmienić na jakikolwiek niestandardowy
# URL w razie potrzeby. Więcej informacji na temat protokołów
# można znaleźć tutaj:
# https://docs.ansible.com/ansible/latest/collections/ansible/builtin/get_url_module.html
# Ważne, aby zachować schemat nazw plików:
# "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"
# Domyślnie plik SHA256SUMS jest używany do weryfikacji
# sumy kontrolnej archiwum tarball. Może być to również
# zmieniane według Twoich potrzeb.
etcd_download_url_checksum: "sha256:https://github.com/coreos/etcd/releases/download/v{{ etcd_version }}/SHA256SUMS"
# Opcje dla sekcji [Service]. Więcej informacji znajdziesz tutaj:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html#Options
# Opcje poniżej "Type=notify" to w większości ustawienia związane z bezpieczeństwem/podziałem
# i ograniczają ekspozycję systemu w stosunku do procesów jednostki.
# 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" # Włącz autoryzację certyfikatów klientów równorzędnych
"client-cert-auth": "true" # Włącz autoryzację certyfikatów klientów
"initial-cluster-token": "etcd-cluster-0" # Inicjalny token klastra dla klastra etcd podczas uruchamiania.
"initial-cluster-state": "new" # Początkowy stan klastra ('new' lub 'existing')
"data-dir": "{{ etcd_data_dir }}" # Katalog danych etcd (pliki bazy danych etcd)
"wal-dir": "" # Dedykowany katalog wal ("" oznacza brak oddzielnego katalogu WAL)
"auto-compaction-retention": "0" # Retencja automatycznej kompresji w godzinach. 0 oznacza wyłączenie automatycznej kompresji.
"snapshot-count": "100000" # Liczba zatwierdzonych transakcji, aby wyzwolić zrzut do dysku
"heartbeat-interval": "100" # Czas (w milisekundach) interwału bicia serca
"election-timeout": "1000" # Czas (w milisekundach), po którym wybory wygasają. Zobacz dokumentację dostrajania dla szczegółów
"max-snapshots": "5" # Maksymalna liczba plików zrzutów do zachowania (0 to limit bez ograniczeń)
"max-wals": "5" # Maksymalna liczba plików wal do zachowania (0 to limit bez ograniczeń)
"quota-backend-bytes": "0" # Wyzwalaj alarmy, gdy rozmiar zaplecza przekracza podany limit (0 domyślnie jest niski limit miejsca)
"logger": "zap" # Określ 'zap' dla strukturalnego logowania lub 'capnslog'.
"log-outputs": "systemd/journal" # Określ 'stdout' lub 'stderr', aby pominąć logowanie do dziennika nawet gdy działa pod systemd
"enable-v2": "true" # włącz API v2, aby pozostać zgodnym z wcześniejszymi wersjami etcd 3.3.x (potrzebne dla flannel np.)
"discovery-srv": "" # Domeny odkrywania, aby włączyć odkrywanie DNS SRV, pozostaw puste, aby wyłączyć. Jeśli ustawione, nadpisze initial-cluster.
# Władza certyfikacji i pliki certyfikatów dla etcd
etcd_certificates:
- ca-etcd.pem # plik władzy certyfikacji
- ca-etcd-key.pem # plik klucza władzy certyfikacji
- cert-etcd-peer.pem # plik certyfikatu TLS peer
- cert-etcd-peer-key.pem # plik klucza TLS peer
- cert-etcd-server.pem # plik certyfikatu TLS serwera
- cert-etcd-server-key.pem # plik klucza TLS serwera
Domyślne ustawienia etcd
, określone w etcd_settings
, można nadpisać, definiując zmienną o nazwie etcd_settings_user
. Możesz również dodać dodatkowe ustawienia, używając tej zmiennej. Na przykład, aby nadpisać domyślną wartość ustawienia log-output
i dodać nowe ustawienie, takie jak grpc-keepalive-min-time
, dodaj poniższe ustawienia do group_vars/k8s.yml
:
etcd_settings_user:
"log-output": "stdout"
"grpc-keepalive-min-time": "10s"
Przykładowy Playbook
- hosts: k8s_etcd
roles:
- githubixx.etcd
Testowanie
Ta rola ma mały zestaw testowy, który jest tworzony przy użyciu Molecule, libvirt (vagrant-libvirt) oraz QEMU/KVM. Zobacz mój wpis na blogu Testowanie ról Ansible z Molecule, libvirt (vagrant-libvirt) i QEMU/KVM, aby dowiedzieć się, jak to ustawić. Konfiguracja testowa znajduje się tutaj.
Następnie można wykonać Molecule:
molecule converge
To skonfiguruje trzy maszyny wirtualne (VM) z Ubuntu 20.04/22.04 i zainstaluje klaster etcd
. Zawiera także mały krok weryfikacji:
molecule verify
Aby oczyścić, uruchom
molecule destroy
Licencja
GNU GENERAL PUBLIC LICENSE Wersja 3
Informacje o autorze
ansible-galaxy install githubixx.etcd