1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Play with KubernetesでNode-REDを動かしてみた。

Last updated at Posted at 2022-05-14

はじめに

DockerでNode-REDを実行する方法について記事を書きました。

Play with Dockerはブラウザで使える無料のDocker実行環境で、PCにDockerをインストールする必要がありません。
Dockerはアプリケーションをコンテナに分離するために使用されますが、Kubernetesはコンテナ、スケジューラー、オーケストレーションツールで、複数のホストマシンにデプロイされた複数のコンテナを管理することによってアプリケーションをデプロイおよびスケーリングするために使用されます。
Play with Dockerと同様、Play with Kubernetesもブラウザで使える無料のコンテナ実行環境で、自分でKubernetes実行環境を構築する必要がありません。

今回はPlay with KubernetesでNode-REDを動かしてみました。

スクリーンショット 2022-05-13 22.14.27.png

メリット

ブラウザだけで使える

制限時間は4時間

Play with Dockerと同様で、制限時間は4時間です。

image_01.jpg

起動方法の違い

Play with Dockerの場合は、ホストに対してdockerコマンドで操作します。
Play with Kubernetesの場合は、ホストをMasterとWorkerに分け、Masterに対してkubectlコマンドで操作します。

スクリーンショット 2022-05-14 9.23.17.png

利用方法

Docker Hubアカウントの作成

Docker HubでDocker ID(アカウント)を作成します。

ログイン

Play with Kubernetesのサイトへアクセスします。

Loginボタンを押します。
Docker ID(アカウント)でログインします。

Screenshot 2022-05-13 at 22-05-03 Play with Kubernetesのコピー.png

Play with Kubernetesの開始

Startボタンを押します。

Screenshot 2022-05-13 at 22-17-02 Play with Kubernetesのコピー.png

インスタンスの追加

「ADD NEW INSTANCE」ボタンを3回押して、ノードを3つ追加します。

  • Node 1: Mater / Control Planeノード
  • Node 2: Workerノード1
  • Node 3: Workerノード2

image_02.jpg

image_03.jpg

Masterノードの初期化

Node 1でkubeadmコマンドを実行して、Kubernetesクラスターを初期化します。

$ kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16

image_04.jpg

kubeadmコマンドの実行が完了したら、表示された赤枠のコマンドを控えておきます。(WorkerノードのNode 2、Node 3で実行します)

例.

$ kubeadm join 192.168.0.8:6443 --token bawo53.49725gm5vm63nnzl \
    --discovery-token-ca-cert-hash sha256:5c6339d32de6af998d009d55bec50c332911684b196853a1b136981b1aa8daa7

kubectlコマンドを実行して、STATUSが「NotReady」であることを確認します。

$ kubectl get nodes

image_06.jpg

以下のコマンドを実行して、ネットワークを初期化します。

$ kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml

image_07.jpg

もう一度、kubectlコマンドを実行して、STATUSが「Ready」になったことを確認します。(STATUSが変わるまで少し時間が掛かります)

image_08.jpg

Workerノードの追加

Node 2、Node 3で、Node 1で控えたkubeadmコマンドを実行して、Workerノードを追加します。

例.

$ kubeadm join 192.168.0.8:6443 --token bawo53.49725gm5vm63nnzl \
    --discovery-token-ca-cert-hash sha256:5c6339d32de6af998d009d55bec50c332911684b196853a1b136981b1aa8daa7

image_09.jpg

image_10.jpg

Node 1でkubectlコマンドを実行して、Node 2とNode 3がkubernetesクラスターへ組み込まれたことを確認します。(STATUSが「Ready」になるまで少し時間が掛かります)

$ kubectl get nodes -o wide

image_11.jpg

Node-REDの起動方法

マニフェストファイルの用意

以下のマニフェストファイルを用意します。
(Play with Kubernetesではviコマンドを使用してマニフェストファイルを作成します)

nodered-app.yaml
apiVersion: v1
kind: Service
metadata:
  name: node-red
  labels:
    app: node-red
spec:
  type: LoadBalancer
  ports:
  - port: 1880
  selector:
    app: node-red
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-red
spec:
  replicas: 1
  selector:
    matchLabels:
      app: node-red
  template:
    metadata:
      labels:
        app: node-red
    spec:
      containers:
      - name: node-red
        image: nodered/node-red:latest-minimal
        ports:
        - containerPort: 1880
        volumeMounts:
        - name: data
          mountPath: /data
      volumes:
      - name: data
        hostPath:
          path: /tmp
          type: Directory

Githubにも置いておきます。

Play with Kubernetesではcurlコマンドを使用できますので、Githubからマニフェストファイルを取得することもできます。

$ curl -s -o nodered-app.yaml https://raw.githubusercontent.com/kitazaki/kubernetes_node-red/main/nodered-app.yaml

Node-REDの起動

Workerノード1台にNode-REDを起動します。
Masterノード (Node 1)で以下のコマンドを実行します。

$ kubectl apply -f nodered-app.yaml

確認方法

Node-REDの起動状態を確認します。
Masterノード (Node 1)で以下のコマンドを実行します。

$ kubectl get node,pod,deploy,svc -o wide

例.

$ kubectl get node,pod,deploy,svc -o wide
NAME         STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION      CONTAINER-RUNTIME
node/node1   Ready    control-plane,master   40m   v1.20.1   192.168.0.13   <none>        CentOS Linux 7 (Core)   4.4.0-210-generic   docker://20.10.1
node/node2   Ready    <none>                 39m   v1.20.1   192.168.0.12   <none>        CentOS Linux 7 (Core)   4.4.0-210-generic   docker://20.10.1

NAME                             READY   STATUS    RESTARTS   AGE     IP         NODE    NOMINATED NODE   READINESS GATES
pod/node-red-84cf54d9d5-wzsxw    1/1     Running   0          7m41s   10.5.2.3   node3   <none>           <none>

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES                            SELECTOR
deployment.apps/node-red    1/1     1            1           7m41s   node-red     nodered/node-red:latest-minimal   app=node-red

NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE     SELECTOR
service/kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          40m     <none>
service/node-red     LoadBalancer   10.108.73.11    <pending>     1880:32322/TCP   7m41s   app=node-red

image_20.jpg

URLとサービスポートを確認して、ブラウザでアクセスします。

image_20 2.jpg

例.
http://ip172-18-0-3-c9vh57lrie6000f92ep0.direct.labs.play-with-k8s.com:30965

Node-REDの停止

$ kubectl delete -f nodered-app.yaml

複数のNode-REDを起動

1つのマニフェストファイルで複数のNode-REDを起動 (レプリカを2以上に設定し、1つのサービスポートで複数のNode-REDヘ負荷分散)したり、複数のマニフェストファイルで複数のNode-REDを起動 (複数のサービスポートを割り当て)することができます。

例. 複数のマニフェストファイルで複数のNode-REDを起動した場合

$ kubectl get node,pod,deploy,svc -o wide
NAME         STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION      CONTAINER-RUNTIME
node/node1   Ready    control-plane,master   40m   v1.20.1   192.168.0.13   <none>        CentOS Linux 7 (Core)   4.4.0-210-generic   docker://20.10.1
node/node2   Ready    <none>                 39m   v1.20.1   192.168.0.12   <none>        CentOS Linux 7 (Core)   4.4.0-210-generic   docker://20.10.1
node/node3   Ready    <none>                 33m   v1.20.1   192.168.0.11   <none>        CentOS Linux 7 (Core)   4.4.0-210-generic   docker://20.10.1

NAME                             READY   STATUS    RESTARTS   AGE     IP         NODE    NOMINATED NODE   READINESS GATES
pod/node-red-84cf54d9d5-wzsxw    1/1     Running   0          7m41s   10.5.2.3   node3   <none>           <none>
pod/node-red1-cff45cfcd-cwt8t    1/1     Running   0          91s     10.5.1.4   node2   <none>           <none>
pod/node-red2-58845df784-krfr7   1/1     Running   0          9s      10.5.1.5   node2   <none>           <none>

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES                            SELECTOR
deployment.apps/node-red    1/1     1            1           7m41s   node-red     nodered/node-red:latest-minimal   app=node-red
deployment.apps/node-red1   1/1     1            1           91s     node-red     nodered/node-red:latest-minimal   app=node-red1
deployment.apps/node-red2   1/1     1            1           9s      node-red     nodered/node-red:latest-minimal   app=node-red2

NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE     SELECTOR
service/kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          40m     <none>
service/node-red     LoadBalancer   10.108.73.11    <pending>     1880:32322/TCP   7m41s   app=node-red
service/node-red1    LoadBalancer   10.108.91.117   <pending>     1880:32615/TCP   91s     app=node-red1
service/node-red2    LoadBalancer   10.101.19.118   <pending>     1880:31403/TCP   9s      app=node-red2

image_31.jpg

image_32.jpg

セッションの終了

使い終わったら「CLOSE SESSION」ボタンを押してセッションを終了させます。

image_31 2.jpg

image_40.jpg

さいごに

良きNode-REDライフを!

参考情報

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?