0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Karbon Platform Services ~NutanixによるマルチクラウドPaaS~ を使ってみる 後編

Last updated at Posted at 2020-10-28

はじめに

概要

Nutanixは2020年9月、Karbon Platform Services(KPS)を発表しました。これはKubernetesをベースとしたマルチクラウドPaaSを実現するものです。プレスリリースと製品紹介は以下をご覧ください。

プレスリリース
Karbon Platform Services製品紹介ページ

本記事では

前編のサービスドメインの構築に引き続き、今回は後編としてサンプルアプリケーションの構築を行います。こちらのGithubレポジトリのガイドに沿って進めていきます。

アプリケーションデザイン

デプロイするアプリケーション、WoodKraftについて説明します。ここではよくあるE-コマースサイトを取り上げます。サイト上でのユーザ行動をもとにレコメンデーションを行う機能を実装しています。

主なコンポーネントは以下です。
Wordpress: Eコマースサイトを作成するためのベースとなるCMS
MySQL: Wordpressのバックエンドとして用いるデータベース
Debezium: データベースに対する変更を追跡してKafkaのトピックを作成
Kafka: レコメンデーションサービス等のビジネスロジックへのデータストリーム
Recommendation Logic: ストリームを受け取り最も人気のある製品ページを更新する
Review Logic: ストリームを受け取りレビューページを更新する
Ingress Controller: サービスドメイン外からのトラフィックを制御
Istio: マイクロサービス間の通信を制御
Prometheus: アプリケーションおよびサービスの監視とアラート
Grafana: Prometheusで取得されたデータの可視化
Log Forwarding: 外部へのログデータ送信

このうち、青で示されている部分はKPSのプラットフォーム機能を用いて、水色と黄緑で示されている部分はKPSのKubernetes Apps(CaaS)の機能を用いて構築していきます。
image.png

注意: このガイドでは簡略化のため、全サービスを1つのマニフェスト(Kubernetes YamlもしはHelmチャート)に統合して提供します。本番環境ではそれぞれのサービスをCI/CDパイプラインに掛け、承認されたサービスのみをAPIコールを用いてデプロイするといった手法を取ります。

構築手順

1. プロジェクトの設定

プロジェクトはKPSにおいてKubernetes Appsや他のサービスを論理的に分離し、認可されたユーザのみが閲覧、編集できるようにします。これにより異なる開発プロジェクト間でサービスドメインを共有したり、共通のコントロールプレーン内で複数のプロジェクトを管理出来ます。ここでは、サンプルアプリケーション用に新たなプロジェクトを作成します。

1-1. KPSにログイン

こちらにアクセスし、My Nutanixアカウントでログインします。

1-2. プロジェクト画面に移動

左側のナビゲーションペインから"Projects"メニューをクリックします。

1-3. 新規プロジェクト作成

"+Create"をクリックします。
スクリーンショット 2020-10-28 15.32.17.png

以下を入力し、"Next"をクリックします。
Name: お好きな名前
Users: "Edit"をクリックし、あなたのユーザ名を指定
スクリーンショット 2020-10-28 15.33.34.png

以下を入力し、"Next"をクリックします。
Service Domain Selection: カテゴリを用いて複数のサービスドメインをこのプロジェクトに紐付けたい際は"Select by Category"を、個別に選択したい場合は"Select Individually"を選択します。ここでは"Select Individually"を選択し、前編で作成したサービスドメインを静的に紐付けます。
Cloud Profile: データパイプライン等を用いて外部クラウドプロバイダのデータサービスと連携したい場合、別途Cloud Profileを設定した上でプロジェクトと紐付けます。ここでは空白のまま進めます。
Container Registry Selection: デフォルトではdockerhubにコンテナイメージを検索しに行きますが、プライベートレジストリをお使いの場合、別途Container Registryを設定した上でプロジェクトと紐付けます。ここでは空白のまま進めます。
スクリーンショット 2020-10-28 15.36.04.png

このプロジェクトで有効化するプラットフォーム機能を選択し、"Create"をクリックします。
Ingress Controller: "Traefik"を"Enable"
Service Mesh: "Istio"を"Enable"
Data Streaming | Messaging: "Kafka"を"Enable"
Logging | Monitoring | Alerting: "Prometheus"を"Enable"
スクリーンショット 2020-10-28 15.46.52.png
スクリーンショット 2020-10-28 15.47.08.png

2. アプリケーションのデプロイ

この章ではHelmチャートを用い、WordpressやDebezium、PrometheusやMySQLといったアプリケーションの構成要素をKPS上のKubernetes App(CaaS)機能上でデプロイします。

2-1. Helmチャートのダウンロード

こちらからHelmチャートをダウンロードします。

2-2. プロジェクトコンテクストへの移動

左側のナビゲーションペイン上部のドロップダウンから第1章にて作成したプロジェクトへと移動します。
スクリーンショット 2020-10-28 15.56.18.png

2-3. Kubernetes Appsの作成

"+Create Kubernetes App"をクリックします。
スクリーンショット 2020-10-28 15.59.28.png

以下を入力し、"Next"をクリックします。
Name: "woodkraft-apps"
Service Domain Selection: "Select Individually"を選択し、"+Add Service Domain"をクリックして前編で作成したサービスドメインを静的に紐付けます。
スクリーンショット 2020-10-28 16.01.55.png

以下を入力し、"Create"をクリックします。
Configuration Method: Yamlベースのマニフェストを使用する場合は"YAML based configuration"を選択しますが、ここではHelmチャートを使用するため、"Upload a Helm Chart"を選択します。
Helm Chart File: "Browse"から2-1でダウンロードしたtgzファイルを指定します。
Values Override File(Optional): Helmチャートでテンプレートとデフォルト値を定義し、実際の値の入力を別ファイルで管理する場合、こちらにyamlファイルを指定します。ここでは空白のまま進めます。
View Generated YAML file: "Show YAML"をクリックすると上記のHelmチャートにて作成されたYAMLマニフェストを確認できます。
スクリーンショット 2020-10-28 16.19.57.png

"Kubernetes Apps"メニューから作成した"woodkraft-apps"アプリケーションの作成過程を確認できます。デプロイ完了まで15分ほど掛かります。
スクリーンショット 2020-10-28 16.31.43.png

"Service Domain Deployments"の"Status"列が"17 of 17 Running"となっていればデプロイ完了です。
スクリーンショット 2020-10-28 16.40.27.png

"View Real-Time Logs"をクリックすると、Kubernetes Appの各コンテナからのログをリアルタイムで確認可能です。
スクリーンショット 2020-10-28 16.40.53.png

2-4. Traefik/Istio/Kafkaの状態確認

このサンプルアプリケーションではTraefik/Istio/Kafkaのプラットフォームサービスが呼び出されて利用されていますが、その状態を確認します。

左側のナビゲーションペインから"Traefik"をクリックし、クラスタへのIngressルールが2つ、登録されていることを確認します。
スクリーンショット 2020-10-28 16.56.17.png

"Istio"をクリックし、マイクロサービス間のアプリケーションメトリックが取得されていることを確認します。
スクリーンショット 2020-10-28 16.58.53.png

"Kafka"をクリックし、アプリケーションで生成されるKafkaトピックが登録されていることを確認します。
スクリーンショット 2020-10-28 17.00.18.png

3. サービスメトリックの取得

次は別のHelmチャートを用いてGrafanaという各種メトリックの可視化サービスを立ち上げます。GrafanaはPrometheusのような各種データソースと連携し、図表やアラート、カスタマイズ可能なダッシュボードや分析といった機能を提供します。

3-1. Helmチャートのダウンロード

こちらからHelmチャートをダウンロードします。

3-2. Kubernetes Appの作成

2-2, 2-3と同じ手順でHelmチャートからKubernetes Appを作成します。Kubernetes AppのNameを"woodkraft-monitoring"としておきます。今度は5分ほどでデプロイが完了します。

"Service Domain Deployments"の"Status"列が"2 of 2 Running"となっていればデプロイ完了です。
スクリーンショット 2020-10-28 17.19.00.png

3-3. Traefikの状態確認

左側のナビゲーションペインから"Traefik"をクリックすると、クラスタへのIngressルールが1つ増えていることが確認できます。これによりGrafanaダッシュボードへのルールが追加されました。
スクリーンショット 2020-10-28 17.21.12.png

3-4. アプリケーションへのアクセス準備

TraefikによるIngressルールではhttps://woodkraft.karbon.nutanix.comhttps://grafana.woodkraft.karbon.nutanix.comという2つのURLに対するアクセスが定義されています。本番環境ではDNSサービスにおいてレコードを登録して組織内、あるいは世界中からアクセス可能としますが、今回はテスト目的でホストマシンのhostsファイルにレコードを追加します。

MacOS/Linux

echo "(サービスドメインのIPアドレス) woodkraft.karbon.nutanix.com" | sudo tee -a /etc/hosts
echo "(サービスドメインのIPアドレス) grafana.woodkraft.karbon.nutanix.com" | sudo tee -a /etc/hosts

Windows

echo (サービスドメインのIPアドレス) woodkraft.karbon.nutanix.com >> %WINDIR%\System32\Drivers\Etc\Hosts
echo (サービスドメインのIPアドレス) grafana.woodkraft.karbon.nutanix.com >> %WINDIR%\System32\Drivers\Etc\Hosts

3-5. WoodKraftアプリケーションへのアクセス

https://woodkraft.karbon.nutanix.comにアクセスし、アプリケーションが稼働していることを確認します。
スクリーンショット 2020-10-28 17.35.20.png

3-6. Grafanaへのアクセス

https://grafana.woodkraft.karbon.nutanix.comにアクセスします。ユーザ名/パスワード: admin/adminを入力すると、パスワード変更を促されます。
スクリーンショット 2020-10-28 17.37.42.png

Grafanaへのログインが出来ました。
スクリーンショット 2020-10-28 17.39.27.png

4. マイクロサービスのアップデート

最後のHelmチャートは既にデプロイされているマイクロサービス、"Recommendation Service"のアップデートを行います。KPSに実装されているIstioはトラフィック管理、セキュアなコネクション、ポリシー実行、可観測性等様々な機能がありますが、ここではトラフィック管理機能を用い、特定のマイクロサービスに対して一気にアップデートを掛けるのではなく、特定のユーザから新バージョンを使い始めるリリース戦略を実装します。具体的には、Firefoxブラウザからアクセスした場合には新バージョンを、その他の場合は旧バージョンにアクセスさせます。

4-1. Helmチャートのダウンロード

こちらからHelmチャートをダウンロードします。

4-2. Kubernetes Appの作成

2-2, 2-3と同じ手順でHelmチャートからKubernetes Appを作成します。Kubernetes AppのNameを"woodkraft-updates"としておきます。今度は5分ほどでデプロイが完了します。

"Service Domain Deployments"の"Status"列が"3 of 3 Running"となっていればデプロイ完了です。
スクリーンショット 2020-10-28 17.59.21.png

4-3. Istioの状態確認

左側のナビゲーションペインから"Istio"をクリックし、"Virtual Services"タブをクリックします。

HTTPヘッダの"user-agent"が"Firefox"であった場合、recommendation-service subset: v2にルーティングするルールが作成されました。
スクリーンショット 2020-10-28 18.01.28.png

4-4. Recommendationサービスへのアクセス

https://woodkraft.karbon.nutanix.com/recommendations/にFirefoxとそれ以外のブラウザからアクセスします。

Firefox
スクリーンショット 2020-10-28 18.06.50.png

それ以外
スクリーンショット 2020-10-28 18.06.13.png

IstioにおけるVirtual Serviceの設定通り、サービスのルーティング先がブラウザによって変わっていることを確認しました。

まとめ

Karbon Platform Services(KPS)を用いた、サービスドメインの構築、サンプルマイクロサービスのデプロイ、サービス監視、アップデートを流れを追って説明しました。今回は汎用PaaS機能のみを取り上げてご紹介しましたが、IoT/AIユースケースがKPSの得意分野であり、それを担うデータパイプラインやFaaS、AI機能はまた機会を見つけてご紹介しようと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?