All Articles

2025-05-01

มาลง n8n บน Kubernetes กันเถอะ

Read on Medium

มาลง n8n บน Kubernetes กันเถอะ

วันนี้เราจะมาลองติดตั้ง n8n บน Kubernetes (K8s) โดยเราจะไปดูกันทั้ง 2 วิธีหลัก: ใช้ Helm กับ ใช้ Deployment 😎 ซึ่งเราสามารถเลือกใช้ฐานข้อมูลได้ทั้ง SQLite (local storage) หรือ PostgreSQL ขึ้นอยู่กับความสะดวกของเรากันเลย!

1. การติดตั้ง n8n ด้วย Helm

ขั้นตอนที่ 1: เตรียม Kubernetes Cluster

ก่อนอื่นเลย ใครยังไม่ได้ตั้ง Kubernetes cluster หรือ kubectl ก็ต้องจัดการให้พร้อมนะครับ เพราะไม่งั้นมันจะไม่ได้! 😅

ขั้นตอนที่ 2: ติดตั้ง Helm (ถ้ายังไม่ได้ติดตั้ง)

ถ้ายังไม่มี Helm ก็อย่าลืมติดตั้งก่อนนะครับ! วิธีการติดตั้งง่ายๆ ตามนี้:

brew install helm # สำหรับ Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

ขั้นตอนที่ 3: เพิ่ม Chart Repository ของ n8n

มาต่อกันที่การเพิ่ม repository ของ n8n เข้าไปใน Helm ซึ่งจะทำให้เราสามารถติดตั้ง n8n ได้ง่ายๆ จาก Chart:

helm repo add n8n https://n8n.io/helm-charts
helm repo update

ขั้นตอนที่ 4: ติดตั้ง n8n ด้วย Helm

เอาล่ะ ตอนนี้เราพร้อมติดตั้ง n8n แล้ว! ใช้คำสั่งนี้กันเลย:

helm install n8n n8n/n8n --namespace n8n --create-namespace แบบนี้ n8n ก็จะถูกติดตั้งโดยใช้ SQLite เป็นฐานข้อมูลในตัว (local storage) ให้อัตโนมัติครับ 🎉

ขั้นตอนที่ 5: ตั้งค่าเพิ่มเติม

ถ้าคุณอยากใช้ PostgreSQL แทน SQLite หรืออยากปรับแต่งการติดตั้ง ก็สามารถใช้ไฟล์ values.yaml แล้วใส่ค่าเหล่านี้ลงไป:

postgresql:
enabled: true
postgresqlPassword: "yourpassword"
postgresqlDatabase: "n8n_db" แล้วใช้คำสั่งนี้เพื่อติดตั้งอีกครั้ง:

helm install n8n n8n/n8n --namespace n8n -f values.yaml

ขั้นตอนที่ 6: การตั้งค่า Ingress (Optional)

ถ้าอยากให้ n8n เข้าถึงได้จากภายนอก ก็สามารถตั้งค่า Ingress ได้เลย! เพียงแค่สร้างไฟล์ ingress.yaml แบบนี้:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: n8n

namespace: n8n
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
spec:
rules:
  • host: n8n.example.com
    http:
    paths:
  • path: /
    pathType: Prefix
    backend:
    service:
    name: n8n
    port:
    number: 80
    tls:
  • hosts:
  • n8n.example.com
    secretName: n8n-tls

2. การติดตั้ง n8n ด้วย Deployment

ถ้าไม่อยากใช้ Helm หรืออยากควบคุมทุกอย่างเองมากๆ ลองใช้ Deployment ดูครับ! โดยวิธีนี้เราจะต้องจัดการเองหมดทุกอย่าง แต่ก็ทำให้เรามีอิสระมากขึ้น 💪

ขั้นตอนที่ 1: สร้าง Namespace

ก่อนอื่นให้สร้าง Namespace สำหรับแยกโปรเจกต์ n8n ของเราออกมา:

apiVersion: v1
kind: Namespace
metadata:
name: n8n

ขั้นตอนที่ 2: สร้าง Deployment สำหรับ n8n

มาต่อที่ไฟล์ deployment.yaml ที่ใช้สำหรับติดตั้ง n8n:

apiVersion: apps/v1
kind: Deployment
metadata:
name: n8n

namespace: n8n
spec:
replicas: 1
selector:
matchLabels:
app: n8n
template:
metadata:
labels:
app: n8n
spec:
containers:
  • name: n8n
    image: n8nio/n8n:latest
    ports:

  • containerPort: 5678
    env:

  • name: N8N_HOST
    value: "n8n.example.com"

  • name: WEBHOOK_URL
    value: "https://n8n.example.com/"

  • name: N8N_BASIC_AUTH_ACTIVE
    value: "true"

  • name: N8N_BASIC_AUTH_USER
    value: "admin"

  • name: N8N_BASIC_AUTH_PASSWORD
    value: "supersecret"

  • name: GENERIC_TIMEZONE
    value: "Asia/Bangkok"

  • name: DB_TYPE
    value: "postgresdb"

  • name: DB_POSTGRESDB_HOST
    value: "postgresql.postgresql.svc.cluster.local"

  • name: DB_POSTGRESDB_PORT
    value: "5432"

  • name: DB_POSTGRESDB_DATABASE
    value: "n8n_db"

  • name: DB_POSTGRESDB_USER
    value: "postgres"

  • name: DB_POSTGRESDB_PASSWORD
    value: "yourpassword"

ขั้นตอนที่ 3: สร้าง Service

เพื่อ expose n8n เราก็สร้าง Service กันเลย:

apiVersion: v1
kind: Service
metadata:
name: n8n

namespace: n8n
spec:
selector:
app: n8n
ports:
  • protocol: TCP
    port: 80
    targetPort: 5678

ขั้นตอนที่ 4: สร้าง Ingress

สุดท้าย ถ้าอยากให้ n8n เข้าใช้งานจากภายนอกก็ทำการตั้งค่า Ingress ได้ตามนี้:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: n8n

namespace: n8n
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
spec:
rules:
  • host: n8n.example.com
    http:
    paths:
  • path: /
    pathType: Prefix
    backend:
    service:
    name: n8n
    port:
    number: 80
    tls:
  • hosts:
  • n8n.example.com
    secretName: n8n-tls

ขั้นตอนที่ 5: ติดตั้งทุกอย่างใน Kubernetes

พร้อมแล้ว! ใช้คำสั่งนี้เพื่อติดตั้งทุกอย่างใน K8s:

kubectl apply -f namespace.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml

© 2026 Nanpipat Klinpratoom. All Rights Reserved.