これまでAWSに構築したk3sにLonghornを導入するところまで個人練習してみました。今回は、そこにNode-REDを導入してみます。
ソフトウェア構成
※AWS上の4インスタンスに構築したk3sクラスタ構成
Debian GNU/Linux 11
k3s version v1.23.8+k3s1 (53f2d4e7)
go version go1.17.5
Longhorn v1.3.0
Node-RED 2.2.2(latest)
マニフェストファイルを用意する
以下のようなyamlファイルを用意しました。kubectl apply
することで、Node-REDを動かすことができます。
apiVersion: v1
kind: Service
metadata:
name: nodered
namespace: default
spec:
selector:
app: nodered
ports:
- port: 1880
protocol: TCP
targetPort: 1880
nodePort: 31880
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodered
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: nodered
template:
metadata:
labels:
app: nodered
spec:
# Add
securityContext:
fsGroup: 1000
containers:
- name: nodered
image: nodered/node-red
ports:
- containerPort: 1880
# mount
volumeMounts:
- mountPath: /data
name: data
#PVC
volumes:
- name: data
persistentVolumeClaim:
claimName: data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: longhorn
(要点)
・Service、Deployment、PersistentVolumeClaimの三部分に分かれます
・DeploymentのところにvolumeMounts: volumes:の部分を記載することで、PVCが利用できるようにします。/data
以下を永続化します。
・先日の記事で、Longhornを構築してます。ですので、PersistentVolumeClaimの部分で、storageClassNameにlonghornを指定してます。
・工夫しないとユーザー権限の問題でエラーが出てしまいいます。公式にも書かれている通りコンテナ内のnode-redユーザ(デフォルトではuid=1000)が永続化ボリューム内のファイルにアクセスできるよう、権限を設定してあげる必要がある模様です。そこでこの記事を参考にDeploymentのところで、
securityContext:
fsGroup: 1000
を追加しました。
参考文献
Play with KubernetesでNode-REDを動かしてみた。
【Nutanix Karbon】Kubernetes 上に Node-Red を作ってみる