VeleroによるKubernetesのリソース保護
Veleroは、Kubernetesクラスター内のリソースや永続ボリューム(PV)のバックアップおよびリカバリを管理するためのオープンソースツールです。VMware Tanzuによってメンテナンスされており、クラウドネイティブ環境におけるデータ保護の標準的なソリューションとして広く利用されています。
Veleroの基本アーキテクチャ
Veleroは主に以下のコンポーネントで構成されています。
- Velero CLI: ローカル環境からバックアップやリストアの操作を行うコマンドラインツール。
- Velero Server: クラスター内で動作するOperator。BackupやRestoreといったカスタムリソース(CRD)を監視し、実際の処理を実行します。
- Object Storage: バックアップデータを保存する場所(AWS S3、Azure Blob、MinIOなど)。
- Volume Snapshotter: CSI(Container Storage Interface)を介して、ストレージレベルの快照(スナップショット)を取得するプラグイン。
MinIOを使用したストレージ基盤の構築
バックアップ先として、S3互換ストレージであるMinIOをデプロイします。以下はDocker Composeを使用した構成例です。
version: '3.9'
services:
s3-storage:
image: minio/minio:RELEASE.2024-02-26T09-33-48Z
container_name: k8s-minio
environment:
MINIO_ROOT_USER: 'admin_user'
MINIO_ROOT_PASSWORD: 'secure_password_123'
ports:
- "9000:9000"
- "9001:9001"
volumes:
- ./minio_data:/data
command: server /data --console-address ":9001"
Veleroのインストールと初期設定
Veleroをクラスターに導入する際、まず認証情報を記述したファイルを用意します。
[default]
aws_access_key_id = admin_user
aws_secret_access_key = secure_password_123
次に、CLIを使用してクラスターへインストールを実行します。ここではAWSプラグインを使用し、S3エンドポイントとして先ほど構築したMinIOを指定します。
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.9.0 \
--bucket velero-backups \
--secret-file ./credentials-velero \
--use-node-agent \
--uploader-type kopia \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<MINIO_IP>:9000
バックアップとリストアの実践
特定のネームスペース(例: prod-apps)をバックアップするコマンドは以下の通りです。--default-volumes-to-fs-backupを付与することで、PV内のデータもファイルシステムレベルでバックアップ対象に含めることができます。
# バックアップの作成
velero backup create app-snapshot-01 --include-namespaces prod-apps --default-volumes-to-fs-backup
# バックアップ状況の確認
velero backup get
# リストアの実行
velero restore create --from-backup app-snapshot-01
クラウドネイティブとマイクロサービスアーキテクチャ
クラウドネイティブなシステムを構築する上で、マイクロサービスの管理は非常に重要な要素です。主に以下の2つのアプローチが取られます。
1. フレームワークによるガバナンス (Spring Cloud)
Javaエコシステムにおいて、NacosやSpring Cloud Gatewayなどを組み合わせてマイクロサービスを管理します。これはアプリケーションコードにライブラリを組み込む(SDK方式)ため、言語が限定される側面があります。
2. インフラによるガバナンス (Service Mesh)
IstioやEnvoyに代表されるサービスメッシュを利用します。Sidecarプロキシ(Envoy)を各Podに注入することで、トラフィック制御、セキュリティ、可観測性をアプリケーションコードから分離して実現します。
Mall-MicroServiceプロジェクトのKubernetes展開
実践的なプロジェクトとして、マイクロサービス構成のECモールシステム(Mall-MicroService)をKubernetes上にデプロイします。このシステムは、複数のミドルウェアとビジネスロジックサービスで構成されます。
インフラ構成コンポーネント
- サービス発見・設定管理: Nacos
- データベース: MySQL (Master-Slave構成)
- キャッシュ: Redis
- メッセージング: RabbitMQ
- 検索エンジン: Elasticsearch
- 分散トレーシング: SkyWalking
- ログ収集: Fluent-bit + Kibana
ストレージクラスの設定 (NFS CSI Driver)
動的なプロビジョニングを可能にするため、NFSを利用したStorageClassを定義します。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-dynamic-sc
provisioner: nfs.csi.k8s.io
parameters:
server: 10.0.0.155
share: /volume/nfs_share
reclaimPolicy: Retain
volumeBindingMode: Immediate
モニタリング基盤のデプロイ
PrometheusとGrafanaを使用して、クラスター全体のメトリクスを可視化します。Cilium Ingress Controllerを利用して、外部からダッシュボードにアクセス可能な環境を構築します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana-ui
namespace: monitoring
annotations:
ingress.cilium.io/loadbalancer-mode: 'shared'
spec:
ingressClassName: cilium
rules:
- host: grafana.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 3000
アプリケーションの展開フロー
- データベース初期化: MySQLにアプリケーション用スキーマをインポート。
- 設定情報の投入: NacosのConfig Centerに各サービスのプロパティファイルを登録。
- バックエンドサービスの起動: Gateway, Auth, Product, Orderなどの各マイクロサービスをDeploymentとしてデプロイ。
- フロントエンドの公開: Vue.jsベースの管理画面をNginx経由で公開。
このような包括的なアプローチにより、データのバックアップから高可用なマイクロサービス基盤の運用までを一貫して管理することが可能になります。