Google Kubernetes Engine에 n8n 호스팅하기
n8n v2.29Google Cloud는 n8n을 호스팅하기에 적합한 여러 옵션을 제공합니다. 이 가이드에서는 호스팅 옵션으로 Google Kubernetes Engine(GKE)을 사용합니다. 이 가이드의 단계 대부분은 Google Cloud UI를 사용하지만, 모든 단계를 gcloud 명령줄 도구를 사용해서 진행할 수도 있습니다.
Google Cloud는 n8n을 호스팅하기에 적합한 여러 옵션을 제공합니다. 여기에는 Cloud Run(컨테이너 실행에 최적화됨), Compute Engine(VM), Kubernetes Engine(쿠버네티스로 실행되는 컨테이너)이 포함됩니다.
이 가이드에서는 호스팅 옵션으로 Google Kubernetes Engine(GKE)을 사용합니다. Cloud Run을 사용하려면 이 안내를 참고하세요.
이 가이드의 단계 대부분은 Google Cloud UI를 사용하지만, 모든 단계를 gcloud 명령줄 도구를 사용해서 진행할 수도 있습니다.
사전 준비 사항#
- gcloud 명령줄 도구
- gke-gcloud-auth-plugin(먼저 gcloud CLI를 설치해야 함)
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.
프로젝트 생성#
GCP는 리소스와 구성을 논리적으로 정리하기 위해 프로젝트를 생성할 것을 권장합니다. Google Cloud 콘솔에서 n8n 배포용 새 프로젝트를 생성하세요. 프로젝트 드롭다운 메뉴를 선택한 다음 NEW PROJECT 버튼을 선택합니다. 그런 다음 새로 생성된 프로젝트를 선택합니다. 이 가이드의 다른 단계를 따라가면서 올바른 프로젝트를 선택했는지 확인하세요.
Kubernetes Engine API 활성화#
GKE는 기본적으로 활성화되어 있지 않습니다. 상단 검색창에서 "Kubernetes"를 검색하고 검색 결과에서 "Kubernetes Engine"을 선택하세요.
이 프로젝트에 대해 Kubernetes Engine API를 활성화하려면 ENABLE을 선택하세요.
클러스터 생성#
GKE 서비스 페이지에서 Clusters > CREATE를 선택합니다. "Standard" 클러스터 옵션을 선택해야 합니다. n8n은 "Autopilot" 클러스터에서는 동작하지 않습니다. 위치 등 특별히 변경해야 할 항목이 없다면 클러스터 구성은 기본값 그대로 두어도 됩니다.
Kubectl 컨텍스트 설정#
이 가이드의 나머지 단계를 진행하려면 GCP 인스턴스를 Kubectl 컨텍스트로 설정해야 합니다. 클러스터 인스턴스의 연결 정보는 해당 인스턴스의 세부 정보 페이지를 열고 CONNECT를 선택하면 확인할 수 있습니다. 표시되는 코드 스니펫에는 gcloud CLI 도구용 연결 문자열이 나와 있습니다. 이 코드 스니펫을 gcloud CLI에 붙여넣고 실행하여 로컬 Kubernetes 설정이 새 gcloud 클러스터를 사용하도록 변경하세요.
구성 리포지터리 클론#
Kubernetes와 n8n에는 일련의 구성 파일이 필요합니다. 이 리포지터리에서 이 파일들을 로컬로 클론할 수 있습니다. 다음 단계에서는 파일 구성 방법과 정보를 추가하는 방법을 설명합니다.
다음 명령어로 리포지터리를 클론하세요.
git clone https://github.com/n8n-io/n8n-hosting.git
그리고 디렉터리를 변경하세요.
cd n8n-hosting/kubernetes
Postgres 구성#
대규모 n8n 배포에는 Postgres가 SQLite보다 더 견고한 데이터베이스 백엔드를 제공합니다.
영구 스토리지용 볼륨 생성#
파드가 재시작되는 동안 데이터를 유지하려면 Postgres 배포에 영구 볼륨이 필요합니다. GCP에서 Postgres를 실행하려면 특정한 Kubernetes 스토리지 클래스가 필요합니다. 자세한 내용은 이 가이드를 참고할 수 있지만, storage.yaml 매니페스트가 이를 대신 생성해 줍니다. allowedTopologies > matchedLabelExpressions > values 키 아래에서 스토리지를 생성할 리전을 변경하고 싶을 수 있습니다. 기본적으로 us-central로 설정되어 있습니다.
…
allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- us-central1-b
- us-central1-c
Postgres 환경 변수#
Postgres는 컨테이너에서 실행되는 애플리케이션에 전달할 몇 가지 환경 변수를 설정해야 합니다.
예시 postgres-secret.yaml 파일에는 사용자가 직접 값으로 교체해야 하는 자리표시자(placeholder)가 들어 있습니다. Postgres는 데이터베이스를 생성할 때 이 세부 정보를 사용합니다.
그런 다음 postgres-deployment.yaml 매니페스트는 이 매니페스트 파일의 값을 사용하여 애플리케이션 파드에 전달합니다.
n8n 구성#
파일 스토리지용 볼륨 생성#
n8n을 실행하는 데 필수는 아니지만, 다음과 같은 경우에는 영구 볼륨을 사용해야 합니다.
- 바이너리 데이터 노드처럼 파일과 상호 작용하는 노드를 사용하는 경우.
- 재시작 간에 수동 n8n 암호화 키를 유지하고 싶은 경우. 이렇게 하면 시작 시 키가 담긴 파일이 파일 스토리지에 저장됩니다.
n8n-claim0-persistentvolumeclaim.yaml 매니페스트가 이를 생성하며, n8n 배포는 n8n-deployment.yaml 매니페스트의 volumes 섹션에서 해당 클레임을 마운트합니다.
…
volumes:
- name: n8n-claim0
persistentVolumeClaim:
claimName: n8n-claim0
…
파드 리소스#
Kubernetes를 사용하면 애플리케이션 컨테이너에 필요한 최소 리소스와 실행 가능한 한도를 선택적으로 지정할 수 있습니다. 위에서 클론한 예시 YAML 파일에는 n8n-deployment.yaml과 postgres-deployment.yaml 파일의 resources 섹션에 다음 내용이 들어 있습니다.
…
resources:
requests:
memory: "250Mi"
limits:
memory: "500Mi"
…
이렇게 하면 컨테이너당 최소 250mb, 최대 500mb로 정의되며, CPU는 Kubernetes가 알아서 처리합니다. 필요에 맞게 이 값을 변경할 수 있습니다. 참고로, n8n 클라우드 서비스의 리소스 값은 다음과 같습니다.
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.
선택 사항: 환경 변수#
환경 변수를 사용하여 n8n 설정과 동작을 구성할 수 있습니다.
n8n-secret.yaml 파일을 생성하세요. n8n 환경 변수에 대한 자세한 내용은 환경 변수를 참고하세요.
배포#
두 개의 배포 매니페스트(n8n-deployment.yaml과 postgres-deployment.yaml)는 n8n과 Postgres 애플리케이션을 Kubernetes에 정의합니다.
이 매니페스트들은 다음을 정의합니다.
- 정의된 환경 변수를 각 애플리케이션 파드로 전송
- 사용할 컨테이너 이미지 정의
resources오브젝트로 리소스 소비 한도 설정- 앞서 정의한
volumes와, 컨테이너 내에서 볼륨을 마운트할 경로를 정의하는volumeMounts - 스케일링 및 재시작 정책. 예시 매니페스트는 각 파드의 인스턴스를 하나씩 정의합니다. 필요에 맞게 이를 변경해야 합니다.
서비스#
두 개의 서비스 매니페스트(postgres-service.yaml과 n8n-service.yaml)는 각각 포트 5432와 5678에서 Kubernetes 로드 밸런서를 사용하여 서비스를 외부에 노출합니다.
Kubernetes 클러스터로 전송#
다음 명령어로 모든 매니페스트를 클러스터로 전송하세요.
kubectl apply -f .
네임스페이스 오류
해당 리소스가 아직 준비되지 않았기 때문에 "n8n" 네임스페이스를 찾을 수 없다는 오류 메시지가 표시될 수 있습니다. 같은 명령어를 다시 실행하거나, 다음 명령어로 네임스페이스 매니페스트를 먼저 적용할 수 있습니다.
kubectl apply -f namespace.yaml
DNS 설정#
n8n은 일반적으로 서브도메인에서 동작합니다. 사용 중인 제공업체에서 서브도메인용 DNS 레코드를 생성하고 n8n 서비스의 IP 주소를 가리키도록 설정하세요. n8n 서비스의 IP 주소는 사용하려는 클러스터의 Services & Ingress 메뉴 항목에서 Endpoints 열을 통해 확인할 수 있습니다.
리소스 삭제#
다음 명령어로 매니페스트가 생성한 리소스를 제거하세요.
kubectl delete -f .
다음 단계#
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.