ページの先頭です

ページ内を移動するためのリンク
本文へ (c)

ここから本文です。

アプリケーションモダナイゼーションの実現

ライター:奈良 昌紀
通信事業者のデータセンターにおいてネットワーク・サーバー運用を経験した後、ネットワンシステムズに入社。帯域制御や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   Ready                           36h   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.1                   443/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という状態であり実装されている機能は限定的ですが、今後様々な機能が拡充され、アプリケーションのモダナイゼーションがさらに加速されることが期待されます。

※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。

RECOMMEND