
- ライター:奈良 昌紀
- 通信事業者のデータセンターにおいてネットワーク・サーバー運用を経験した後、ネットワンシステムズに入社。帯域制御やWAN高速化製品担当を経て、2008年から仮想化関連製品を担当。現在は主にクラウド、仮想インフラの管理、自動化、ネットワーク仮想化を担当。
目次
今回は、VMwareがTech Previewとして公開しているApplication Transformer for VMware Tanzu® をご紹介します。Application Transformer for VMware Tanzuはアプリケーションモダナイゼーションを実現するためのツールであり、VMware vSphere® 環境の仮想マシンワークロードをコンテナ化する機能を持っています。
アプリケーションのモダナイゼーション
デジタルトランスフォーメーションの推進という文脈で、アプリケーションのモダナイゼーションが求められています。実際にアプリケーションのモダナイゼーションを実行に移すことはそう簡単ではありません。アプリケーションをモダナイゼーションするための方針として以下の「5つのR」があります。
- リホスト : 既存アプリケーションを修正することなく新しいプラットフォームに移行する
- リプラットフォーム : アプリケーションのアーキテクチャをそのままにし、新しいプラットフォームの機能を活用して最適化する
- リファクタ : クラウドネイティブの機能を活用するために、アプリケーションを再設計する
- リテイン : 現状維持
- リタイア : 廃止
VMware Cloud on AWSやVMware HCXを利用することで、オンプレミスのアプリケーションをクラウドにリホストすることが可能です。リホストされたアプリケーションを更に効率よく運用するには、クラウドネイティブな形に変えていくことが必要となります。
Application Transformer for VMware Tanzuとは
Application Transformer for VMware Tanzuは、アプリケーションのモダナイゼーションを実現するための支援ツールです。仮想アプライアンスとして提供されており、以下の機能によりプラットフォームを促進することで、アプリケーションのモダナイゼーションを支援します。
1
ディスカバリ
- 仮想マシンと仮想マシンコンポーネントのスキャン
- アプリケーション(200種類のカスタムシグネチャに加えユーザー定義が可能)
2
分析と推奨
- ディスカバリされたコンポーネントの依存関係をアプリケーションとして可視化
- アプリケーションに対して推奨されるモダナイゼーションの方針を提示
3
コンテナ化
- 特定のアプリケーション(TomcatもしくはWebLogic)や一般的なアプリケーションのコンテナ化
- Kubernetes向けのYAMLファイルとOCIコンテナイメージの生成
本ブログではVMware Cloud on AWS環境で仮想マシンとして起動し、別仮想マシンのMySQLデータベースを読み書きするシンプルなサンプルアプリケーションを対象として、アプリケーションのディスカバリ、分析、コンテナ化を行い、コンテナ化したアプリケーションをKubernetesクラスター上で実行する手順をご紹介します。
サンプルアプリケーションに関して
今回対象としているサンプルアプリケーションはTomcatにwarファイルとしてデプロイされており、別仮想マシンに格納されているMySQLデータベースにユーザー名とメールアドレスを登録し、登録した情報を閲覧することができる非常にシンプルなウェブアプリケーションです。
$ curl tomcat.lab.netone.co.jp:8080/sqltest/demo/add -d name=user1 -d email=user1@example.net
Saved
$ curl tomcat.lab.netone.co.jp:8080/sqltest/demo/all
[{"id":1,"name":"user1","email":"user1@example.net"}]
Application Transformer for VMware Tanzuのダウンロード
現在、Application Transformer for VMware TanzuはVMware Cloud on AWSユーザー向けにTech Previewとして提供されており、VMware Cloud ConsoleのToolsメニューからOVAをダウンロードすることが可能です。

ダウンロードしたOVAをVMware Cloud on AWS環境にデプロイすると、ブラウザで管理画面にアクセスが可能になります。

vCenterの登録とインベントリの収集
管理画面で VMware vCenter Server® としてVMware Cloud on AWSのvCenter Server を登録し、Scanを実行するとvCenter Server 内のインベントリ情報の収集が行われます。

アプリケーションのディスカバリ
仮想マシンを選択してIntrospectを実行することで、仮想マシンにインストールされているVMware Toolsを介して仮想マシン内で実行されているアプリケーションのディスカバリを行うことが可能です。ディスカバリを実行する際に、ゲストOSの管理者権限のクレデンシャルが必要になります。

コンポーネント画面で、ゲストOS内で検出されたコンポーネントの一覧を確認することが可能です。検出は事前定義されたシグネチャに基づいて実行されます。利用者は正規表現ベースのシグネチャを追加し、任意のコンポーネントを登録することも可能です。

アプリケーションの依存関係の可視化
Application Transformer for VMware Tanzuは、VMware vRealize® Network Insight™ が持つフロー情報を利用してコンポーネント間の依存関係をトポロジーとして表示することが可能です。現在はVMware Cloud on AWS環境が前提となっているため、Application TransformerにVMware vRealize® Network Insight Cloud™ を登録しDiscover Topologyを実行することで、トポロジーを生成することが可能です。

今回の環境ではTomcatをアプリケーションサーバーとして利用し、MySQLをバックエンドとするデモ用のウェブアプリケーションを実行しています。ウェブアプリケーションに対するアクセスが発生することで、tomcat-vmからmysql-vmに対するデータベース参照が記録されているため、tomcatとmysqlが同一のアプリケーションとして認識され、「App-vm-51053」が定義され両サービスが同じアプリケーションに登録されました。

アプリケーション詳細を確認すると、トポロジーが表示され、tomcatからmysqlに対して依存があることが可視化されています。

アプリケーションのコンテナ化
Application Transformer for VMware Tanzuは現在、Tomcat及びWebLogicで実行されているアプリケーションを認識してコンテナ化することが可能です。今回は、Tomcatで実行されているウェブアルリケーションをコンテナ化してみます。
コンテナ化の準備
Introspectにより仮想マシン内で実行されているTomcatがコンポーネントとして認識されています。仮想マシン内のTomcatコンポーネントを選択してDiscoverを実行すると、仮想マシン内で実行されているTomcatの構成情報やウェブアプリケーションが認識され、Containerizeの実行が可能になります。

コンテナ化の実行
Discoverによりコンテナ化の準備が完了し、Containerizeをクリックすると、アプリケーションをコンテナ化するためのウィザードが表示されます。最初に作成するコンテナイメージで利用するTomcatやJREのバージョンを指定します。(TomcatやJava等のバイナリは3rd Party Artifactとしてアップロードする必要があります。)

次にベースイメージとしてとなるコンテナイメージと、作成したコンテナイメージを格納する先のレジストリ、イメージタグを指定し、コンテナイメージのビルドを実行します。

コンテナイメージがビルドされ、レジストリにプッシュされます。

アプリケーションのコンテナ化が成功すると、tomcatコンポーネントは「Containerized」状態となり、作成されたOCI ImageとImage Artifactsが表示されます。

Image Artifactsをダウンロードすると、アーカイブ内にコンテナイメージ生成に利用したファイルや、Kubernetesクラスターにコンテナイメージをデプロイするためのマニフェストのテンプレート(Deployment.yaml)が含まれています。

コンテナ化したアプリケーションの実行
今回はVMware Cloud on AWS環境にVMware Tanzu® Kubernetes Grid™ を構成し、コンテナ化したウェブアプリケーションを実行してみます。

VMware Cloud on AWS上にVMware NSX® Advanced Load Balancer™(ALB)によりロードバランサーを構成し、Tanzu Kubernetes Gridを利用してワークロードクラスターとしてtkc1を構成しています。
$ kubectl get node NAME STATUS ROLES AGE VERSION tkc1-control-plane-b4hzc Ready control-plane,master 36h v1.21.2+vmware.1 tkc1-md-0-7cc465fd4c-2lmfw Ready36h v1.21.2+vmware.1 tkc1-md-0-7cc465fd4c-lpq8p Ready 36h v1.21.2+vmware.1 tkc1-md-0-7cc465fd4c-vwnfj Ready 36h v1.21.2+vmware.1
Image Artifactsに含まれているDeployment.yamlを以下のように修正し、ワークロードクラスターにデプロイします。
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat labels: app: tomcat spec: replicas: 3 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: harbor.lab.netone.co.jp/library/tomcat:1.0 env: - name: MYSQL_HOST value: mysql.lab.netone.co.jp - name: JAVA_HOME value: /opt/jre/jdk-11.0.12 - name: JAVA_OPTS value: '"-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027"'
上記マニフェストによりPodを作成し、クラスター外部からアクセスできるようServiceとIngressリソースを追加します。
$ kubectl apply -f tomcat.yaml deployment.apps/tomcat created $ kubectl expose deploy tomcat --port=8080 service/tomcat exposed $ kubectl create ingress tomcat --rule="tomcat.tkg.lab.netone.co.jp/*=tomcat:8080" ingress.networking.k8s.io/tomcat created $ kubectl get pod,svc,ingress NAME READY STATUS RESTARTS AGE pod/tomcat-855dc89f87-b2v97 1/1 Running 0 6m39s pod/tomcat-855dc89f87-lqkfq 1/1 Running 0 6m39s pod/tomcat-855dc89f87-rbmxr 1/1 Running 0 6m39s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 100.64.0.1443/TCP 42h service/tomcat ClusterIP 100.71.17.52 8080/TCP 53s NAME CLASS HOSTS ADDRESS PORTS AGE ingress.networking.k8s.io/tomcat tomcat.tkg.lab.netone.co.jp 192.168.2.22 80 17s
作成したIngress向けにアクセスすると、ウェブアプリケーションが起動し外部のMySQLを参照できていることが確認できました。
$ curl tomcat.tkg.lab.netone.co.jp/sqltest/demo/all [{"id":1,"name":"user1","email":"user1@example.net"},{"id":2,"name":"user2","email":"user2@example.com"}] $ curl tomcat.tkg.lab.netone.co.jp/sqltest/demo/add -d name=user3 -d email=user3@example.com Saved
$ curl tomcat.tkg.lab.netone.co.jp/sqltest/demo/all [{"id":1,"name":"user1","email":"user1@example.net"},{"id":2,"name":"user2","email":"user2@example.com"},{"id":3,"name":"user3","email":"user3@example.com"}]
WebLogicアプリケーションのコンテナ化
Application Transformer for Tanzu はこの他にもWebLogic上で実行されるアプリケーションをコンテナ化することが可能です。コンテナ化したアプリケーションはWebLogic Kubernetes Operatorを利用して実行することが可能になります。WebLogic ServerイメージやJDKのバージョンの更新やベースイメージの更新も可能です。

一般的なアプリケーションのコンテナ化
Generic Containerizeウィザードを利用すると、VM内のファイルシステムを参照し、Dockerfileをテンプレートから作成することで、TomcatやWebLogic以外のアプリケーションもコンテナ化することが可能です。

まとめ
アプリケーションのモダナイゼーションを加速するためのツールであるApplication Transformer for VMware Tanzuをご紹介しました。まだTech Previewという状態であり実装されている機能は限定的ですが、今後様々な機能が拡充され、アプリケーションのモダナイゼーションがさらに加速されることが期待されます。
※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。