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


はじめに

概要

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)の機能を用いて構築していきます。

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

構築手順

1. プロジェクトの設定

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

1-1. KPSにログイン

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

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

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

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

"+Create"をクリックします。

以下を入力し、"Next"をクリックします。
Name: お好きな名前
Users: "Edit"をクリックし、あなたのユーザ名を指定

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

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

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

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

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

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

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

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

2-3. Kubernetes Appsの作成

"+Create Kubernetes App"をクリックします。

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

以下を入力し、"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マニフェストを確認できます。

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

"Service Domain Deployments"の"Status"列が"17 of 17 Running"となっていればデプロイ完了です。

"View Real-Time Logs"をクリックすると、Kubernetes Appの各コンテナからのログをリアルタイムで確認可能です。

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

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

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

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

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

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"となっていればデプロイ完了です。

3-3. Traefikの状態確認

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

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にアクセスし、アプリケーションが稼働していることを確認します。

3-6. Grafanaへのアクセス

https://grafana.woodkraft.karbon.nutanix.comにアクセスします。ユーザ名/パスワード: admin/adminを入力すると、パスワード変更を促されます。

Grafanaへのログインが出来ました。

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"となっていればデプロイ完了です。

4-3. Istioの状態確認

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

HTTPヘッダの"user-agent"が"Firefox"であった場合、recommendation-service subset: v2にルーティングするルールが作成されました。

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

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

Firefox

それ以外

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

まとめ

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