- ナレッジセンター
- 匠コラム
Edge Cloudを実現するVolterra
- 匠コラム
- プロダクト
- IOT
ビジネス開発本部 第1応用技術部
第2チーム
奈良 昌紀
はじめに
クラウドの利用促進によりアプリケーションはデータセンターからクラウドに広がり、現在はDigital TransformationやIoT等の活用により大量のデータを端末の近く(Edge)で処理するエッジコンピューティングが広がりつつあります。5Gの活用が期待される中で、アプリケーションのレスポンスを向上させるためにMEC(Multi-access Edge Computing)と呼ばれる規格の標準化も進んでいます。
一方でコンテナの利活用が広く進み、Kubernertesがコンテナオーケストレータとして大きな注目を集めています。2018年のKubeConで米国のファーストフードチェーンのChick-fil-A社がEdge向けのKubernetesのユースケースとして注目すべき事例を発表しています。Chick-fil-A社は米国内に2,000の店舗があり、店舗内の冷蔵庫やフライヤーをIoTデバイス化し情報を収集しています。これらの情報を収集するために、各店舗内にIntel NUC(Next Unit of Computing)で構成される小さなKubernetesクラスターを置き、店舗のPOSシステムやデータ収集に利用されるアプリケーションをコンテナとして管理するというものです。Kubernetesではマニフェストファイルと呼ばれる定義ファイルで宣言的にアプリケーションを定義することが可能です。定義ファイルをgitリポジトリ上で管理し、リポジトリに変更が発生した場合に、各店舗のKubernetesクラスター内で起動するエージェントが変更を検出して、マニフェストの定義内容を反映するというものです。これにより2,000ものKubernetesクラスターでアプリケーションを効率よく管理することを可能にしています。
Volterraとは
Volterra社は2017年に創業した米国のスタートアップ企業です。Volterra社のサービスはプラットフォームとしてKubernetesを提供するVoltStackと、VoltStack間の接続やネットワークサービスを提供するVoltMeshで構成されます。サービスとして提供される管理画面(Volterra Console)により各拠点に存在するVoltStackを管理し、VoltMeshのネットワークを構成することができます。これらの機能により、複数拠点に分散したアプリケーションの効率的な管理と、分散したアプリケーション間のネットワークを柔軟に構成することで、Chick-fil-A社が実現しているようなEdge Cloudを可能にします。

VoltStack
VoltStackは利用者の拠点で起動するEdgeデバイスであり、Customer Edge(CE)であるVolterra Node上で動作します。VoltStackはKubernetesクラスターとして機能するため、セットアップする方の役割・スキルによって構築自体が困難なケースが多々あります。Volterra Nodeのインストールは非常に簡素化されており、Volterra Console上で作成したTokenを指定し、ノードのIPアドレスを構成するだけでVoltStackの構成が可能です。CEはvSphere用の仮想アプライアンス、Azure及びAWS上のマシンイメージとしても提供されており、ベアメタル環境へインストールすることも可能です。(現時点で対応しているベアメタルサーバーは限定されていますが、今後拡張される見込みです。)Volterra Nodeの起動が完了すると、”Pending Registration”の状態でVolterra Console上に表示されます。Approveするとクラスター内部でKubernetesクラスターとして構成され、Volterraが必要とする機能が自動的に構成され、しばらくするとクラスターとして管理可能になります。
Volterraは複数のVoltStack(Kubernetesクラスター)の管理を簡素化するために、KubernetesクラスターにまたがるVirtual Kubernetes(vk8s)と呼ばれる機能を提供しています。vk8sを利用すると、各VoltStackに複数の論理的なクラスター(ネームスペース)を構成し、ネームスペース内でVirtual Siteという論理的なリソースグループを作成して、マニフェストのannotationを利用してコンテナを柔軟に配置することが可能です。以下の例では2つの拠点にVoltStack配置し、Volterra Console上で2つのネームスペースを作成し一元的に管理しています。ネームスペースns1でapp1のレプリカ数を3としてDeploymentを作成すると、それぞれのCE上でapp1のPodが3つずつ起動します。同様にns2ではレプリカ数を2としてapp2 Deploymentを作成しているため、各VoltStackでPodが2つずつ起動します。
また、利用者はVolterra社が世界各地のリージョンで運用するRegional Edge(RE)上でアプリケーションを起動することも可能です。Volterra社のインフラを利用する形となるため、Podのサイズと利用時間に応じて課金が発生します。
VoltMesh
VoltMeshはVoltStack上に配置したコンテナ間の通信やコンテナに対する外部からのアクセスを可能にするネットワークサービスです。Volterra社は世界各地にリージョンを持ち、各リージョンでREを運用しています。これらのREはVolterra社が運用するバックボーンネットワークで接続されており、利用者のCEはREに対してIPsec接続することでVolterraのバックボーンネットワークを介して通信することが可能です。CEやRE上のアプリケーションは、VoltMeshとして利用できる以下のリソースによって通信を制御することが可能です。
- Endpoint : Edge上のPodやEdgeからアクセス可能なVMやアプリケーション等を指定。
- Cluster : Endpointのグループ。ロードバランサーを利用した負荷分散方式を指定可能。
- Route : 様々な条件に応じて、アプリケーショントラフィックをClusterにルーティングするための条件を指定する。
- Advertise Policy : Service/ApplicationがListenするポートを指定し、Virtual Hostを公開する場所を制御する。
- Virtual Host : アプリケーションに対するリバースProxyとしてトラフィックを終端する。Advertise Policyにより、Virtual Hostを作成するCEを選択し、Routeを指定してトラフィックのルーティングを設定する。
例えば、2種類のコンテナで構成されるアプリケーションを2つの拠点のCE上にそれぞれPod配置し、CE1にあるPod1がバックエンドサービスとしてCE2のPod2を利用している場合、以下のようにKubernetesのリソースとVoltMeshのリソースを組み合わせて、異なるCE上のPod間通信を可能にし、Pod1をサービスとしてCE1上で公開することが可能です。

また、VoltStack上で機能していないアプリケーションをEndpointとして登録することでVoltStack内からアクセスすることも可能です。既存のKubernetesがEdgeロケーションに存在する場合は、既存KubernetesのService(type: NodePort)をEndpointとして登録することで、Amazon EKSやAzureのAKS等、VoltStackの外部に存在するサービスにアクセスすることも可能です。
ユースケース
今回は複数の拠点で収集されるデータを、データセンターで一元的に保存・可視化する環境でVolterraをどの様に利用できるのかをご紹介します。
各拠点のデバイスが生成するデータをデータセンターで収集・可視化する場合、各拠点とデータセンターにCEを配置し、拠点のCE上で起動するデータ収集用のコンテナが、データセンターにあるデータ分析システムにデータを送ることでデータの収集と可視化を実現することができます。各拠点内で収集するIoTデバイスの種類やデータフォーマットが変更される場合に、拠点のデータ収集用コンテナイメージをバージョンアップすることで、速やかに新しいデータに対応することが可能になります。また、各拠点とデータセンター間の通信はVoltMeshによりセキュアに構成することが可能です。今回はElasticsearch社のElastic Stack(Elasticsearch、Logstash、Filebeat、Kibana)を利用して各拠点のデータをデータセンターで一元的に可視化するというシナリオで環境を構成しました。
Virtual Siteの構成
Volterraで管理される全てのCEはSiteとしてVolterra Consoleに登録されます。各Siteには任意のラベルを付与し、このラベルを利用してVirtual SiteというSiteのグループを構成することが可能です。今回はデータセンターとして機能する東京のCEにedge-vsite: demo-tokyo、拠点として機能する大阪、沖縄のCEにはsite-type: branchというラベルを付与し、各ラベルを利用して2つのVirtual Siteを作成し、これらのVirtual Siteをvk8sに登録しています。(札幌拠点のCEは後ほど追加します)
|
データセンターのコンポーネント
東京データセンターではデータを格納するためのElasticsearchと、Elasticsearchに格納されたデータを可視化するためのKibanaが仮想マシン上で起動しています。データセンター内のCEは各拠点から送られてくるデータを整形し、Elasticsearchに登録するためのLogstashが起動しています。LogstashはCEの外部にあるElasticsearchにデータを登録しますが、ElasticsearchをVoltMeshのEndpoint、Virtual Host(elasticsearch.nos-demo)として登録することで、CE上のLogstash Podから名前を指定してアクセスすることが可能になります。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: logstash name: logstash annotations: ves.io/virtual-sites: nos-demo/demo-tokyo ves.io/workload-flavor: large spec: replicas: 1 selector: matchLabels: app: logstash template: metadata: labels: app: logstash spec: containers: - image: masanara/logstash:0.3 name: logstash env: - name: ESHOST value: "elasticsearch.nos-demo"
今回の例ではLogstash Podが環境変数(ESHOST)として指定したelasticsearch.nos-demoという名前で外部のElasticsearchにアクセスしています。尚、metadata.annotationsでves.io/virtual-sites: nos-demo/demo-tokyoとしてVirtual Siteとしてdemo-tokyoを指定しているため、Logstash Podは東京データセンターのCEにだけデプロイされます。
各拠点のコンポーネント
各拠点ではデバイスが生成するメトリックを収集し、データセンターのLogstashにデータを転送するための機能としてFilebeatを配置しています。Filebeatは軽量なログ収集エージェントです。今回はFilebeatのInputプラグインとしてTCPソケットを利用し、デバイスが生成した各種メトリックをTCPでFilebeatにデータ転送しています。Filebeatは受信したJSON形式のデータをデータセンターにあるLogstashに転送します。拠点からデータセンターのLogstashにアクセスするために必要な通信はVoltMeshにより提供されています。データセンターのCE上に構成したLogstash 向けのService(ClusterIP)をEndpointとして登録し、Virtual Server(logstash.nos-demo)を構成し、Advertise Policyとして拠点のCEにばら撒くことで、CE上のFilebeatは環境変数LOGSTASH_HOSTに指定したVirtual Serverへのアクセスが可能になります。Filebeatは以下のようなマニフェストで構成しています。metadata.annotationsでves.io/virtual-sites: nos-demo/demo-branchとしてVirtual Siteとしてdemo-branchを指定しているため、Filebeat Podは大阪、沖縄に配置されたCEにだけデプロイされます。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: filebeat-sensor name: filebeat-sensor annotations: ves.io/virtual-sites: nos-demo/demo-branch ves.io/workload-flavor: medium namespace: nos-demo spec: replicas: 1 selector: matchLabels: app: filebeat-sensor template: metadata: labels: app: filebeat-sensor spec: containers: - image: masanara/filebeat-sensor:1.0 name: filebeat env: - name: LOGSTASH_HOST value: "logstash.nos-demo" readinessProbe: httpGet: path: / port: 5066
拠点におけるデータの加工
Podはfilebeat-sensor:1.0をコンテナイメージとして利用しています。このコンテナイメージは以下のようなFilebeatの構成となっており、拠点で収集したデータをそのままデータセンターのLogstashに転送しています。
filebeat.inputs: - type: tcp max_message_size: 10MiB host: "0.0.0.0:9000" http.enabled: true http.host: "0.0.0.0" output.logstash: hosts: ["${LOGSTASH_HOST}:5045"]
この状態ではElasticsearchに登録されるデータはどの拠点から送信されてきたメトリックなのか識別することができません。
そこで、以下のようにFilebeatの設定を変更してコンテナイメージfilebeat-sensor:1.1を作成します。各拠点で収集したデータにbranch: ${EDGE_VSITE}というフィールドを追加して、データセンターのLogstashに転送します。VolterraはCE上で起動するPodに対してCEに付与されたラベル情報を環境変数として渡すことが可能です。今回は各CEにラベルとして構成されている、edge-vsite: demo-osakaをサイト固有の情報としてFilebeatでメトリックデータに追加します。
filebeat.inputs: - type: tcp max_message_size: 10MiB host: "0.0.0.0:9000" http.enabled: true http.host: "0.0.0.0" processors: - add_fields: target: '' fields: branch: "${EDGE_VSITE}" output.logstash: hosts: ["${LOGSTASH_HOST}:5045"]
この新しいコンテナイメージ(filebeat-sensor:1.1)をDeploymentに適用することで、データに新しい情報が追加され、各拠点毎のメトリックの可視化が可能になります。
拠点の追加
前述の通りVoltStackは簡単にCEとして構成し、Volterra Consoleに登録することが可能です。CEを新しい拠点として利用するには、CEにsite-type: branchというラベルを追加します。ラベルを追加すると、CEは自動的にVirtual Site(demo-branch)に追加され、demo-branch向けのDeploymentであるfilebeat-sensorは追加されたCE上でFilebeat Podを起動し、Logstashに対してメトリックの転送が開始されます。
|
メトリックの転送が開始されると、Kibana上でも札幌に配置されたCEのメトリックを確認することができます。
拠点におけるデータのフィルタリング
拠点ではHumidity、Flow、Sound、Temperatureの4種類のメトリックを収集しています。Soundデータが不要になった場合、Filebeatの設定を以下のように変更することで、各拠点のFilebeatでSoundに関するメトリックを破棄することが可能です。
filebeat.inputs: - type: tcp max_message_size: 10MiB host: "0.0.0.0:9000" http.enabled: true http.host: "0.0.0.0" processors: - drop_event: when: regexp: message: 'Sound' - add_fields: target: '' fields: branch: "${EDGE_VSITE}" output.logstash: hosts: ["${LOGSTASH_HOST}:5045"]
上記のFilebeatの設定を利用するコンテナイメージをfilebeat-sensor:1.2として作成し、Deploymentのコンテナイメージを更新すると、Soundに関するメトリックの送信が停止するため、Elasticsearch上のデータ数が減少し、Soundメトリックに関するグラフもプロットが停止しています。
まとめ
Volterraが提供するVoltStackにより複数のロケーションに配置したKubernetesクラスターの運用を簡素化し、VoltMeshにより世界中のリージョンに配置されたRegional Edgeで構成されるVolterraのバックボーンネットワークを利用してVoltStackを論理的に接続することが可能です。これらの機能を利用して、Edgeに対するアプリケーションを迅速に配信し、アプリケーションが必要とするネットワークを迅速に構成することが可能になります。また、今回はご説明できていませんが、Volterraはアプリケーションセキュリティに関してもWAFやPod間通信制御などの機能を持っており、Edge Cloud内でアプリケーションをセキュアに実行することが可能です。Volterraが提供するKubernetesとバックボーンネットワークの組み合わせが実現するEdge Cloudは今回ご紹介した以外のユースケースでも活用することができます。また、今回ご紹介したユースケースは弊社内の環境を利用して実際に動作している様子をご覧いただくことも可能です。Edge Cloudを検討されているお客様はぜひ担当営業までご相談ください。
Webからのお問い合わせはこちらから
ナレッジセンターを検索する
カテゴリーで検索
タグで検索