It is the top of the page

Link for moving within the page
To text (c)

このウェブサイトではサイトの利便性の向上のためにクッキーを利用します。サイトの閲覧を続行されるには、クッキーの使用にご同意いただきますようお願いします。
お客様のブラウザの設定によりクッキーの機能を無効にすることもできます。詳細はこちら

The main part starts here.

  1. ナレッジセンター
  2. 匠コラム

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を可能にします。

volterra_map.png

VoltStack

VoltStackは利用者の拠点で起動するEdgeデバイスであり、Customer Edge(CE)であるVolterra Node上で動作します。VoltStackKubernetesクラスターとして機能するため、セットアップする方の役割・スキルによって構築自体が困難なケースが多々あります。Volterra Nodeのインストールは非常に簡素化されており、Volterra Console上で作成したTokenを指定し、ノードのIPアドレスを構成するだけでVoltStackの構成が可能です。CEvSphere用の仮想アプライアンス、Azure及びAWS上のマシンイメージとしても提供されており、ベアメタル環境へインストールすることも可能です。(現時点で対応しているベアメタルサーバーは限定されていますが、今後拡張される見込みです。)Volterra Nodeの起動が完了すると、”Pending Registration”の状態でVolterra Console上に表示されます。Approveするとクラスター内部でKubernetesクラスターとして構成され、Volterraが必要とする機能が自動的に構成され、しばらくするとクラスターとして管理可能になります。

VoltStackの登録

Volterraは複数のVoltStack(Kubernetesクラスター)の管理を簡素化するために、KubernetesクラスターにまたがるVirtual Kubernetes(vk8s)と呼ばれる機能を提供しています。vk8sを利用すると、各VoltStackに複数の論理的なクラスター(ネームスペース)を構成し、ネームスペース内でVirtual Siteという論理的なリソースグループを作成して、マニフェストのannotationを利用してコンテナを柔軟に配置することが可能です。以下の例では2つの拠点にVoltStack配置し、Volterra Console上で2つのネームスペースを作成し一元的に管理しています。ネームスペースns1app1のレプリカ数を3としてDeploymentを作成すると、それぞれのCE上でapp1Pod3つずつ起動します。同様にns2ではレプリカ数を2としてapp2 Deploymentを作成しているため、各VoltStackPod2つずつ起動します。

Virtual Kubernetes

また、利用者はVolterra社が世界各地のリージョンで運用するRegional Edge(RE)上でアプリケーションを起動することも可能です。Volterra社のインフラを利用する形となるため、Podのサイズと利用時間に応じて課金が発生します。

VoltMesh

VoltMeshVoltStack上に配置したコンテナ間の通信やコンテナに対する外部からのアクセスを可能にするネットワークサービスです。Volterra社は世界各地にリージョンを持ち、各リージョンでREを運用しています。これらのREVolterra社が運用するバックボーンネットワークで接続されており、利用者のCEREに対してIPsec接続することでVolterraのバックボーンネットワークを介して通信することが可能です。CERE上のアプリケーションは、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がバックエンドサービスとしてCE2Pod2を利用している場合、以下のようにKubernetesのリソースとVoltMeshのリソースを組み合わせて、異なるCE上のPod間通信を可能にし、Pod1をサービスとしてCE1上で公開することが可能です。

VoltMeshによるPod間通信

また、VoltStack上で機能していないアプリケーションをEndpointとして登録することでVoltStack内からアクセスすることも可能です。既存のKubernetesEdgeロケーションに存在する場合は、既存KubernetesService(type: NodePort)Endpointとして登録することで、Amazon EKSAzureAKS等、VoltStackの外部に存在するサービスにアクセスすることも可能です。

ユースケース

今回は複数の拠点で収集されるデータを、データセンターで一元的に保存・可視化する環境でVolterraをどの様に利用できるのかをご紹介します。

各拠点のデバイスが生成するデータをデータセンターで収集・可視化する場合、各拠点とデータセンターにCEを配置し、拠点のCE上で起動するデータ収集用のコンテナが、データセンターにあるデータ分析システムにデータを送ることでデータの収集と可視化を実現することができます。各拠点内で収集するIoTデバイスの種類やデータフォーマットが変更される場合に、拠点のデータ収集用コンテナイメージをバージョンアップすることで、速やかに新しいデータに対応することが可能になります。また、各拠点とデータセンター間の通信はVoltMeshによりセキュアに構成することが可能です。今回はElasticsearch社のElastic Stack(ElasticsearchLogstashFilebeatKibana)を利用して各拠点のデータをデータセンターで一元的に可視化するというシナリオで環境を構成しました。

Virtual Siteの構成

Volterraで管理される全てのCESiteとしてVolterra Consoleに登録されます。各Siteには任意のラベルを付与し、このラベルを利用してVirtual SiteというSiteのグループを構成することが可能です。今回はデータセンターとして機能する東京のCEにedge-vsite: demo-tokyo、拠点として機能する大阪、沖縄のCEにはsite-type: branchというラベルを付与し、各ラベルを利用して2つのVirtual Siteを作成し、これらのVirtual Sitevk8sに登録しています。(札幌拠点のCEは後ほど追加します)

Virtual Site名 Label 含まれるSite
demo-tokyo edge-vsite: demo-tokyo demo-tokyo-ce
demo-branch site-type: branch

demo-osaka-ce
demo-okinawa-ce

データセンターのコンポーネント

東京データセンターではデータを格納するためのElasticsearchと、Elasticsearchに格納されたデータを可視化するためのKibanaが仮想マシン上で起動しています。データセンター内のCEは各拠点から送られてくるデータを整形し、Elasticsearchに登録するためのLogstashが起動しています。LogstashCEの外部にあるElasticsearchにデータを登録しますが、ElasticsearchVoltMeshEndpointVirtual 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.annotationsves.io/virtual-sites: nos-demo/demo-tokyoとしてVirtual Siteとしてdemo-tokyoを指定しているため、Logstash Podは東京データセンターのCEにだけデプロイされます。

各拠点のコンポーネント

各拠点ではデバイスが生成するメトリックを収集し、データセンターのLogstashにデータを転送するための機能としてFilebeatを配置しています。Filebeatは軽量なログ収集エージェントです。今回はFilebeatInputプラグインとしてTCPソケットを利用し、デバイスが生成した各種メトリックをTCPFilebeatにデータ転送しています。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に登録されるデータはどの拠点から送信されてきたメトリックなのか識別することができません。

Kibana画面

そこで、以下のようにFilebeatの設定を変更してコンテナイメージfilebeat-sensor:1.1を作成します。各拠点で収集したデータにbranch: ${EDGE_VSITE}というフィールドを追加して、データセンターのLogstashに転送します。VolterraCE上で起動する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に適用することで、データに新しい情報が追加され、各拠点毎のメトリックの可視化が可能になります。

Kibana

拠点の追加

前述の通りVoltStackは簡単にCEとして構成し、Volterra Consoleに登録することが可能です。CEを新しい拠点として利用するには、CEにsite-type: branchというラベルを追加します。ラベルを追加すると、CEは自動的にVirtual Site(demo-branch)に追加され、demo-branch向けのDeploymentであるfilebeat-sensorは追加されたCE上でFilebeat Podを起動し、Logstashに対してメトリックの転送が開始されます。

Virtual Site名 Label 含まれるSite
demo-tokyo edge-vsite: demo-tokyo demo-tokyo-ce
demo-branch site-type: branch

demo-osaka-ce
demo-okinawa-ce
demo-sapporo-ce

メトリックの転送が開始されると、Kibana上でも札幌に配置されたCEのメトリックを確認することができます。

拠点におけるデータのフィルタリング

拠点ではHumidityFlowSoundTemperature4種類のメトリックを収集しています。Soundデータが不要になった場合、Filebeatの設定を以下のように変更することで、各拠点のFilebeatSoundに関するメトリックを破棄することが可能です。

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メトリックに関するグラフもプロットが停止しています。

Kibana

まとめ

Volterraが提供するVoltStackにより複数のロケーションに配置したKubernetesクラスターの運用を簡素化し、VoltMeshにより世界中のリージョンに配置されたRegional Edgeで構成されるVolterraのバックボーンネットワークを利用してVoltStackを論理的に接続することが可能です。これらの機能を利用して、Edgeに対するアプリケーションを迅速に配信し、アプリケーションが必要とするネットワークを迅速に構成することが可能になります。また、今回はご説明できていませんが、Volterraはアプリケーションセキュリティに関してもWAFPod間通信制御などの機能を持っており、Edge Cloud内でアプリケーションをセキュアに実行することが可能です。Volterraが提供するKubernetesとバックボーンネットワークの組み合わせが実現するEdge Cloudは今回ご紹介した以外のユースケースでも活用することができます。また、今回ご紹介したユースケースは弊社内の環境を利用して実際に動作している様子をご覧いただくことも可能です。Edge Cloudを検討されているお客様はぜひ担当営業までご相談ください。

Webからのお問い合わせはこちらから

ナレッジセンターを検索する

カテゴリーで検索

タグで検索