Longhornのスナップショット格納ストレージをhttpsのminioに保存をさせる

投稿者: | 1月 3, 2023

何気に長い間、できなくて困っていた事象。1000本ノックではなく1万本ノックくらいしていた気分。。。こういうことって無いだろうか?ある日突然、神降臨的に判明する。さすが今日、初詣に行った甲斐があるような。

 

閑話休題

 

LonghornでCSIストレージスナップショットを利用する場合、バックアップターゲットの設定が必要となる。サポートされているバックアップターゲットは、S3/S3互換のオブジェクトストレージとNFS v4サーバ。ただし、あくまでもローカルスナップショットなので、クラウド上のストレージは使いたくない。ここでは、minioを利用することにした。

実際の設定はhelmでインストールすればかなり簡単で、Longhornのドキュメントによると以下のコマンドで設定ができる。

まず、helmでのLonghornのインストール

helm install longhorn longhorn/longhorn --namespace longhorn-system --set defaultSettings.backupTarget="s3://backupbucket@us-east-1/" --set defaultSettings.backupTargetCredentialSecret="minio-secret"

次にLonghornのスナップショット格納用のminioの展開

kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/v1.4.0/deploy/backupstores/minio-backupstore.yaml

たったこれだけ。ただし、このminioはあくまでもテスト用なので、本番では使いたくない。それにもし、minioを他で設置していたとしたら、このminioではなく、設置済みのminioを使いたいところ。自分がもっていたminioは、自己証明書で動作するminio、つまりhttpsでアクセスできるminioだった。(この発想が長いクエストへ導くものとなった。。。)

 

実際の設定

実は順番が重要だったりする。

 

自己証明書で動作するminioの注意点

自己証明書は、CAから作った証明書であること。Veleroを使うときもCA.pemは必要なので、やっておいて損はない。具体的には、

  • /root/.minio/certs/public.crt
  • /root/.minio/certs/CAs/rootCA.pem 

が存在している必要がある。

 

 Minioのバケットを作成する

 mc mb local/<バケット名>

 

 Longhornのダッシュボードでの設定

Longhornのダッシュボードは、port-forwardさせてもいいし、Loadbalancer経由で露出しても構わない。認証なしでアクセスできるはず。 Longhornのダッシュボードを開きSettings->Backup TargetとBackup Target Credential Secretを入力して保存をする。

UntitledImage

 

secretファイルの作成

secretの変数は、base64エンコードにしなければならない。ちょっと面倒なので、以下のように実行する。

MCLOGINUSER=ユーザ名
MCLOGINPASSWORD=パスワード
MINIO_ENDPOINT="https://<MINIOのホスト名あるいは、IPアドレス>:9000"
MINIOCERTDIR=/root/.minio/certs
AWS_ENDPOINTS=`echo -n ${MINIO_ENDPOINT} | base64`
AWS_ACCESS_KEY_ID=`echo -n ${MCLOGINUSER} | base64`
AWS_SECRET_ACCESS_KEY=`echo -n ${MCLOGINPASSWORD} | base64`
AWS_CERT=`cat ${MINIOCERTDIR}/CAs/rootCA.pem | base64 | tr -d "\n"`
cat <<EOF > longhorn-minio.yaml
apiVersion: v1
kind: Secret
metadata:
  name: minio-secret-local
  namespace: longhorn-system
type: Opaque
data:
  AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
  AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
  AWS_ENDPOINTS: ${AWS_ENDPOINTS}
  AWS_CERT: ${AWS_CERT}
EOF
cat longhorn-minio.yaml

結果。以下のようなファイルが作成されるはず。

apiVersion: v1
kind: Secret
metadata:
  name: minio-secret-local
  namespace: longhorn-system
type: Opaque
data:
  AWS_ACCESS_KEY_ID: <base64で記載されたユーザ名>
  AWS_SECRET_ACCESS_KEY: <base64で記載されたパスワード>
  AWS_ENDPOINTS: <base64で記載されたhttps://XXXXX:9000>
  AWS_CERT: <すごーく長いbase64>

 

このファイルを適用する。

kubectl create -f longhorn-minio.yaml

 これで一応終わりのはず。

 

 ボリュームのバックアップやCSIスナップショットを作成すると

 Longhornのダッシュボードでは、

UntitledImage

 Minio上では、

UntitledImage

 となっているはずである。

 

何に苦労したのか?

  1. 先にSecretを登録してからダッシュボードで設定すると、AWS_CERTに改行か空白があると言われて正しく動かず。
  2. Backup Targetの記載が間違っていた。s3://<バケット名>@us-east-1/ とする必要があった。

これでLonghornのために余計なminioを展開する必要がなくなった。

 

 

コメントを残す