はじめに
概要
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. 新規プロジェクト作成
以下を入力し、"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.com
とhttps://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を入力すると、パスワード変更を促されます。
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とそれ以外のブラウザからアクセスします。
IstioにおけるVirtual Serviceの設定通り、サービスのルーティング先がブラウザによって変わっていることを確認しました。
まとめ
Karbon Platform Services(KPS)を用いた、サービスドメインの構築、サンプルマイクロサービスのデプロイ、サービス監視、アップデートを流れを追って説明しました。今回は汎用PaaS機能のみを取り上げてご紹介しましたが、IoT/AIユースケースがKPSの得意分野であり、それを担うデータパイプラインやFaaS、AI機能はまた機会を見つけてご紹介しようと思います。