はじめに
IBM SevOne Automated Network Observabilityの製品の中に、IBM Rapid Network Automation(IRNA)というコンポーネントが含まれる様になりました。IRNAはAPI主導のローコード・ワークフローエンジンで、iPaaS(Integration Platform as a Service)のような使い勝手を想像すると分かりやすいと思います。ただし、IRNAはSaaSでは無くオンプレミスのデプロイメントとなります。
SevOneのNMSやData Insightは仮想アプライアンス(OVA)としての提供なので仮想基盤にデプロイするだけで良いのですが、IRNAはKubernetesのHelmパッケージとしての提供となっているため、VMのOSからセットアップが必要です。本稿では、VM上にK3sを構成してIRNAをセットアップしてみたので、その手順をご紹介します。
本手順は以下の環境で実施しています。
- VM: IBM Cloud VSI (Classic)
- OS: RHEL 8.8
- K3s: v1.27.6 (Single Node)
- helm: v3.13.1
- IRNA: 1.1
本手順の対象・流れ
OSのセットアップを行い、IRNAをインストールし、Web UIにアクセスするところまでとします。
必要な要件はIRNAのイメージに同梱されているInstallation Instructionsに記載がありますが、以下の通りとなっています。
- RHEL 8.8 or Ubuntu 20.0.4 LTS
- JRE 11 (インストール時のみ)
- Kubernetes 1.24.x
- Helm 3.x
その後付属のスクリプトを使用してIRNAをインストールします。(内部的にはHelmパッケージのインストール)
1. K3s環境セットアップ
K3sのドキュメントとHelmのドキュメントを参照して進めていきます。
1.1. firewall無効化
OSのfirewallが無効化されていることを確認します。本環境では無効化済みでした。
[root@irna-host ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor >
Active: inactive (dead)
Docs: man:firewalld(1)
firewallを有効のまま進める必要がある場合はドキュメントを参照。
1.2. K3sのインストール
Quick-Start Guideのワンライナーを実行します。
[root@irna-host ~]# curl -sfL https://get.k3s.io | sh -
インストールが成功したら、バージョンを確認します。
[root@irna-host ~]# kubectl version --short
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Client Version: v1.27.6+k3s1
Kustomize Version: v5.0.1
Server Version: v1.27.6+k3s1
1.3. helmのインストール
こちらも公式の手順でインストールします。
繋げてワンライナーとして、以下のコマンドを実行します。
[root@irna-host ~]# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 && chmod 700 ./get_helm.sh && bash ./get_helm.sh
インストールが成功したら、バージョンを確認します。
[root@irna-host ~]# helm version --short
v3.13.1+g3547a4b
1.4. JRE 11のインストール
Javaのインストール。単にjava
だとJava 8になってしまうので注意。
[root@irna-host ~]# yum -y install java-11
インストールが成功したら、バージョンを確認します。
[root@irna-host ~]# java -version
openjdk version "11.0.20" 2023-07-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.20.0.8-1) (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.20.0.8-1) (build 11.0.20+8-LTS, mixed mode, sharing)
1.5. K3s Traefik無効化
K3sをインストールするとデフォルトでTraefik Ingress Controllerが動作しているようで、これがExternal-IPを掴んでいます。このままでは、IRNAでデプロイされるNginx Load Balancerとかち合ってしまうため、本手順ではTraefikを無効化します。(本来はポリシーを設定すべきなのかもしれませんが。)
[root@irna-host ~]# kubectl get service -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 18m
kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 18m
kube-system metrics-server ClusterIP 10.43.240.228 <none> 443/TCP 18m
kube-system traefik LoadBalancer 10.43.5.162 "Global IP" 80:30118/TCP,443:32338/TCP 18m
まずK3sを停止します。
[root@irna-host ~]# service k3s stop
Redirecting to /bin/systemctl stop k3s.service
Systemdのサービスファイルを編集し、末尾のサービス起動オプションに--disable=traefik
を追記します。
[root@irna-host ~]# vi /etc/systemd/system/k3s.service
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target
After=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
EnvironmentFile=-/etc/default/%N
EnvironmentFile=-/etc/sysconfig/%N
EnvironmentFile=-/etc/systemd/system/k3s.service.env
KillMode=process
Delegate=yes
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=/bin/sh -xc '! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service'
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s \
- server \
+ server --disable=traefik \
リロードをしてから、K3sサービスを起動します。
[root@irna-host ~]# systemctl daemon-reload
[root@irna-host ~]# systemctl start k3s
Traefikが起動していないことを確認します。
[root@irna-host ~]# kubectl get service -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 45m
kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 45m
kube-system metrics-server ClusterIP 10.43.240.228 <none> 443/TCP 45m
2. IRNAのインストール
2.1. KUBECONFIGの設定
HelmがKUBECONFIGを使用できるように設定します。
[root@irna-host ~]# echo "KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc
[root@irna-host ~]# export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
環境変数のexportを忘れるとhelmによるインストールが失敗しますので、お忘れなく。
2.2. イメージを読み込み
RNAの製品イメージを解凍するとM0DRSEN
というディレクトリが含まれており、この中にRNAのイメージが含まれています。さらに必要なものを解凍して、イメージをローカルリポジトリに読み込みます。
RNA1.1では24のコンテナ・イメージが読み込まれました。
[root@irna-host ~]# cd M0DRSEN
[root@irna-host M0DRSEN]# gzip -dk ./RNA/images/ibm-images-rna-core-*.tar.gz
[root@irna-host M0DRSEN]# ctr -n k8s.io -a /run/k3s/containerd/containerd.sock image import ./RNA/images/ibm-images-rna-core-*.tar
2.3. インストールスクリプトの実行
install.sh
を実行します。
License AgreementにAcceptするとインストールが始まります。
[root@irna-host M0DRSEN]# ./install.sh
IBM RNA core installation is successful.
と出力されたら成功です。
2.4. インストールの確認
RNAはrna-core
ネームスペースにインストールされています。
[root@irna-host M0DRSEN]# kubectl get pods -n rna-core
NAME READY STATUS RESTARTS AGE
rna-core-addon-ansible-75f5cb8f69-gvcfs 1/1 Running 0 21m
rna-core-pliant-kv-store-677d9b6f46-lx8fm 1/1 Running 0 21m
rna-core-addon-napalm-6487f6b7d8-6fpwp 1/1 Running 0 21m
rna-core-addon-themes-7458c89cb9-x2nqg 1/1 Running 0 21m
rna-core-addon-mqws-58c8d4fc8c-p58vf 1/1 Running 0 21m
rna-core-rabbitmq-0 1/1 Running 0 21m
rna-core-pliant-proxy-7cd5685f8-sn4k9 1/1 Running 0 21m
rna-core-pliant-compiler-6d4c476c58-m7795 1/1 Running 0 21m
rna-core-addon-textfsm-6b68c5b9c-7sscr 1/1 Running 0 21m
rna-core-pliant-front-6d4fb4bbc5-pj228 1/1 Running 0 21m
rna-core-pliant-front-6d4fb4bbc5-nz2n2 1/1 Running 0 21m
rna-core-mysqldb-0 1/1 Running 0 21m
rna-core-object-storage-0 1/1 Running 0 21m
rna-core-pliant-flow-converter-66798f97b-jmbgm 1/1 Running 2 (21m ago) 21m
rna-core-pliant-stats-0 1/1 Running 0 21m
rna-core-pliant-db-migration-cccf9dbb5-fxfdk 1/1 Running 1 (20m ago) 21m
rna-core-pliant-api-5c5f9877b6-7495l 2/2 Running 1 (20m ago) 21m
rna-core-pliant-api-5c5f9877b6-lmjcd 2/2 Running 1 (20m ago) 21m
rna-core-license-add-job-p97wkfjb-mdd2l 0/1 Completed 0 21m
rna-core-configure-admin-job-k9jhz 0/1 Completed 0 21m
rna-core-configure-ui-themes-job-b5mrl 0/1 Completed 0 21m
rna-core-pliant-app-gateway-7c96c6559d-wdjmw 1/1 Running 5 (19m ago) 21m
rna-core-pliant-scheduler-657d7cb9cc-44t4c 1/1 Running 5 (18m ago) 21m
rna-core-install-integrations-hfk67kce-5knb8 0/1 Completed 0 21m
rna-core-pliant-worker-6cbd695bcd-zmsbv 1/1 Running 6 (16m ago) 21m
rna-core-pliant-worker-nodejs-remote-75d5bc896d-ckhrr 1/1 Running 6 (16m ago) 21m
rna-core-pliant-worker-6cbd695bcd-pgvqj 1/1 Running 6 (16m ago) 21m
[root@irna-host M0DRSEN]# kubectl get svc -n rna-core
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rabbitmq ClusterIP 10.43.38.9 <none> 5672/TCP 23m
pliant-compiler ClusterIP 10.43.199.4 <none> 8081/TCP 23m
pliant-front ClusterIP 10.43.160.169 <none> 8000/TCP 23m
pliant-flow-converter ClusterIP 10.43.1.187 <none> 8081/TCP 23m
addon-textfsm ClusterIP 10.43.223.120 <none> 5000/TCP 23m
pliant-db-migration ClusterIP 10.43.225.138 <none> 3000/TCP 23m
addon-ansible ClusterIP 10.43.64.122 <none> 5000/TCP 23m
pliant-api NodePort 10.43.164.47 <none> 8080:31455/TCP 23m
pliant-app-gateway ClusterIP 10.43.221.212 <none> 8083/TCP,2020/TCP 23m
addon-mqws ClusterIP 10.43.134.61 <none> 8084/TCP 23m
pliant-worker-nodejs-config ClusterIP 10.43.226.219 <none> 3000/TCP 23m
addon-themes ClusterIP 10.43.147.40 <none> 8084/TCP 23m
pliant-stats ClusterIP 10.43.157.118 <none> 8086/TCP 23m
object-storage ClusterIP 10.43.83.245 <none> 9000/TCP 23m
addon-napalm ClusterIP 10.43.122.202 <none> 5000/TCP 23m
pliant-kv-store ClusterIP 10.43.64.44 <none> 6379/TCP 23m
mysqldb ClusterIP 10.43.169.22 <none> 3306/TCP,33060/TCP 23m
pliant-proxy LoadBalancer 10.43.175.11 "Global IP" 80:32544/TCP,443:31086/TCP,5671:31253/TCP 23m
2.5. Web UI へのアクセス確認
adminユーザーのデフォルトパスワードは以下のコマンドで取得します。
[root@irna-host M0DRSEN]# kubectl get secret -n rna-core rna-core-pliant-secrets -o jsonpath='{.data.admin-password}' | base64 -d; echo ""
ブラウザでサービスIP(VMのIP)にアクセスします。
以下のログイン画面が表示されるので、先ほど取得したパスワードでログインします。
ログインが成功すると、以下のようなダッシュボードが表示されます。
まとめ
IRNAのセットアップについて、実際にやってみた手順をまとめました。
IRNAでのワークフローの作成例については、また別の機会に。
以上、少しでも参考になれば幸いです。