Jak zainstalować n8n w Kubernetes - k3s
Szybka implementacja:
- Zainstaluj git
|
|
- Sklonuj repozytorium
|
|
- Wejdź do katalogu
|
|
- Zainstaluj n8n w k3s
|
|
Szczegóły artykułu dotyczą ustawienia n8n, narzędzia do automatyzacji przepływu pracy, na Kubernetes. Skupia się na użyciu plików YAML do wdrożenia Kubernetes.
Kluczowe punkty:
-
Przegląd n8n: n8n to narzędzie do automatyzacji przepływu pracy w modelu fair-code, podobne do Zapierlub IFTTT, odpowiednie do samo-hostingu lub używania płatnej usługi n8n.cloud.
-
Konfiguracja Kubernetes dla n8n:
- Tworzenie Namespace: Początkowo, tworzona jest przestrzeń nazw Kubernetes ’n8n’ za pomocą
kubectl create namespace n8n
. - Konfiguracja Wdrożenia i Usługi:
n8n-deployment.yaml
: Definiuje wdrożenie z jedną repliką kontenera n8n, eksponując port 5678. Zawiera sondy gotowości i zdolności działania na/healthz
, zmienne środowiskowe z ConfigMap (n8n-configmap
) i Secret (n8n-secrets
), oraz limity zasobów.n8n-service.yaml
: Ustawia usługę NodePort dla n8n, mapując port 80 na port kontenera 5678.
- Tworzenie Namespace: Początkowo, tworzona jest przestrzeń nazw Kubernetes ’n8n’ za pomocą
-
StatefulSet PostgreSQL:
postgres-statefulset.yaml
ipostgres-service.yaml
: Definiują StatefulSet i usługę dla PostgreSQL, eksponując port 5432, i powiązane z Secret (postgres-secrets
).
-
ConfigMaps i Secrets:
n8n-configmap.yaml
: Zawiera zmienne środowiskowe takie jak NODE_ENV, konfiguracje bazy danych i ustawienia webhook.n8n-secrets.yaml
: Zawiera sekrety dla n8n, w tym hasło do bazy danych i klucz szyfrowania.postgres-secrets.yaml
: Przechowuje dane konfiguracyjne PostgreSQL.
-
Proces Wdrożenia:
- Stosowanie plików konfiguracyjnych (
kubectl apply -f
) dla n8n i PostgreSQL. - Używanie
kubectl rollout restart
do ponownego uruchomienia StatefulSet i Wdrożenia po zastosowaniu konfiguracji. - Ostateczna konfiguracja obejmuje sprawdzanie usług (
kubectl get svc -n n8n
) i dostęp do n8n za pomocą przeglądarki, korzystając z NodePort lub niestandardowej domeny przez NGINX Proxy Manager.
- Stosowanie plików konfiguracyjnych (
Artykuł podkreśla znaczenie dopasowania etykiet w konfiguracjach Kubernetes i zapewnia kompleksowy przewodnik po ustawieniu n8n z PostgreSQL na Kubernetes, wykorzystując ConfigMaps i Secrets do zarządzania konfiguracją.
TLDR
Dla tych, którzy chcieliby przeczytać i dowiedzieć się więcej, zobacz artykuł:
Co to jest n8n
W skrócie, n8n to rozwiązanie do automatyzacji przepływu pracy oparte na modelu dystrybucji fair-code, które jest darmowe i rozszerzalne. Jeśli znasz rozwiązania low-code/no-code takie jak Zapier czy IFTTT , n8n może być obsługiwane niezależnie i jest do nich podobne.
Bycie fair-code oznacza, że zawsze masz prawo używać i rozpowszechniać kod źródłowy. Jedynym minusem jest to, że możesz musieć zapłacić za licencję na korzystanie z n8n, jeśli zarabiasz na nim pieniądze. Istnieją doskonałe ilustracje, jak ta metoda różni się od tradycyjnych projektów “open-source” w tej dyskusji społeczności temat .
Przepływy pracy są wykonywane za pomocą serwera webowego NodeJS. Został założony w czerwcu 2019 i już zgromadził +280 węzłów i +500 przepływów pracy . Społeczność jest również dość dynamiczna; często zajmuje kilka dni, aby łatka została połączona i udostępniona, co jest niesamowite!
Oznacza to, że samodzielne hostowanie n8n jest dość proste. Ponadto istnieje n8n.cloud , hostowana wersja, która jest płatna i eliminuje konieczność martwienia się o skalowanie, bezpieczeństwo lub konserwację.
Dlaczego używać n8n, a nie Zapiera?
Dla mnie to wysoka cena. 💸
Chociaż Zapier jest fantastyczny i najprawdopodobniej zdolny do obsługi każdego przypadku użycia, który na niego rzucisz, ostatecznie darmowy poziom staje się nieprzydatny. Można projektować tylko bardzo proste procesy “dwuetapowe” i szybko osiąga się limity “zapów”. Tylko klienci, którzy dokonują płatności, mają dostęp do bardziej skomplikowanych przepływów.
Ponadto, nie jest on hostowany w “twoim środowisku” (samodzielne hostowanie lub wdrożenie lokalne), co może być problematyczne, jeśli masz rygorystyczne zasady dotyczące dzielenia się danymi z zewnętrznymi dostawcami, na przykład. Ponieważ Zapier jest gotowy dla przedsiębiorstw, możesz być pewien, że otrzymasz wszystkie potrzebne funkcje i wyjątkowe wsparcie klienta 💰.
Jeśli nie przeszkadza Ci kontrolowanie własnej instancji (skalowalność, trwałość, dostępność itp.), to n8n będzie działać równie dobrze jak każdy z jego konkurentów, którzy nie są darmowi.
Jednak celem tego artykułu jest pokazanie, jak skonfigurowaliśmy n8n na naszym klastrze Kubernetes, a nie dyskusja na temat korzyści płynących z korzystania z Zapierlub n8n.
Jak skonfigurować n8n w Kubernetes
Zamiast zaczynać od zera z całkowicie nową konfiguracją Kubernetes, będziemy korzystać z przykładów podanych przez @bacarini , użytkownika forum społecznościowego n8n, który zaoferował swoją konfigurację .
Do konfiguracji mojego klastra lokalnie używam K3s. Jeśli jest to Twój pierwszy raz z nim, możesz po prostu śledzić serię o Kubernetes .
Po zainstalowaniu K3s użyj następującego polecenia, aby wdrożyć n8n w klastrze:
Zaczniesz od konfiguracji wdrożenia n8n i udostępnisz ją za pomocą jego konfiguracji usługi.
Ale najpierw musisz utworzyć przestrzeń nazw n8n:
|
|
Następnie utwórz poniższe pliki:
|
|
|
|
Te pliki YAML są kluczowe dla konfiguracji n8n w Kubernetes. n8n-deployment.yaml
definiuje wdrożenie aplikacji n8n, określając replikę, obraz kontenera, porty, zmienne środowiskowe oraz sondy gotowości i zdolności działania. n8n-service.yaml
tworzy usługę Kubernetes dla n8n, definiując, jak aplikacja jest eksponowana na zewnątrz klastra.
Ważne rzeczy, o których należy pamiętać tutaj:
- Aby uniknąć kopiowania i wklejania tych samych etykiet wewnątrz siebie, przydzieliłem zmienną &labels w konfiguracji yaml (dotyczy to większości moich ustawień).
- w moim pliku n8n-deployment.yaml, ustawiłem port kontenera n8n na 5678, co odpowiada domyślnemu portowi n8n. Poprzez przekierowanie ruchu z portu 80 (http) na targetPort kontenera, mój n8n-service.yaml eksponuje kontener na tym porcie.
- Mój kontener n8n jest połączony zarówno z moimi plikami n8n-configmap.yaml, jak i n8n-secrets.yaml, chociaż wciąż muszę je stworzyć. Zajmę się tym teraz.
- Aby sprawdzić, czy usługa działa, n8n oferuje punkt końcowy /healthz. Używam tego punktu końcowego do ustawienia Sond Gotowości i Zdolności Działania dla mojego wdrożenia.
- Na koniec optymalizuję zasoby mojego kontenera, aby wykorzystywać maksymalnie 1 CPU i 1 GB RAM na moim klastrze.
Zwróć szczególną uwagę na wybór n8n-service. Nie będziemy mogli dotrzeć do naszego serwera n8n, jeśli konfiguracja yaml w kontenerze n8n-deployment nie będzie pasować do tych samych etykiet.
Możesz dowiedzieć się więcej o selektorach i o tym, jak wdrożenia działają z nimi tutaj: tworzenie wdrożenia Kubernetes
Korzystając z tych dwóch układów, będę miał zatem następujące:
|
|
Jeśli to sprawdzisz, możesz zauważyć, że pod kubectl get pods -n n8n
jest obecnie w stanie “CreateContainerConfigError”. Jest to wynik braku konfiguracji ConfigMap i Secrets. Szybko to naprawię.
PostgreSQL StatefulSet
Konfiguracja StatefulSet Postgres jest bardzo podobna do naszych poprzednich konfiguracji wdrożenia i wygląda następująco:
|
|
|
|
Jak możesz zauważyć, główne różnice to:
- Domyślny port dla serwera PostgreSQL to 5432, który jest portem, który obecnie udostępniam w obu moich plikach postgres-statefulset.yaml i postgres-service.yaml.
- Podobnie jak w poprzedniej konfiguracji, zwróć szczególną uwagę na selektor usługi, ponieważ musi on być zgodny z etykietami kontenera zestawu stanowego.
Korzystając z obu konfiguracji K8S, należy wykonać poniższe komendy:
|
|
ConfigMaps i Secrets
Muszę tylko zainicjować wszystkie podstawowe konfiguracje PostgreSQL i n8n, aby połączyć te elementy:
- Moje wdrożenie n8n jest połączone z konfiguracją Secrets o nazwie “n8n-secrets” oraz z ConfigMap o nazwie “n8n-configmap”;
- Statefulset Postgres jest po prostu połączony z konfiguracją Secrets o nazwie “postgres-secrets.”
|
|
|
|
|
|
Większość tych konfiguracji to kopie i wklejki z podręcznika n8n lub przykładu udostępnionego przez @bacarini , ale wszystkie one są bardzo powszechne. Kluczem jest, jak poprzednio:
DB_POSTGRESDB_HOST
w n8n-configmap. Dla mojej usługi PostgreSQL, konfiguracja yaml musi być zgodna z nazwą usługi.- Dodatkowo, środowisko
WEBHOOK_TUNNEL_URL
musi być zaktualizowane. Będzie to głównie wykorzystywane do wywoływania webhooków, jednak nie będzie działać, jeśli adres URL hosta nie jest prawidłowy.
FAQ n8n radzi używać ngrok do ustawienia tego URL , ale odkryłem, że w k3s będzie to funkcjonować bez konieczności instalowania jakichkolwiek dodatkowych usług w systemie. Będę po prostu używał portu usługi, który będzie wyświetlany przy użyciu poniższego polecenia:
|
|
W moim środowisku używam menedżera proxy NGINX, w którym zdefiniowałem URL w sposób, jaki przedstawiłem na filmie. Więc zamiast http://10.10.0.112:31600 używam n8n.local.
|
|
Teraz mogę po prostu zastosować wszystkie trzy pliki konfiguracyjne, zrestartować Statefulset i Deployment, a te konfiguracje zostaną ponownie załadowane:
|
|
Teraz wszystko razem 🚀
Powinieneś mieć coś podobnego w swoim katalogu roboczym, jeśli zapisywałeś konfiguracje wymienione powyżej:
|
|
Wszystkie konfiguracje mogą być wdrożone jednocześnie poprzez wykonanie:
|
|
Nadszedł wreszcie czas, aby uruchomić nasz serwer n8n w przeglądarce!
Więc, sprawdź serwis
|
|
i adres IP maszyny, na której działa K3s
|
|
i użyj NodePort, który eksponuje usługę.
Ostatecznie powinno to być np. http://10.10.0.112:31600 lub po prostu http://n8n.local , ponieważ używam własnego serwera DNS (Adguard Home).