VMware Data Services Managerを使ってみる

# 概要

VMware Data Services Manager (以降DSM) をvSphere上に構築してみたため、手順を備忘として残します。
一応過程でMinIOが必要だったため、その手順も書いておきます。

## 本記事の対象
- VMware Data Services Managerを使ってみたい方
- DB展開を楽にしたい方
## VMware Data Services Managerとは

VMwareが提供するデータベース管理を楽にするためのツールになります。
データベースの展開からバックアップ、ログ出し等をGUIから行えるようになる感じです。
仮想アプライアンスとして提供されていて、vSphereと連携を行って利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/cb3bfd22-7c48-3b40-c9fb-26c6095800d4.png)


[画像引用元](https://docs.vmware.com/en/VMware-Data-Services-Manager/2.0/data-services-manager/GUID-concepts-architecture.html)

## 構築手順の流れ

以下手順で行っています。

- MinIOの構築
- VMware Data Services Managerの展開


## 今回の環境前提
- vSphere8.0
- 分散ポートグループは用意済み
- Broadcom Support Portal のアカウント作成済み (SIDは不要)

# MinIOの構築

DSMではオブジェクトストレージとしてS3 or S3互換ストレージが必要となります。
今回はS3互換ストレージのMinIOを用意していこうと思います。
流れは以下となります。

1. Ubuntuマシンの準備
2. minioの展開
3. TLS化
4. アクセスキーの作成


## Ubuntuマシンの準備

MinIOを今回はUbuntuのサービスとして用意します。
スペックは以下で仮想マシンを構築しておきます。

| 項目    | スペック  |
| ----- | ----- |
| CPU   | 2コア   |
| メモリ   | 4GB   |
| ストレージ | 200GB |

また、今回はminio.stjam.homeという名前で名前解決できるように、DNSにレコードも追加しています。


## MinIOの展開

では用意したUbuntuにMinIOを展開していきます。
まずは公式ドキュメント通りにパッケージをインストールします。

```bash
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240710184149.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
```

そうしたら、以下ディレクトリにサービスファイルがあるため、必要に応じて編集します。
今回はそのまま使います。
```bash
sudo vi /usr/lib/systemd/system/minio.service
```


```ini: /usr/lib/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
Type=notify

WorkingDirectory=/usr/local

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576

# Turn-off memory accounting by systemd, which is buggy.
MemoryAccounting=no

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutSec=infinity

SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})
```

続いてMinIOに格納されるファイルを配置するディレクトリを用意して、操作用のユーザーも作成しておきます。
今回はディレクトリは”/var/minio”、ユーザーはminio-userを用意しています。

```bash
sudo mkdir /var/minio
sudo groupadd -r minio-user
sudo useradd -M -r -g minio-user minio-user
sudo chown minio-user:minio-user /var/minio
```

続いて環境変数ファイルを編集します。
格納場所はサービスファイルにて指定されており、今回は”/etc/default/minio”になります。

```bash
sudo vi /etc/default/minio
```

ログインするためのユーザー名やパスワード、ファイルの格納先などを指定しておきます。

```sh: /etc/default/minio
MINIO_ROOT_USER=<任意のユーザー名>
MINIO_ROOT_PASSWORD=<任意のパスワード>
MINIO_VOLUMES="/var/minio"
MINIO_OPTS="--console-address :9001"
```

ここまでできたら一旦サービスを起動できる状態になりましたので、起動していきます。

```bash
sudo systemctl start minio.service
sudo systemctl status minio.service
```

```bash
● minio.service - MinIO
     Loaded: loaded (/usr/lib/systemd/system/minio.service; disabled; preset: enabled)
     Active: active (running) since Sat 2024-07-13 08:19:16 UTC; 4s ago
       Docs: https://docs.min.io
   Main PID: 2718 (minio)
      Tasks: 7
        CPU: 400ms
     CGroup: /system.slice/minio.service
             └─2718 /usr/local/bin/minio server --console-address :9001 /var/minio
```

`http://IPアドレス:9001`にアクセスして、指定したユーザー情報でログインができたらOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/90cca6f7-f49c-fd1e-213a-8607a7a83da8.png)


再起動後もサービスを起動するようにしておきます。

```bash
sudo systemctl enable minio.service
```

[公式インストール手順](https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html)


## TLS化

続いて自己証明書を用いてのTLS化を行っていきます。
DSMではTLS化をしていないと、登録する際に弾かれてしまうため、必要となります。

まず自己証明書作成用の設定ファイルを用意します。
基本はCNとSANが設定されていれば問題ないかなとは思います。

```ini: minio-ssl.cnf
[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
x509_extensions    = v3_req
prompt             = no
[ req_distinguished_name ]
C  = JP
CN = minio.stjam.home
[ req_ext ]
subjectAltName = @alt_names
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1   = minio.stjam.home
```

それでは作成した設定ファイルを用いて証明書の作成を以下コマンドにて実行します。

```bash
openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out public.crt -config minio-ssl.cnf -extensions v3_req
```


作成できたら、証明書を任意の場所に格納して権限を通しておきます。
今回は/opt/minio/certsに格納しています。

```bash
sudo mkdir -p /opt/minio/certs
sudo mv public.crt /opt/minio/certs/public.crt
sudo mv private.key /opt/minio/certs/private.key
sudo chown minio-user:minio-user /opt/minio/certs
sudo chown minio-user:minio-user /opt/minio/certs/*
```

最後に証明書を用いるように、MinIOの環境変数ファイルを編集しておきます。
```bash
sudo vi /etc/default/minio
```

```sh: /etc/default/minio
MINIO_OPTS="--console-address :9001 --certs-dir /opt/minio/certs"
```

サービスを再起動します。

```bash
sudo systemctl restart minio
```

今度はhttpsにしてアクセスを行い、問題なくアクセスできたら成功となります。
例: `https://ドメイン名:9001`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/2e410301-e499-7a8c-ae94-428f9aa080bc.png)



## バケット作成

続いて必要なバケットの作成を行っておきます。
DSMの公式ドキュメントの要件に従い、以下4つを作成しておきます。

- dsm-provider-repo
- dsm-provider-log
- dsm-provider-bk
- dsm-db-bk

これらのバケットは後ほどDSMに登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/b4c17865-cf9b-91dd-6950-432bd3a93fa7.png)

[DSMのオブジェクトストレージの要件](https://docs.vmware.com/en/VMware-Data-Services-Manager/2.0/data-services-manager/GUID-vsphere-requirements.html)


## アクセスキーの作成

続いてDSMにてバケットを利用するためのアクセスキーを作成します。
MinIOのコンソールからアクセスキーは作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/2a88f7dd-332d-4df9-f170-1ccb9b5e0095.png)



今回は必要な権限だけ割り当てるため、Policyを以下に変更しています。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::dsm-provider-repo",
                "arn:aws:s3:::dsm-provider-log",
                "arn:aws:s3:::dsm-provider-bk",
                "arn:aws:s3:::dsm-db-bk"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListMultipartUploadParts",
                "s3:PutObject",
                "s3:AbortMultipartUpload"
            ],
            "Resource": [
                "arn:aws:s3:::dsm-provider-repo/*",
                "arn:aws:s3:::dsm-provider-log/*",
                "arn:aws:s3:::dsm-provider-bk/*",
                "arn:aws:s3:::dsm-db-bk/*"
            ]
        }
    ]
}
```

作成後は一度だけ表示されるSercret Keyをメモするか、ダウンロードしておきます。

以上でMinIOの準備は完了となります。

# VMware Data Services Managerの展開

それではDSMの作成に移ります。
手順としては以下となります。

- 必要資材のダウンロード / 展開
- Permission の作成
- Infrastructure Policy の作成
- バケットの追加
- Data Services の有効化
- Database の作成


## 必要資材のダウンロード / 展開

まず必要資材のダウンロードと展開を行っていきます。

Broadcom Support Portalにアクセスし、Tanzuの画面からVMware Data Services Mangerを見つけて開きます。

開いたらバージョンを選び、以下2つをダウンロードしておきます。
(本記事では2.0.3を利用)

- Provider Virtual Appliance
    - ファイル名: dsm-va-2.0.3.4185-23780592.ova
- Air-gap Environment Repository
    - air_gap_deliverable .zip
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/9bd16b10-86e4-c39d-8fc8-88edcf295e0e.png)



ダウンロードが完了したらまずovaを展開していきます。
ただしvSphereのクライアントプラグインとして展開を行います。

vSphereコンソールにて[管理]-[クライアントプラグイン]を開き、追加を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/62c53c09-6999-3c82-796b-57ec152b168e.png)



するとOVAを展開するのと同じような画面が開かれるため、先程ダウンロードしたovaにて設定を行いインストールを行います、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/f920a5dd-e04c-5770-fb85-d77e10c54a93.png)



完了後ページをリロードし、インベントリの最上位 (vCenter)のオブジェクトを選択して、構成を選択します。
するとData Services Managerという項目が追加されていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/6011085d-2267-f3e1-5b8f-4a0e1184dddf.png)



続いてエアギャップ向けに提供されているリポジトリのファイルを展開していきます。
air_gap_deliverable .zipを解答すると、以下3つのフォルダになります。

- dsm-control-plane
- dsm-data-plane
- manifests

このフォルダをすべてMinIOの”dsm-provider-repo”バケットにアップロードしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/f2d2c47f-6ba4-4346-dc9d-172f42a68c0e.png)



以上で資材の準備は完了となります。

[エアギャップ環境の手順](https://docs.vmware.com/en/VMware-Data-Services-Manager/2.0/data-services-manager/GUID-provider-manual_provrepo.html)


## Permissionの作成

DSMのコンソールにアクセスするためにPermissionを作成する必要があります。
vSphereのコンソールに追加されたDSMの中にあるPermissionsを選び、作成を行っておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/07416f81-120d-5cfe-2313-12c09ae7d98d.png)



作成後はACCESS DATA SERVICES MANAGERをクリックするとDSMのログイン画面に遷移します。
先ほど作成したPermissionで無事アクセスできたらOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/82e3d3db-456f-a9c3-7de5-4af6ead3d5fb.png)


## Infrastructure Policy の作成

DSMにてDatabaseを作成する際にIPアドレスやvSphereの展開先フォルダやストレージポリシーなどを指定するためにInfrastructure Policyを作成していきます。

vSphereコンソールのDSMの項目にて、まずIPプールを作成します。
最低2つあれば、このあとDatabaseは展開できるはずですが、今回は余裕をみて10個指定しておいてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/8ac9887a-4711-10af-9430-b17104e8538a.png)



続いてVMクラスの作成を行います。
なお、デフォルトで3つ用意されており、特に細かい調整が不要であればそのまま使えます。
今回は作成せずに進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/70efd9b4-828a-dc4a-4bbc-978003267a85.png)




それでは、作成したIPプールやVMクラスを用いて、Infrastructure Policyを作成していきます。
今回は以下内容で作成しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/da325100-b534-c883-91ea-3f0d5216eec1.png)



作成後、DSMのコンソールを確認すると、Policyが追加されていることが確認できます。
(画像は2つありますが、1個用意すれば大丈夫です)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/effa7e25-bcf6-65e2-742b-ff5251916582.png)


## バケットの追加

続いてDSMにMinIOで用意したバケットの追加を行います。
DSMコンソールのStorage Systemから設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/6d6c53ba-de29-9edb-36bf-badbb31d2594.png)



設定の際には以下項目の入力が求められます。
それぞれ用意したアクセスキーなどを用いて入力しておきます。
※Storage URLはhttpsで、ポート番号を9000を指定します (例: https://<ドメイン名>:9000)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/adc627c0-028d-9fb0-b1ac-46daa39da5a4.png)



無事4つすべて追加でき、以下のようにComplitedにステータスが変われば完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/4408c7a8-385c-af4a-5e36-58b662c41df7.png)



## Data Services の有効化

ここまで準備が完了したら、Data Servicesの有効化ができるようになっているはずです。
DSMコンソールのVersion & UpgradeのData Servicesを開き、表示された項目の3点リーダーをクリックしてEnableを選びます。

少し時間がかかりますが、Enabledに変わります。
※裏側にてMinIOのdsm-provider-repoバケットにリポジトリを展開されており、確認するとdockerというフォルダが増えていることが確認できると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/e7acd80c-cb15-31e5-e743-d78a0ebab8e7.png)





## Database の作成

それではいよいよDatabaseの作成を行っていきます。
今回はPostgresを展開しておきます。
Create Databaseを選択し、必要な項目を入力していくとそのまま作成プロセスが動作します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/21bc20e6-1288-03f0-0f95-409ec65804c2.png)



しばらくすると、DatabaseがReadyになり、利用可能となります。
※途中でエラーが表示されたりしますが、一時的なものが多いのですぐに削除等はしないことを推奨

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/b99279ca-b5d8-250e-a485-2f54a0af0715.png)



Databaseをクリックすると作成されたDBの詳細を確認できます。
COPY CONNECTION STRINGというところをクリックすると、Databaseへの接続に必要な情報を取得できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/944d381b-ceb7-30cd-e93b-953ab1d6112b.png)




以下のようなものがクリップボードにコピーされます。

```plaintext
postgres://pgadmin:<パスワード>@<IPアドレス>:5432/posgre-01
```

それではこの情報を用いて、PgAdminを用いて、動作確認をしてみます。
簡易的なSQLを実行して、無事動作すればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/950b2444-4981-a1aa-bfb8-d62d275a55c6.png)


# まとめ

今回はDSMを構築してみました。
実はMinIO自体も構築が初めてだったため、結構勉強になりました。
DSM自体は最近VMwareのプロダクトで使わたりするケースもあったりする印象なので、また使う機会があったらいいなという印象です。

## おまけ

今回エアギャップ版で展開を行いましたが、本来はTanzu API Tokenを用いてデータベーステンプレート等を取得することもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/7e49442f-bf1c-d740-20c4-e471519e534c.png)

しかし公式側で直近移行等が実施されている影響か本記事執筆段階では利用できませんでした。。
（Tokenは認証されるが、リポジトリにアクセスできていない雰囲気）

他の方でも同事象はおられました。
https://cormachogan.com/2024/07/02/data-services-manager-air-gap-deployment-steps/

今後復旧したらこちらの方法でも可能という認識だけ持っておきます。。


## 参考にしたサイト

https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html

https://docs.vmware.com/en/VMware-Data-Services-Manager/2.0/data-services-manager/GUID-index.html

https://cormachogan.com/2024/07/02/data-services-manager-air-gap-deployment-steps/