はじめに
サイオステクノロジーの塚田です。Rancher入門ブログシリーズとして、前回はRancher上でモニタリング環境を構築する方法について解説しました。本記事では、Rancherから分散ストレージ管理サービスであるLonghornをインストールし、マルチクラスター環境下でストレージを管理する方法を解説します。
Longhornとは?
Longhornとは、Rancher Lab社が開発した分散型ブロックストレージシステムです。軽量でKubernetesに特化していることが特徴です。Longhornを導入することで、複数のノードにまたがってデータを分散して管理する仕組みを容易にセットアップすることができます。
Longhornの導入手順
前提条件
- Rancher Serverが構築済みであること
- Rancher Serverの構築方法は過去の記事にて紹介しております。
- Rancher Serverにログインできること
- Rancherに管理対象となるクラスターを連携済みであること
- 過去の記事にてEC2を利用して構築したKubernetesクラスターをRancherに登録する手順を紹介しております。
- 管理対象クラスターにrancher-monitoringをインストール済みであること
- rancher-monitoringのインストール方法については前回の記事にて紹介しております。
動作環境
今回はAmazon EC2を利用して構築したKubernetesクラスターにLonghornをインストールし、ストレージ管理のデモを行います。動作環境は以下の通りです。
- ノード台数※1
- Control Plane: 3
- Worker Node: 2
- インスタンスサイズ: t3.xlarge
- vCPU: 4
- メモリ: 16GiB
- OS: Ubuntu
- ストレージ
- EBS gp3 50GB x 5
- S3バケット x 1
※1: Longhornは最低3台のノードを利用することが推奨されています。詳しくは公式ドキュメント: Minimum Recommended Hardwareの項目をご参照ください。
構築イメージ
今回はRancherのダッシュボードから管理対象となるKubernetesクラスターにLonghornをインストールします。kubectlやHelmを利用して各クラスターに直接インストールすることもできますが、Rancherの統合管理機能を活用することで、Longhornのモニタリングを簡単に設定することができます。
導入後のイメージは以下の通りです。
バージョン情報
- Longhorn: 1.7.2※
※本記事執筆時点における最新バージョン
Longhornのインストール
Rancherにログインし、サイドバーの[Apps]→[Charts]を選択します。
チャート一覧からLonghornを選択します。
デフォルト設定のまま[Install]を押下します。
インストールが完了すると、longhorn-systemというnamespaceが作成されます。
また、Rancher UIのサイドバーにLonghornという項目が追加されます。
ここからLonghornのダッシュボードに遷移することができます。
Longhornによるストレージ管理デモ
ここからはLonghornを使って、実際にストレージ管理する手順をご紹介します。
Volumeの作成と管理
Longhornをインストールすると、longhornという名前のStorage Classオブジェクトが作成されます。このStorage Classを利用することで、PersistentVolumeClaimを作成して動的にPersistentVolumeを作成することができます。
Rancherダッシュボードのサイドバーから[Storage]→[PersistentVolumeClaims]と移動します。
以下の設定でPVCを作成します。
- namespace: demo-ns
- name: demo-pvc
- Storage Class: longhorn
- Storage Size: 10GB
PVCを作成すると、PersistentVolumeが動的に作成されます。
続いて、作成したボリュームをPodにアタッチします。
Rancherダッシュボードの[Workloads]から[Deployments]に遷移し、Deploymentを新規作成します。
- namespace: demo-ns
- Storage: PersistentVolumeClaim
Deployment設定画面の[Pod]欄から[Storage]を選択し、先ほど作成したPVCを選択します。
Deployment設定画面のコンテナ設定画面の[General]に移動し、以下の設定を入力します。
- Container Image: alpine:latest
- Stdin: Yes
- TTYを有効化
コンテナ設定画面の[Storage]に移動し、マウントポイントを設定します。
- Mount Point: /data
[Create]ボタンを押下してDeploymentを新規作成します。
Podが起動したら、Pod一覧画面から作成したPodを選択し、[Execute Shell]を押下してPodにログインします。
先ほどマウントした/dataディレクトリに移動できることが確認できました。
以下のコマンドで500MBのダミーファイルを作成してみます。
$ dd if=/dev/zero of=dummy bs=1M count=500
マウントしたディレクトリ内に500MBのファイルを作成することができました。
次に、サイドバーの[Longhorn]からLonghornのダッシュボードに遷移します。
Longhornのダッシュボードのメニューから[Volumes]を選択すると、先ほど作成したPersistentVolumeがLonghornのダッシュボード上にも表示されています。
ボリューム名を押下し、ボリューム詳細画面に遷移すると、3つのノード上でボリュームのレプリカが作成されていることがわかります。
レプリカ作成数はLonghornインストール時の設定項目[Default Storage Class Replica Count]の値を変更することで調整できます。
このように、LonghornはStorage Classの設定に基づき、ボリュームを動的にプロビジョニングするとともに、自動的にレプリカを作成して冗長性を担保しています。
データ保護: SnapshotとBackup
続いて、ストレージ内のデータを保護する機能について紹介します。
Longhornはボリュームのスナップショットとバックアップを作成することができます。スナップショットは、Longhornボリュームのある時点での状態を記録したもので、各ボリュームのレプリカ内にローカルに保存され、Kubernetesクラスター内のノード上に配置されます。バックアップは、スナップショットを元に作成されるもので、ボリュームデータの特定時点の状態を外部のセカンダリストレージ(例: S3互換オブジェクトストレージやNFS)に保存します。スナップショットはクラスター内部でのデータ管理や復元に利用され、バックアップは外部ストレージに保存して災害復旧や長期保管の用途に適しています。
実際にスナップショットやバックアップを作成してみます。
まずはLonghornのダッシュボードの[Volumes]画面に遷移し、先ほど作成したボリュームを選択します。
ボリューム詳細画面の[Snapshots and Backups]まで移動し、[Take Snapshot]ボタンを押下します。
しばらくすると、スナップショットが作成されます。
続いて、バックアップを作成してみます。
バックアップを作成するには、保管場所となる外部ストレージが必要です。
本記事では、バックアップの保存先としてS3バケットを使用します。
利用可能なストレージに関しては、公式ドキュメントのSetting up a Targetの項目をご参照ください。
まずは、S3バケットを作成しておきます。
Rancherのダッシュボード[Storage]→[Secrets]へ移動し、namepsace [longhorn-system]上にAWSのクレデンシャル情報を格納するSecretを作成します。
本記事ではAddministratorAccess権限をアタッチしたIAMユーザーを使用しておりますが、必要となるIAM権限につきましては、公式ドキュメントのSet up AWS S3 Backupstoreの項目をご参照ください。
Secretを作成したら、Longhornダッシュボードに遷移し、[Settings]を選択します。
Settings内のBackup欄でS3への接続情報を入力し、[Save]ボタンをクリックして保存します。
- Backup Target: S3バケットのURL
- Backup Target Credential Secret: AWSクレデンシャル情報を格納したSecretのname
これでバックアップ保存先の設定が完了しましたので、実際にバックアップを作成してみましょう。
[Volumes]よりボリューム一覧画面に遷移し、作成したボリュームを選択します。
選択したボリュームの詳細画面内[Snapshots and Backups]にて、[Create Backup]を押下し、バックアップを作成します。
[Snapshots and Backup List]にてバックアップが作成されたことを確認することができます。
また、Longhornダッシュボードの[Backup]欄の方でもバックアップを確認することができます。
スナップショット・バックアップのライフサイクル
スナップショットの作成・削除、バックアップ作成はタイマー設定で自動化することができます。
今回は、以下の条件でスケジュールを設定してみます。
- スナップショット
- 取得:日次AM02:00
- 保持:直近2日分
- バックアップ
- 取得:日次AM04:00
- 保持:直近1日分
Longhornのダッシュボード[Volumes]画面より先ほど作成したボリュームを選択します。
[Recurring Jobs Schedule]欄の[Add]ボタンを押下し、以下のようにスケジュールを設定します。
- snapshot:
- Retain※2: 3
- cron: UTC17:00※3(02:00 JST) every day
- snapshot-delete:
- Retain: 2
- cron: UTC17:00(02:00 JST) every day
- backup
- cron: UTC19:00(04:00 JST) every day
※2: Retainはスナップショットやバックアップをいくつまで残すかを設定するパラメータです。snapshotのretain 3により直近3つまでスナップショットを保持します。snapshot-deleteのretain 2の設定により、3つ以上前のスナップショットは削除され、最終的にはスナップショットは2日分残るようになります。
※3: LonghornのタイムゾーンはUTCで設定されています。
指定した時刻(02:00AM)になると、直近2つ分のスナップショットが作成されます。
04:00AMになると、バックアップが1つ作成されます。
翌日以降のスナップショット、バックアップは最新のデータに上書きされます。
このように、スケジューリング機能を活用することで、効率的に保存データのライフスタイル管理を実現することができます。
例えば、スナップショットは日次で保存しつつ、長期保管用のバックアップは週次で保存するなどの設定をすることで、ストレージの利用効率を向上させることができます。
Rancherモニタリング機能との連携
RancherからLonghornを導入することで、Longhornが出力するメトリクスを利用したストレージ利用状況の可視化や異常検知を簡単に設定することができます。
まずは、LonghornのメトリクスをPrometheusが受信できるよう、Longhorn用のService Monitorを作成します。
Rancherダッシュボードのサイドバーから[Monitoring]→[Serivce Monitor]画面へ遷移し、Createボタンを押下してService Monitorの新規作成画面へ移動します。
Service Monitorを作成するテンプレートは以下の通りです。今回は公式ドキュメントに記載されているテンプレートをそのまま利用しています。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: longhorn-prometheus-servicemonitor
namespace: longhorn-system
labels:
name: longhorn-prometheus-servicemonitor
spec:
selector:
matchLabels:
app: longhorn-manager
namespaceSelector:
matchNames:
- longhorn-system
endpoints:
- port: manager
Service Monitorの作成が完了したら、Longhornから出力されたメトリクスを受信できているかGrafanaで確認します。
公式ドキュメントで紹介されているダッシュボードをインポートして、Grafana上でストレージの利用状況を可視化してみます。
上記Longhorn Example v1.1.0のページからJSONをダウンロードします。
Grafanaのサイドバーから[Dashboards]を選択し、画面右上の[New]タブから[Import]を選択します。
Import Dashboard画面にて[Upload dashboard JSON file]を選択し、先ほどダウンロードしたダッシュボード設定のJSONをアップロードします。
Import dashboard画面より、「Options」-「prometheus」からPrometheusを選択します。
Importを押下し、Longhorn用のダッシュボードを作成します。
ダッシュボード一覧画面からインポートしたダッシュボードを選択します。
これで、ストレージの利用状況や死活監視が可能になりました。
Longhornから取得できるメトリクスの一覧は公式ドキュメントのLonghorn Metrics for Monitoringページにて確認することができます。
まとめ
本記事では、Rancherを利用したLonghornの導入方法から、ストレージ管理の基本操作、そしてモニタリングの統合までを解説しました。
RancherとLonghornを連携することで、以下のようなメリットが得られます:
- 効率的なストレージ管理:GUIベースでの操作により、複雑な設定が簡単に。
- 高度なデータ保護:スナップショットやバックアップを利用した多層的な保護機能。
- 運用の可視化:Rancherモニタリングとの統合により、ストレージの状態やパフォーマンスをリアルタイムで監視可能。
特に、マルチクラスター環境でのストレージ管理や災害復旧の運用において、RancherとLonghornの組み合わせは大きな効果を発揮します。
本記事を参考に、ぜひRancherとLonghornを活用して効率的なストレージ管理を実現していただければ幸いです。