n8n.ioをIKS(IBM Cloud Kubernetes Service)で動かすまで

# n8n.io
[n8n.io](https://n8n.io/)は、Zapierの代替を標榜するオープンソースの自動化ツールです。

# インストール方法
[n8n.ioの公式ドキュメント](https://docs.n8n.io/#/quick-start)では、Node.js環境もしくはdockerで動かすことが書かれています。今回は、公式ドキュメントの「Start with docker」を応用し、IKS(IBM Cloud Kubernetes Service)で動かします。

## 準備するもの
- (必須) IBM Cloud ライト・アカウントを取得するためのメールアドレス
- (必須) クレジットカードまたはデビットカード << 両方ともVISAで確認済み。PAYG(従量課金制)に移行するために必要。しかし無料枠を使用する。
- (必須) コーヒーブレイク用のコーヒー
- (任意) Kubernetesの概要
- (任意) Linux仮想マシン
  - VirtualBoxやHyper-V環境下で、作業用のLinux仮想マシンを用意します。筆者は「Lubuntu」を使用しました。Lubuntuを起動し、ターミナルで作業しています。

## IKS(IBM Cloud Kubernetes Service)
### PAYGに移行
IKSには、無料プランがありますので、今回は無料プランを使用します。IKSの無料プランを使用するには、IBM CloudをPAYGへ変更する必要があります。
[IBM Cloud ライト・アカウント](https://www.ibm.com/jp-ja/cloud/lite-account)を取得した後、クレジットカードまたはデビットカードを登録し、PAYG(従量課金制)の有償アカウントに移行します。IBM CloudにはPAYGに移行することで、無料枠で使える範囲がさらに広がるという面白い特徴があります。IKSの無料プランは、広がった無料枠で使用できます。
PAYGについては、IBM Cloudの[よくある質問(FAQ)](https://www.ibm.com/jp-ja/cloud/info/cloud-jp-faq)に記載があります。

### IBM Cloud CLIのインストール
IBM Cloud CLIを使用して作業します。IBM Cloud CLIは、Windwos / Mac / Linux環境にインストールすることができます。好みの環境にインストールしてください。
[IBM Cloud CLI および Developer Tools の概説](https://cloud.ibm.com/docs/cli?topic=cloud-cli-getting-started&locale=ja#idt-prereq)

### クラスター作成
IBM Cloudにログイン後、画面左上の「三」>>「Kubernetes」の順にクリックします。
![クラスタ作成_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/ddbeea3e-f508-23d6-3d34-03ce00fbb30c.png)
Kubernetesクラスターを使用しますので、「クラスターの作成」をクリックします。
![クラスタ作成_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/9047e595-1a92-5082-335f-f721c181df4e.png)
下図の画面が表示されます。プランは「無料」、クラスターのタイプは「Kubernetes」を選びます。数分待ち、画面右端の「クラスターの作成」をクリックします。
画面下部には、初期状態で「mycluster」でクラスター名がセットされています。変更しても良いですが、ここではそのまま使用します。
![クラスタ作成_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/367dfdca-f178-4303-8807-6b8906e0b7a9.png)
下図のように「通常」と表示されるまで待ちます。凡そ30分前後ですので、コーヒーブレイクにしましょう。
![クラスタ作成_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/717ad0ac-2525-8634-efc8-c464af1d548f.png)

上図のようになりましたら、画面右端の「CLIを介した接続」をクリックしまして、表示される手順に従って、コマンドを実行します。この作業には、作業前までにIBM Cloud CLIがインストールされている必要があります。
![クラスタ作成_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/afc72adc-06af-5b22-c189-30e9679b601a.png)

# n8n.ioをIKSにデプロイ
ここまで準備ができたら、n8n.ioをIKSで動かしましょう。
ここでは、Linux環境を使用しておりますので、Linux環境以外を使用の場合は、各環境に置き換えてください。
## Pod作成
次のコマンドを実行します。

```
$ sudo nano n8nio-deployment.yaml
```
n8nio-deployment.yamlには、下記の内容を記述します。

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: n8n-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: n8n
  template:
    metadata:
      labels:
        app: n8n
    spec:
      containers:
      - name: n8n
        image: n8nio/n8n
        ports:
        - containerPort: 5678
```
Podを作成します。

```
$ kubectl create -f n8nio-deployment.yaml
```
Podの確認

```
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
n8n-deployment   1/1    1            1           78s
```
これでPodの動作を確認できました。Pod内でn8n.ioを動くのですが、この状態ではWebブラウザでn8n.ioを使用することができません。Webブラウザから呼び出せるようにするために、アクセス用のポートを割り当てます。

## 外部アクセスポート割り当て
次のコマンドを実行します。

```
$ sudo nano n8n-nodeport.yaml
```
外部からアクセスするためのポートを割り当てるためのYAMLファイルを作成します。

```
apiVersion: v1
kind: Service
metadata:
  name: n8n-deployment
spec:
  type: NodePort
  selector:
    app: n8n
  ports:
  - protocol: TCP
    port: 5678
    nodePort: 32567
```
作成したYAMLファイルを用いて、ポートを割り当てます。

```
$ kubectl create -f n8n-nodeport.yaml
```
外部アクセス用のポートが割り当てられているか確認するコマンドを実行します。

```
$ kubectl get services
```
実行結果

```
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes       ClusterIP   172.21.0.1       <none>        443/TCP          87s
n8n-deployment   NodePort    172.21.219.xxx   <none>        5678:32567/TCP   66s
```
表示されているIPアドレスは、クラスター内のIPアドレスです。次のコマンドを実行し、アクセス用のパブリックIPを取得します。

## アクセス用パブリックIPの取得とWebブラウザからアクセス
```
$ ibmcloud cs workers mycluster
```
実行結果

```
OK
ID                                                     パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン   
kube-bmo4tprd04cph515mer0-mycluster-default-00000008   173.193.92.yyy   10.76.141.217     free    normal   Ready   hou02    1.14.7_1535
```
これで「n8n.io」が稼働しているKubernetesクラスターに接続するためのパブリックIPアドレスが確認できましたので、お使いのPCのWebブラウザで、http://パブリックIPアドレス:32567 にアクセスします。「n8n.io」の画面が表示されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41414/1cb75f44-dd27-9e4a-0d6c-ae1f5b44759b.png)

# 参考記事
[Node-REDをIKS(IBM Cloud Kubernetes Service)で動かす](https://medium.com/@taiponrock/node-red%E3%82%92iks-ibm-cloud-kubernetes-service-%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99-d2ff1e785f67)