この記事は「RookだらけのAdvent Calender」15日目の記事です。
昨日は、オブジェクトストレージの概要とRookからMinIOを構成する方法について解説しました。
本日は実際にMinIOを利用し、ファイルのアップロードと確認をKubernetesから行ってみます。
MinIO with Rookの最大の問題
昨日の投稿で書いても良かったのですが、当ブログの企画後に以下の知らせが入ってきました。
RookはCeph,EdgeFS,NFSなどをサポートしていますが、ろくにメンテされていないものも多々あります。それに対して最近、機能マージ後一切更新されていなかったMinioサポートを切るPRが出ました。今後もこういうことが増えるのではと推測していますhttps://t.co/oAdc1S9ACz
— sat (@satoru_takeuchi) December 12, 2019
MinIOはRookにマージされたものの、独自のOperator開発に注力しているようで、Rookへのコントリビューションがありません。その結果、サポートを切られるということになりそうです。
つまり、今回のRookによるMinIO構築はあと半年ほどで不可能になると予想されます。
とは言っても、今回はこのまま行きますが。
MinIOの利用
気を取り直して、今回構築したMinIOの利用方法を確認していきましょう。
昨日、接続確認に利用したUIからバケットの作成やファイルのPUTも出来ます。
ですが、それでは今回Kubernetes上に構築した意味が薄いものとなってしまいますので、今回はmcといわれるクライアントツールをPodとしてデプロイし、そこからMinIOの操作を行ってみます。
MCのPod起動と設定
昨日、MinIOのオブジェクトストアを作成したのと同じNamespace(rook-minio)に下記のStatefulSetをデプロイします。ここではMinIOが公式に提供しているmcのイメージを使っています。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mc-test
namespace: rook-minio
labels:
app: mc-test
spec:
serviceName: mc-test
replicas: 1
selector:
matchLabels:
app: mc-test
template:
metadata:
labels:
app: mc-test
spec:
containers:
- image: minio/mc
imagePullPolicy: Always
name: mc
command: ["/bin/sh"]
stdin: true
tty: true
Podが一つ起動しますので、そこに接続して設定作業を行います。
# mcのコンテナへ接続
kubectl exec -it -n rook-minio mc-test-0 /bin/sh
# 以降、mcのCLIを利用
# 利用前に(エンドポイントやアクセスキー、シークレットは環境に合わせること
/ mc config host add minio http://x.x.x.x ACCESS SECRET --api S3v4
# configに成功したら、server情報を確認
/ mc admin info server minio
● my-store-0.my-store.rook-minio.svc.cluster.local:9000
Uptime: 22 hours
Version: 2019-04-23T23:50:36Z
Storage: Used 60 MiB, Free 19 GiB
Drives: 2/2 OK
CPU min avg max
current 0.08% 0.08% 0.09%
historic 0.03% 0.11% 9.88%
MEM usage
current 68 MiB
historic 68 MiB
● my-store-1.my-store.rook-minio.svc.cluster.local:9000
Uptime: 22 hours
Version: 2019-04-23T23:50:36Z
Storage: Used 60 MiB, Free 19 GiB
Drives: 2/2 OK
CPU min avg max
current 0.08% 0.08% 0.09%
historic 0.03% 0.11% 10.42%
MEM usage
current 68 MiB
historic 68 MiB
● my-store-2.my-store.rook-minio.svc.cluster.local:9000
Uptime: 22 hours
Version: 2019-04-23T23:50:36Z
Storage: Used 60 MiB, Free 19 GiB
Drives: 2/2 OK
CPU min avg max
current 0.11% 0.12% 0.12%
historic 0.03% 0.12% 9.98%
MEM usage
current 68 MiB
historic 68 MiB
● my-store-3.my-store.rook-minio.svc.cluster.local:9000
Uptime: 13 hours
Version: 2019-04-23T23:50:36Z
Storage: Used 60 MiB, Free 19 GiB
Drives: 2/2 OK
CPU min avg max
current 0.09% 0.10% 0.12%
historic 0.03% 0.11% 9.48%
MEM usage
current 68 MiB
historic 68 MiB
昨日のKubernetesのPodと同様に4つのMinioサーバが起動していることが確認できます。
なお、mc configコマンドの詳細はこちらで確認下さい。
MCからバケット作成とファイル操作
mcコマンドにより、MinIOをUNIXライクなコマンドから利用することができます。
では、実際にバケットの作成と確認をしてみましょう。
# バケットtestbをmbコマンドで作成
/ mc mb minio/testb
Bucket created successfully `minio/testb`.
# lsコマンドでバケットを確認
/ mc ls minio
[2019-12-15 13:16:26 UTC] 0B testb/
# 作成したtestbバケットへ/etc/os-releaseをcpコマンドでコピー
/ mc cp etc/os-release minio/testb
etc/os-release: 164 B / 164 B xaaaaaaaaaaaaax 100.00% 4.19 KiB/s 0s
# testbバケットの内容を確認
/ mc ls minio/testb
[2019-12-15 13:24:48 UTC] 164B os-release
# catコマンドでtestbにコピーしたファイルの内容を確認
/ mc cat minio/testb/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.10.2
PRETTY_NAME="Alpine Linux v3.10"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
実際の運用では
mcコマンドをアプリケーションコンテナに同梱する、またはサイドカーとして起動することでここまで書いたようにmc cpなどのシンプルなコマンドでバックアップをMinIOに取ることができます。
また、mc mirrorコマンドを使うことでrsyncのようにオブジェクトストレージへ定期的な退避を行うことも出来ます。
こうしたシンプルなバックアップ運用が出来ることがMinIOの魅力と言えるでしょう。
まとめ
2回にわたり、RookによるMinIOの構築および利用について解説をしてきました。
残念ながら、MinIOはRookプロジェクトから外れる可能性が高いのですが、シンプルなオブジェクトストレージの学習・検証などには現時点で有用というのが私個人の感想です。
よろしくお願いします。