Kubernetes環境におけるKubeBlocksとDifyを用いた本番対応AIGCアプリケーション構築

はじめに

人工知能生成コンテンツ(AIGC)技術は、デジタル時代において革新的な変化をもたらしています。AIGCはテキスト、画像、音声、動画の自動生成を可能にし、コンテンツ制作の効率と品質を飛躍的に向上させます。さらに、ユーザーの個別ニーズに応じたパーソナライズドコンテンツのリアルタイム生成により、ユーザー体験も大幅に向上します。

しかし、AIGCの潜在能力を十分に活用するには、高い技術的ハードル、複雑なモデル統合、運用管理の難しさといった課題があります。これらの課題を解決するため、Difyが開発されました。Difyはオープンソースの大規模言語モデル(LLM)アプリケーション開発プラットフォームで、Backend as ServiceとLLMOpsの概念を統合し、開発者がアイデアから製品までを迅速に実現するための道筋を提供します。Difyは豊富なモデルサポート、直感的なPrompt設計ツール、強力なAgentフレームワーク、柔軟なワークフロー編成機能を内蔵し、技術的バックグラウンドを持たないユーザーでもAIアプリケーション開発に参加できるようにしています。

DifyはAIアプリケーション開発プロセスを大幅に簡素化しますが、本番環境へのデプロイと運用において、インフラストラクチャの効率的な管理は依然として重要な課題です。特にAIGCアプリケーションでは、PostgreSQL(アプリケーションメタデータの保存)、Redis(対話履歴の保存)、Qdrant(RAGのためのベクトルデータベース)など、複数のデータベースを使用するのが一般的です。これらの重要なコンポーネントの安定稼働、データの一貫性と安全性の確保、急増するビジネスニーズへの対応は、どのチームにとっても大きな挑戦です。ここで、KubeBlocksが強力な支援ツールとして登場します。KubeBlocksはKubernetesベースのデータインフラ管理プラットフォームで、データインフラの自動化された管理とスケジューリングを実現します。OLTP、OLAP、NoSQL、メッセージキュー、ストリーミングエンジン、さらにはベクトルデータベースや大規模言語モデルに至るまで、KubeBlocksはステートフルワークロードの管理効率を大幅に向上させます。KubeBlocksはマルチクラウド環境をサポートし、ワンクリックデプロイ、シームレスなスケーリング、自動障害回復などの機能を提供し、本番環境アプリケーションの高性能、高弾力性、可観測性を保証します。

DifyとKubeBlocksを組み合わせることで、Difyはアプリケーションの迅速な開発と反復を担当し、KubeBlocksは安定した管理可能なインフラストラクチャを確保します。この組み合わせは開発効率を向上させるだけでなく、アプリケーションの信頼性と拡張性も保証します。本記事では、KubeBlocksとDifyを使用して本番環境レベルのAIGCアプリケーションを構築する方法を実演します。

前提条件

  • Kubernetesクラスタ(バージョン1.21以上)
  • Ingress Controllerがインストール済みのKubernetesクラスタ

操作手順

KubeBlocksのインストール

まず、最新バージョンのkbcliをインストールします。kbcliはKubeBlocks専用のコマンドラインツールで、KubeBlocksリソースを直感的かつ効率的に管理します。

curl -fsSL https://kubeblocks.io/installer/install_cli.sh | bash

次に、最新バージョンのKubeBlocksをインストールします。

kbcli kubeblocks install

KubeBlocksのインストール後、一般的なデータベース(MySQL、PostgreSQL、Redis、MongoDBなど)がデフォルトで有効になります。有効なデータベースは次のコマンドで確認できます。

kbcli addon list

Difyが依存するベクトルデータベース(例: Qdrant)はデフォルトで有効になっていないため、次のコマンドで有効化します。

kbcli addon enable qdrant

有効化のステータスは次のコマンドで確認します。

kbcli addon describe qdrant

国内でイメージのプルに問題がある場合は、代替レジストリを指定できます。

kbcli addon enable qdrant --set image.registry=infracreate-registry.cn-zhangjiakou.cr.aliyuncs.com --set image.repository=apecloud/qdrant

PostgreSQLメタデータベースの作成

Difyのメタデータを保存するため、マスター-スタンバイ構成のPostgreSQLクラスタを作成します。

kbcli cluster create postgresql postgresql --cpu=1 --memory=2 --storage=20 --mode=replication --version=postgresql-14.8.0

またはKubectlを使用:

kubectl apply -f https://kubeblocks.io/yamls/dify/postgresql.yaml

Qdrantベクトルデータベースの作成

ユーザーがアップロードしたドキュメントと特徴ベクトルを保存するため、3ノードのQdrantクラスタを作成します。

kbcli cluster create qdrant --cluster-definition=qdrant --cluster-version=qdrant-1.8.4 --set cpu=1,memory=2Gi,storage=20Gi,replicas=3

またはKubectlを使用:

kubectl apply -f https://kubeblocks.io/yamls/dify/qdrant.yaml

Redisインメモリデータベースの作成

ユーザーの対話履歴を保存するため、高可用性をサポートするRedisクラスタを作成します。

kbcli cluster create redis redis --version=redis-7.0.6 --mode=replication --cpu=2 --memory=1 --storage=20 --replicas=2 --sentinel.cpu=0.2 --sentinel.memory=0.2 --sentinel.replicas=3 --sentinel.storage=20

またはKubectlを使用:

kubectl apply -f https://kubeblocks.io/yamls/dify/redis.yaml

Difyのデプロイ

すべてのデータベースクラスタが「Running」状態になるのを待ちます。

kubectl get cluster

PostgreSQLクラスタに接続してDifyデータベースを作成します。

kbcli cluster connect postgresql
create database dify;

Redisのデフォルトアカウントパスワードを取得します。

kubectl get secret redis-redis-account-default -o jsonpath="{.data.password}" | base64 -d

Helmを使用してDifyをデプロイします。まずリポジトリを追加します。

helm repo add douban https://douban.github.io/charts/

設定ファイル(values.yaml)を作成し、データベース接続情報などを設定します。主な設定項目:

  • global.host: Difyにアクセスするドメイン
  • データベース接続情報(Secretから参照)
  • ingress.className: 使用するIngressコントローラ
  • env.SECRET_KEY: セキュリティキー(強力なキーを生成して設定)

Difyをデプロイ:

helm upgrade -i dify douban/dify -f values.yaml

すべてのPodが「Running」状態になるのを確認します。

kubectl get pods -l app.kubernetes.io/name=dify

Difyへのアクセス

Ingress経由でDifyにアクセスします。Ingressのアドレスを確認:

kubectl get ingress -l app.kubernetes.io/name=dify

必要に応じてクライアントのhostsファイルにエントリを追加します。

echo '<INGRESS_IP> mydify.example.com' | sudo tee -a /etc/hosts

ブラウザでhttp://mydify.example.comにアクセスし、管理者アカウントを登録します。

インフラストラクチャの運用管理

ビジネスの成長に伴い、データベースの運用管理が必要になります。KubeBlocksは様々な運用操作をサポートします。

スケーリング

Qdrantの処理能力が不足した場合、垂直スケーリングまたは水平スケーリングが可能です。

垂直スケーリング(リソース増強):

kbcli cluster vscale qdrant --components qdrant --cpu 8 --memory 32Gi

水平スケーリング(ノード追加):

kbcli cluster hscale qdrant --replicas 5

ストレージ拡張

PostgreSQLのストレージ容量を拡張:

kbcli cluster volume-expand postgresql --components postgresql --storage=50Gi --volume-claim-templates=data

再起動

PostgreSQLクラスタの異常時には再起動を試行:

kbcli cluster restart postgresql

タグ: Kubernetes KubeBlocks Dify AIGC PostgreSQL

6月23日 20:38 投稿