BookinfoデモでIstioを体感する

2018年10月30日(火)
樽澤 広亨(たるさわひろゆき)
サンプル・アプリケーション「Bookinfo」でIstioの基本的な機能を体験してみます。

Bookinfoアプリケーション

今回はIstioが提供しているサンプル・アプリケーション「Bookinfo」を利用して、Istioの機能の一端を体験してみましょう。Bookinfoは、書籍の紹介とレビューを表示する参照系アプリケーションで、マイクロサービス・アーキテクチャー(Microservices Architecture、MSA)に基づき、4つのサービスから構成されています(図1)。MSAらしく各サービスはそれぞれ異なるプログラミング言語で実装されています(Polyglot)。

図1:Bookinfoの構成

図1:Bookinfoの構成

各サービスの概略は、以下の通りです。

  • productpage:Pythonで実装されたBackend for Frontendサービスです。ユーザーからのリクエストを受け取ると、detailsサービスとreviewsサービスを呼び出して、それぞれ書籍情報とレビュー情報を入手し、Webページを返します
  • details:書籍情報を管理するサービスであり、Rubyで実装されています
  • reviews:書籍のレビュー投稿を管理するサービスであり、Javaで実装されています。ratingsサービスを呼び出して、書籍のレイティング(評価)を取得します
  • ratings:書籍のレイティング情報を管理するサービスです。Nodeで実装されています

ブラウザー上のユーザー体験は、「The Comedy of Errors」という書籍の情報とレビュー結果が表示されるというシンプルなものです。その一方で、Bookinfoは3つのバージョンのreviewsサービスの実装を包含しており、レイティングの表示内容は、バージョンごとに以下のように変わります。

  • V1:レイティングを表示しない(図2)
  • V2:レイティングを黒い星で表示する(図3)
  • V3:レイティングを赤い星で表示する(図4)
図2:レイティングを表示しないV1

図2:レイティングを表示しないV1

図3:レイティングを黒い星で表示するV2

図3:レイティングを黒い星で表示するV2

図4:レイティングを赤い星で表示するV3

図4:レイティングを赤い星で表示するV3

すなわち、レイティングが黒い星で表現されていたら、「V2のreviewsサービスが呼ばれているな」と直感的に分かります。トラフィック管理のデモンストレーションの確認に最適なアプリケーションとなっているのです。IstioのWebサイト(https://istio.io/)には、Bookinfoアプリケーションを利用して学習するためのドキュメントが公開されています。本稿では、Tasks > Traffic Managementのドキュメントを基にして、Istioの利用方法を解説していきます。

作業の流れ

実際にBookinfoアプリケーションを使う前に、次にあげる3つの準備作業が必要となります。

  1. Kubernetes環境(クラスターとデスクトップ)の準備
  2. Istioの導入
  3. Bookinfoアプリケーションの導入

2018年10月時点で、Istioは、導入先のオーケストレーション・フレームワークとしてKubernetesとConsulをサポートしていますが、今回はKubernetesを利用します。これを含め、本稿では下記の環境を前提に説明を進めます。

  • Kubernetes 1.10.8
  • Istio 1.0.2
  • Kubernetesクラスター環境:IBM CloudのKubernetesサービスであるIBM Cloud Kubernetes Service(IKS)
  • Kubernetes&Istioを操作するデスクトップ環境:Ubuntu 16.04

KubernetesとIstioのいずれも、2018年10月時点での安定したバージョンを選択していますが、他のバージョンであっても大きな違いはありません。またKubernetesクラスターの作成手順は、各Kubernetesサービス独自の手順に基づいて実施する必要がありますが、それ以外についてはKubernetesのコマンド・ライン・インターフェースであるkubectlを介した、Kubernetesサービス実装に依存しない標準的な手順で実施いただけます。他のKubernetesサービスを利用した場合でも、操作手順や動作に違いはありません。

Kubernetes環境(クラスターとデスクトップ)の準備

ご利用されるKubernetesサービスの手順に基づいて、Kubernetesクラスターとデスクトップ環境を準備します。利用されるKubernetesサービスのマニュアルを参照の上で、環境をセットアップしてください。IstioのWebサイト(https://istio.io/docs/setup/kubernetes/)には、Kubernetesの各実装ごとにIstio導入のHints&Tipsが記載されていますので、これらの情報も確認しておくと良いでしょう。

参考までに、本稿で利用するIBM Cloud Kubernetes Service(以下、IKS)を前提に、Kubernetesデスクトップとクラスターのセットアップ手順を説明します。まず、こちらのWebサイト(https://console.bluemix.net/docs/cli/index.html#overview)の手順に従って、IBM CloudとIKS、Kubernetesの操作に必要なコマンド・ライン・インターフェース(CLI)を導入します(註1)。最終的に、以下に挙げるコンポーネントが導入されます。

  • Homebrew(Macのみ)
  • Git
  • Docker
  • Helm
  • kubectl
  • curl
  • IBM Cloud Developer Toolsプラグイン
  • IBM Cloud Functionsプラグイン
  • IBM Cloud Container Registryプラグイン
  • IBM Cloud Kubernetes Serviceプラグイン
  • sdk-genプラグイン

註1:
IBM Cloudのオンライン・マニュアル(コンソールのヘッダーに「資料」という名称で表示されています)の各ページのURLは変更される可能性があります。もし本稿で示したIBM Cloudオンライン・マニュアルが無効となっている場合には、オンライン・マニュアルの検索機能で「IBM Cloud CLI」等適当な文字列で検索してみてください。

デスクトップ環境の準備ができたら、次に示す流れに沿って、IKS上にKubernetesクラスターを作成します(IBM Cloudの従量課金(PAYG)アカウントまたはサブスクリプション・アカウントをご用意ください。2018年10月時点、ライト・アカウントではKubernetesクラスターを作成することはできません)。まずブラウザーでIBM Cloudコンソール(https://console.bluemix.net/)にアクセスし、ログインします。ダッシュボードが表示されますが、ヘッダー・メニューで「カタログ」をクリックします。そして表示されたカタログ・ページの左側のペインで「コンテナー」をクリックします(図5)。

図5:左ペインの「コンテナー」をクリック

図5:左ペインの「コンテナー」をクリック

カタログ・ページの右側のペインに表示される「IBM Cloud Kubernetes Service」タイルをクリックします(図6)。

図6:「IBM Cloud Kubernetes Service」をクリック

図6:「IBM Cloud Kubernetes Service」をクリック

Kubernetesクラスター・ページが表示されます(図7)。右上あるいは右下に表示される「作成」ボタンをクリックします。

図7:「作成」ボタンをクリック

図7:「作成」ボタンをクリック

すると、新規クラスターの作成ページが表示されます(図8、図9)ので、必要項目を入力していきます。それぞれのフィールドの意味は次の通りです。フィールドの入力を終えたら、「作成」ボタンをクリックします。

図8:新規クラスターの作成

図8:新規クラスターの作成

図9:新規クラスターの作成(続き)

図9:新規クラスターの作成(続き)

  • ロケーション:IBM Cloudのリージョン(データセンターの集合体)を選びます。東京を選択します
  • クラスター・タイプ:無料と標準があります(東京リージョンは標準タイプしかありません)。Istioはそれなりにコンピューティング・リソースを必要とするので、標準を選択します
  • 可用性:可用性のレベルを指定します。データセンター障害に耐えうる複数ゾーンと、単一のデータセンターから成る単一ゾーンがあります。今回はテスト用途なので、単一ゾーンを選択します。
  • Worker Zone:データセンターを指定します。今回はTok04を選択します。
  • Kubernetesのバージョン:Kubernetesのバージョンを選択します。今回は1.10.8を使用します。
  • ハードウェアの分離:独立した物理サーバーを占有使用するシングル・テナント・モデル(「仮想 - 占有」あるいは「ベア・メタル」)あるいは物理サーバーを他のテナントと共有使用するマルチ・テナント・モデル(「仮想 - 共有」)のいずれかを指定します。今回は「仮想 - 共有」を使います。
  • フレーバー:利用するマシンの仕様を指定します。Istioはそれなりにコンピューティング・リソースを必要とするので、「4コア 16GB RAM」を選択します。
  • クラスター名:任意の名称を付与します。ここでは「tok04std」としています。

入力を済ませて「作成」ボタンをクリックすると、画面が変わり、Kubernetesクラスターの詳細画面が表示されます(図10)。画面上部のクラスター名の横に、現在のクラスターの状況が表示され、「要求中」「デプロイ中」「保留中」など刻一刻と変化していきます。数分~十数分後、状況が「デプロイ中」から緑のインジケーターを伴った「通常」に変わったら、クラスター作成は正常に終了したことになります。

図10:Kubernetesクラスターの詳細画面

図10:Kubernetesクラスターの詳細画面

デスクトップ環境からIKSのKubernetesクラスターには、次のような流れで接続します。まずIBM Cloudにログインします。

リスト1:IBM Cloudにログイン

ibmcloud login -u <IBM Cloudのアカウント名> -p <IBM Cloudのアカウントのパスワード> -o <IBM Cloudで利用する組織名> -s <IBM Cloudで利用するスペース名>

続いて、利用するIBM Cloudのリージョン(データセンターの位置する組織)をセットします。東京はap-northリージョン(北アジア太平洋地域)に位置するので、次のようにコマンドを実行します。

リスト2:リージョンの指定

ibmcloud cs region-set ap-north

次にクラスター構成情報を取得します。

リスト3:クラスター構成情報の取得

ibmcloud cs cluster-config <クラスター名>

すると、Kubectlのコンテクスト情報を含むYAMLファイルが得られます。コマンド実行結果の標準出力メッセージを参考にして、環境変数に設定します(図11)。

リスト4:YAMLファイルを環境変数に設定

export KUBECONFIG=<YAMLファイルへのパス>
図11:YAMLファイルを環境変数に設定

図11:YAMLファイルを環境変数に設定

以上でIKSを用いたKubernetes環境の準備は整いました。

著者
樽澤 広亨(たるさわひろゆき)
日本アイ・ビー・エム株式会社クラウド・テクニカル・セールス所属 エグゼクティブ・テクニカル・スペシャリスト
IBMソフトウェア製品(WebSphere)のエバンジェリスト、テクニカル・サポート、米IBMソフトウェア開発研究所所属の開発エンジニアを経て現職。IBM Academy of Technologyメンバー。また、情報処理学会 情報企画調査会 SC38専門委員として、ISO IEC JTC1/SC38によるクラウドコンピューティングの国際標準策定に従事している。

連載バックナンバー

運用・管理技術解説
第3回

BookinfoデモでIstioを体感する

2018/10/30
サンプル・アプリケーション「Bookinfo」でIstioの基本的な機能を体験してみます。
運用・管理技術解説
第2回

Istioの全貌

2018/9/18
Istioが備える特徴や提供する機能、またそれを実現するためのアーキテクチャーを紹介いたします。
運用・管理技術解説
第1回

マイクロサービスとサービス・メッシュ(Istioが求められる背景)

2018/8/3
マイクロサービスによる巨大な超分散システムの運用管理ソリューションとして注目されているIstioが必要とされる背景を解説します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています