Exastro IT Automation（v2.4）をインストールしてみた（Kubernetes）

# はじめに

今回は2024年5月にリリースされたExastro IT Automation（以下ITA）2.4.0のインストールを行ってみたいと思います。

# Exastro IT Automationとは

Exastro IT Automation は、情報連携のミスやチーム間の情報伝達のコストを抑えるために、システムの構成情報であるパラメータや手順(IaC)を一元的に管理する仕組みを提供します。また、CMDB 上にシステムの過去・現在・未来のパラメータ情報を格納でき、作業手順書である IaC にパラメータを連携することで IaC の再利用性を高めることができます。

# 作業環境

* Exastro IT Automation v2.4.0
* Almalinux 8.5（サーバー用）
* Helm version v3.15.1
* kubectl version v1.29.5

# 作業手順

今回は、ITA v2.4.0をAlmalinux8.5上に、オールインワン構成でオンラインインストールを行っていきます。
[コミュニティサイト](https://ita-docs.exastro.org/ja/2.4/installation/index.html)ではこの他に、Docker Compose版、Oase Agent版（Docker Compose、Kubernetes）など様々な手順が用意されています。

具体的な手順は以下のとおりです。

1.環境構築（Helmインストール、kubectlインストール、kindインストール、kindクラスタの作成）
2.ITAのインストール準備
3.ITA(v2.4.0)インストール
4.Organization (オーガナイゼーション）の作成
5.Workspace（ワークスペース）の作成
6.まとめ

### 1.環境構築

今回はAlmalinux8.5上に[ExastroSuiteコミュニティページ](https://ita.exastro.org/)にある[ITA Kubernetes - Online版](https://ita-docs.exastro.org/ja/2.4/installation/helm_on_kubernetes.html)を参考にしてインストールします。

まず上記の手順を実行するために、前提条件にもある環境の構築をしていきます。利用する一般ユーザは sudoer で、全操作権限を持っている必要があります。

#### 1-1.kubectlインストール
[kubectlのインストールはこちら](https://kubernetes.io/ja/docs/tasks/tools/)を参考にしています。

```
cat << _EOF_ > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
_EOF_
```

```
yum install -y kubectl
```


#### 1-2.Helmインストール
[Helmのインストールはこちら](https://helm.sh/ja/docs/intro/install/)を参考にしています。

```
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
```

```
chmod 700 get_helm.sh
```

```
./get_helm.sh
```


#### 1-3.kindインストール（Kubernetes）
[kindのインストールはこちら](https://kubernetes.io/ja/docs/setup/learning-environment/kind/)を参考にしています。

```
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.18.0/kind-linux-amd64
```

```
chmod +x ./kind
```

```
sudo mv ./kind /usr/local/bin/kind
```

最後にkindクラスタの作成をしていきます。

```
mkdir ~/kind
```

```
cd ~/kind/
```

```
cat << _EOF_ >config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
    - containerPort: 30080
      hostPort: 30080
      listenAddress: "0.0.0.0"
      protocol: TCP
    - containerPort: 30081
      hostPort: 30081
      listenAddress: "0.0.0.0"
      protocol: TCP
  extraMounts:
    - hostPath: /var/data
      containerPath: /var/data
_EOF_
```

```
kind create cluster --config=config.yaml
```

※ここのインストールには10分程度時間がかかりました。

Kubernetesの設定ファイルを出力
```
kind export kubeconfig
```

クラスタの確認

```
kubectl get nodes
```
→ 下記が出力されることを確認出来れば前提条件の環境構築完了です！
```
NAME                 STATUS     ROLES           AGE   VERSION
kind-control-plane   NotReady   control-plane   18s   v1.27.1
```

### 2.ITAのインストール準備

次にITAをインストールするため準備していきます。
[ITAのインストール手順はこちら](https://ita-docs.exastro.org/ja/2.4/installation/helm_on_kubernetes.html)を参考に実施していきます。

#### 2-1.Helmリポジトリの追加

Exastro システムは、以下の2つのアプリケーションから構成されています。
Exastro の全ツールは同一の Helm リポジトリ上に存在しています。

```
helm repo add exastro https://exastro-suite.github.io/exastro-helm/ --namespace exastro
```

```
helm repo update
```

#### 2-2.デフォルト設定値の取得

投入するパラメータを管理しやすくするために、下記のコマンドから共通基盤 values.yaml のデフォルト値を出力します。

```
helm show values exastro/exastro > exastro.yaml
```

以降の手順では、この exastro.yaml に対してインストールに必要なパラメータを設定していきます。
パラメータの設定は[ITA Kubernetes - Online版](https://ita-docs.exastro.org/ja/2.4/installation/helm_on_kubernetes.html)を参照してください。

```php:exastro.yaml : 369行目
# 下記に対象のIPアドレスを入力
EXTERNAL_URL: "http://xx.xx.xx.xx:30080"
EXTERNAL_URL_MNG: "http://xx.xx.xx.xx:30081" 
```

```php:exastro.yaml : 386行目
# 下記のコメントアウトを外す
  http:
    nodePort: 30080
  httpMng:
    nodePort: 30081
```

```php:exastro.yaml : 438行目
size: 20Gi    # データベースコンテナ永続ボリュームのディスク容量を必要な容量に変更
```

```php:exastro.yaml : 30行目
DB_ADMIN_PASSWORD: "password" # コンテナデータベースの root のパスワード(新規作成)
```

```php:exastro.yaml : 61行目
DB_ADMIN_PASSWORD: "password" # コンテナデータベースの root のパスワード
```

```php:exastro.yaml : 84行目
MONGO_ADMIN_USER: "root"         # OASE用データベースの管理者ユーザ(新規作成)
MONGO_ADMIN_PASSWORD: "password" # OASE用データベースの管理者ユーザのパスワード(新規作成)
```

```php:exastro.yaml : 547行目
size: 20Gi    # OASE用データベース永続ボリュームのディスク容量を必要な容量に変更します。
```

```php:exastro.yaml : 31行目
DB_USER: "itauser"        # Exastro IT Automation のアプリが使うDBユーザー
DB_PASSWORD: "password"   # Exastro IT Automation のアプリが使うDBユーザーのパスワード
```

```php:exastro.yaml : 68行目
KEYCLOAK_DB_USER: "keycloakuser"  # Keycloak が使うDBユーザー
KEYCLOAK_DB_PASSWORD: "password"  # Keycloak が使うDBユーザーのパスワード
```

```php:exastro.yaml : 62行目
DB_USER: "pfuser"         # Exastro 共通基盤が使うDBユーザー
DB_PASSWORD: "password"   # Exastro 共通基盤が使うDBユーザーのパスワード
```

```php:exastro.yaml : 66行目
SYSTEM_ADMIN: "admin"                     # Exastro システムのシステム管理者のユーザー名
SYSTEM_ADMIN_PASSWORD: "password"   # Exastro システムのシステム管理者のユーザーパスワード
```

```php:exastro.yaml : 43行目
enabled: true # 監査ログを永続ボリュームに出力する際は、こちらの設定が必要となるみたいです。
```

#### 2-3.永続ボリュームの設定

データベースのデータ永続化 (クラスタ内コンテナがある場合)、および、ファイルの永続化のために、永続ボリュームを設定する必要があります。

ストレージ利用時には2つのパターンがあります。
* マネージドディスク
* Kubernetes ノードのディレクトリ

上記の2つになります。今回はその中のKubernetes ノードのディレクトリの設定値を当てはめていきたいと思います。

[ITA Helm Chart版](https://ita-docs.exastro.org/ja/2.4/installation/helm_on_kubernetes.html)の「2.4.8. 永続ボリュームの設定」に載っているyamlファイルを作成しましょう。
詳細はマニュアルをご確認ください。

### 3.ITA(v2.4.0)インストール

#### 3-1.永続ボリュームの作成

2-3で作成したマニフェストファイルを適用し、ボリュームを作成します。

```
kubectl apply -f pv-database.yaml
```
```
kubectl apply -f pv-ita-common.yaml
```
```
kubectl apply -f pv-mongo.yaml 
```
```
kubectl apply -f pv-pf-auditlog.yaml 
```

```
kubectl get pv
```

設定したマニフェストファイルが以下の出力結果になればOKです！

```
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv-auditlog     10Gi       RWX            Retain           Available                                   26s
pv-database     20Gi       RWO            Retain           Available                                   19s
pv-gitlab       20Gi       RWX            Retain           Available                                   5s
pv-ita-common   10Gi       RWX            Retain           Available                                   9s
pv-mongo        20Gi       RWO            Retain           Available                                   5s
```

#### 3-2.インストール

インストール時にサービスの公開方法によって、アクセス方法が異なります。
Ingress, LoadBalancer, NodePort の3つのパターンがありますが、今回はNodePortのパターンでインストールを実施していきます。

まずはHelmコマンドを使ってKubernetes環境にインストールを実施していきます。

```
helm upgrade exastro exastro/exastro --install \
  --namespace exastro --create-namespace \
  --values exastro.yaml
```

次にインストール状況確認をしていきます。
コマンドラインから以下のコマンドを入力して、インストール（サービス起動）が完了していることを確認します。

```
kubectl get po --namespace exastro
```
※正常に起動するまで数十分かかりました。

次に暗号キーのバックアップを取っていきます。
下記で取得した暗号化キーをバックアップして、適切に保管しなければなりません。必ずメモを取っておきましょう！

```
kubectl get secret ita-secret-ita-global --namespace exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
```

```
kubectl get secret platform-secret-pf-global --namespace exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
```

次に接続確認を行っていきます。
3-2で実行した helm install の出力結果のコマンドをコンソール上に貼り付けて実行します。

```
export NODE_SVC_PORT=$(kubectl get services platform-auth --namespace exastro -o jsonpath="{.spec.ports[0].nodePort}")
export NODE_MGT_PORT=$(kubectl get services platform-auth --namespace exastro -o jsonpath="{.spec.ports[1].nodePort}")
export NODE_IP=$(kubectl get nodes --namespace exastro -o jsonpath="{.items[0].status.addresses[0].address}")
# *************************
# * Administrator Console *
# *************************
echo http://$NODE_IP:$NODE_MGT_PORT/auth/

# *************************
# * Service Console       *
# *************************
echo http://$NODE_IP:$NODE_SVC_PORT
```

出力された、Administrator Console の URL にアクセスします。
IPアドレスは自分の環境に合わせて入力しましょう。

URLにアクセスすると画像のようにログイン画面にいくと思います。
こちらにシステム管理者の作成で作成したユーザーとパスワードを入力してログインします。
![ログイン画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798393/32071a32-447e-14cd-e568-2841088eda87.png)


### 4.Organization (オーガナイゼーション)の作成

それではログインが確認できたら、Organization (オーガナイゼーション) の作成を行っていきましょう。
[オーガナイゼーションの作成はこちら](https://ita-docs.exastro.org/ja/2.4/manuals/platform_management/organization.html)を参考に実施していきます。
オーガナイゼーションの作成方法には、下記の2通りの方法があります。
* 画面操作
* Rest APIによる実行

上記の2つになります。今回はその中でも簡単な画面操作での作成をしていきましょう。

まずは、オーガナイゼーション管理→オーガナイゼーション一覧→作成ボタンを選択します。
![オーガナイゼーション一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798393/6d4c0acb-0763-7681-f685-2d08bf1bec09.png)


そうすると、以下の画像のようにオーガナイゼーションの作成に必要な情報を入力する画面が出てきますので、必要な項目を入力していきましょう。
![オーガナイゼーション作成項目入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798393/9735a5b0-ec3f-83ec-3f0f-29e8aba7fbb9.png)


入力を終えたら登録ボタンを選択し、オーガナイゼーションの作成を完了しましょう。
オーガナイゼーションへのアクセスは以下の書式を利用します。
```
http[s]://{Exastro Platform の管理用 URL}:{Exastro Platform の管理用ポート}/{オーガナイゼーションID}/platform/
```

### 5.Workspace（ワークスペース）の作成

最後にワークスペースの作成をしていきましょう。
[ワークスペースの作成はこちら](https://ita-docs.exastro.org/ja/2.4/manuals/organization_management/workspace.html)を参考に実施していきます。

まずは作成したオーガナイゼーションに管理者でログインします。
ログインするとワークスペース一覧という画面に飛びますので、こちらからワークスペースの作成をしていきましょう。
![ワークスペース一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798393/65d43ff3-4ad9-5bd1-7a89-562f8d3dc6b0.png)


作成ボタンを押すと、以下の画像のようにワークスペースの作成に必要な情報を入力する画面が出てきますので、必要な項目を入力していきましょう。
![ワークスペース作成項目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798393/71d09cff-9700-4812-2616-aa0cbfc23782.png)


ワークスペースの作成が完了したら、ワークスペース一覧に戻って今作成したワークスペースを選択しましょう。選択したらITAの画面にいくはずです！無事準備完了！


### 6.まとめ
今回はHelm Chart版でのITA（v2.4.0）のインストールからITAを実際に使えるようになるまでの手順を実施してみました。次は実際にITAの各モードを触っていきたいと思います。