LonghornでS3へのバックアップ設定

#### 今回の内容
今回はRancher経由でkubernetesクラスタにLonghornをインストールし、Longhornを利用してステートフルなアプリケーションをデプロイ後、S3にデータのバックアップを作成します。

``` :環境
Rancher: v2.7.0
Longhorn: v1.5.3
RKE2: v1.24.17+rke2r1
OS: Ubuntu22.04
```


#### Longhornとは
Longhornはkubernetesのためのソフトウェアディファインドストレージです。高可用で軽量で使いやすく、外部ストレージに依存しない作りとなっております。裏で外部ストレージを利用していてもいいですし、ローカルDiskでも問題ありません。Linux filesystemとして利用できるのであればLonghornでマウント可能です。
OSSで旧Rancher Labs(SUSEが買収)が開発しており、無料で全ての機能が利用可能です。
Longhornについては[こちら](https://longhorn.io/docs/1.5.3/)。

#### インストール方法
Longhornのインストール方法は3つあります。
1. kubectlでyamlを適用してのインストール
1. helmでのインストール
1. Rancher UIからのインストール

1.kubectlで適用する場合は以下のコマンドを適用します。
```
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml
```

2.helmの場合は以下のコマンドを適用します。
```
helm repo add longhorn https://charts.longhorn.io
helm repo update
kubectl create namespace longhorn-system 
helm install longhorn longhorn/longhorn --namespace longhorn-system
```

3.Rancherからのインストールでは、*Cluster tools*もしくは*Apps*の*Charts*からインストールできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/26954876-5d61-730b-5607-a2b021c89aa8.png)


#### Longhornを利用してVolumeをマウントする方法(Rancher経由)
Longhornに限らず、kubernetesでVolumeをマウントするには、Storage ClassがPersistent Volume provisionerを呼び出して、Persistent Volumeを確保し、実際のストレージに書き込む流れとなります。
PV領域を確保するために、ユーザはPersitent Volume Claimを利用しVolume確保を要求します。
Longhornを利用する場合はLonghornがStorage Classとなります。この辺りを整理するともっと複雑な話になりますが、大まかな流れは以下の画像の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/38aaef43-8a77-5c72-b0a3-ecd674197572.png)


Rancher Ui上からVolumeを確保するにはPVCのところから必要項目を入力すれば問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/63b1417b-ba7d-31e9-c9d9-00703381444d.png)

PVCを作成するとPVも作成され、Volumeが確保されます。

あとはDeploymentなどのリソースを作成する時にPodに今作成したPVをマウントしてあげることでステートフルなアプリケーションを作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/bcc87715-ad09-f4c8-5334-5ea54131fdb4.png)

するとLonghornのUI上でもVolumeがアタッチしていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/ffc33605-53d5-0ac8-4f90-aa1b89ebca59.png)

LonghornのUI上からスナップショットをとったり、Cronjobとしてスナップショットの作成を自動化することができますが、今回はバックアップが主題なので省略します。



#### LonghornでS3へのバックアップ設定
Longhornではバックアップの設定をするのに2つのステップが必要です。
1. IAMロールでの権限付与
1. Secret作成
1. バックアップ先の設定

1.のIAMロールでの権限付与は遥か昔に行っているので今回は行いませんが、設定としては[ここ](https://longhorn.io/docs/1.5.3/snapshots-and-backups/backup-and-restore/set-backup-target/#set-up-aws-s3-backupstore)の通りに設定すれば完了です。もしくは全権限を与えるか。。。(個人で利用する分には問題ありませんが、業務ではやめましょう)

2.のSecet作成ではRancher UI上からでは、Secretsで作成をクリックし、`Opaque`を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/c80b5834-8460-3f4c-0099-0cb84fb4cee3.png)

そして、1.で権限を付与したユーザのAccess KeyとSecret Access Keyを入力します。
この時**必ず**Namespaceに``Longhorn-system``を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/152b5c4d-aba8-7ca8-6808-16a85a79d2cc.png)

Secretを作成したら今度はLonghorn UI上での設定です。
Longhornの**Setting**の**General**から設定ができます。
この中で`Backup Target`と`Backup Target Credential Secret`に情報を入力してあげます。

バックアップターゲットでは、``s3://<your-bucket-name>@<your-aws-region>/``の形でURLを設定してあげる必要があります。また、バゲットの中でさらにディレクトリを切っている場合は、``s3://<your-bucket-name>@<your-aws-region>/mypath/``の形になります。
仮に`test`というバケット名で東京リージョン、サブディレクトリが、rancher-backの場合は以下の様に入れてあげます。
```
s3://test@ap-northeast-1/rancher-back/
```

そしてSeceretの欄に先ほど作成したAWSの資格情報を保存したSecretの名前を入力します。
今回は`aws-bukcup`です。それぞれ入力したのが以下の画像となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/ac85860d-c5a8-a26a-a87c-f15a61e92ef4.png)

入力後、一番したまでスクロールし`Save`ボタンを押します。
その後、Backupタブに遷移しエラーが表示されなければ正しく設定ができています。

ここまで来るとbackupが取得できる様になっています。
Volumeタブに遷移し、任意のVolumeを選択すると、`Create Backup`をクリックするとバックアップが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/faaeec74-c3ea-35be-2973-0fd93a583aea.png)

作成後、Backupタブで作成したバックアップの確認ができます。
万がトラブルがあってもこのバックアップからデータをリストアできる様になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2332364/a761b89e-e492-744b-2aeb-c83cd45bd2b2.png)


以上となります。
Rancherと組み合わせれば全ての手順をUI上から完結できる様になるのでとても便利ですね。
LonghornとRancherはFOSS(Free and OSS)ですので無料でフルの機能を利用できます。是非是非個人でも業務でも使ってみてはいかがですか。(サポートが必要な場合は、[SUSE](https://www.suse.com/ja-jp/)が商用サポートをしています。)