Slide 1

Slide 1 text

Operator を導入してみよう ~ MinIO Operator 編 ~ June 22, 2021 @nnstt1 Kubernetes Novice #11

Slide 2

Slide 2 text

自己紹介 ◼ インフラエンジニア • SQL Server • Ansible • Azure ◼ Kubernetes は趣味 • 最近はストレージ沼を覗いている ののし @nnstt1

Slide 3

Slide 3 text

今日の発表について ◼お話しすること ⚫ MinIO Operator を導入することで得られた知見 ✓ Krew, Local Persistent Volume ◼お話ししないこと ⚫ Operator とは何か ⚫ MinIO Operator の挙動, 使い方

Slide 4

Slide 4 text

なぜ 「Operator を導入してみよう」? ある程度 Kubernetes の基礎は分かってきた(つもり) 次は何をしよう… Operator は Kubernetes 運用のノウハウが詰まっている とりあえず Operator 入れてみるか ← イマココ Operator 導入を介して Kubernetes の知識を深めよう

Slide 5

Slide 5 text

MinIO とは ◼ S3 互換の分散オブジェクトストレージ ⚫ ハイブリッドクラウドで利用可能 ⚫ ローカル環境で簡単にオブジェクトストレージを構築可能 ⚫ かつて Rook のストレージプロバイダだった (v1.2 まで) ↓コウノトリ(フラミンゴじゃないの…) ↑発音はミンアイオー(ミニオじゃないの…)

Slide 6

Slide 6 text

MinIO Operator とは ◼ Kubernetes 上で MinIO をイイカンジに運用 テナント 利用者毎のオブジェクトストレージ領域 Operator によって管理 オブジェクトストレージ:アプリ向け コンソール:管理者向け MinIO Operator 今回はこれをインストール Kubernetes MinIO 用の Storage Class を提供

Slide 7

Slide 7 text

MinIO Operator インストール ◼ 前提条件 ⚫ Kubernetes バージョンが v1.19.0 以上 ⚫ MinIO テナント用の Namespace ⚫ volumeBindingMode: WaitForFirstConsumer の StorageClass ✓ Local Persistent Volume または OpenEBS Local PV 推奨 ⚫ kubectl プラグインマネージャー Krew インストール済み この 2 つを説明します

Slide 8

Slide 8 text

Local Persistent Volume

Slide 9

Slide 9 text

Local Persistent Volume ◼ ノードのローカルストレージを永続ボリュームとして使用 ⚫ 外部ストレージを準備しなくても PV を提供可能 ⚫ Node Affinity による Pod のスケジューリング ⚫ 動的プロビジョニング不可 Node ローカルストレージを 使うことを定義 マウントパスと Node Affinity を定義 Local PV を要求 PVC をマウント

Slide 10

Slide 10 text

Local Persistent Volume ◼ StorageClass apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer volumeBindingMode ✓ PV 割り当て(ストレージ消費)のタイミングを制御 • Immediate:即時 • WaitForFirstConsumer:Pod のボリュームマウント時

Slide 11

Slide 11 text

Local Persistent Volume ◼ PersistentVolume apiVersion: v1 kind: PersistentVolume metadata: name: PV-NAME spec: capacity: storage: 1Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage local: path: /mnt/minio/pv1 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - NODE-NAME

Slide 12

Slide 12 text

MinIO 用 Local Persistent Volume Node1 /mnt/minio/pv1 /mnt/minio/pv2 /mnt/minio/pv3 /mnt/minio/pv4 Node2 /mnt/minio/pv1 /mnt/minio/pv2 /mnt/minio/pv3 /mnt/minio/pv4 Node3 /mnt/minio/pv1 /mnt/minio/pv2 /mnt/minio/pv3 /mnt/minio/pv4 Node4 /mnt/minio/pv1 /mnt/minio/pv2 /mnt/minio/pv3 /mnt/minio/pv4 PV 毎に spec.local.path と spec.nodeAffinity で ノードとマウントパスを指定

Slide 13

Slide 13 text

Krew

Slide 14

Slide 14 text

kubectl プラグイン ◼ kubectl にサブコマンドを追加可能 ⚫ $PATH 配下に kubectl- で始まる実行可能ファイルを配置 /usr/local/bin/kubectl-foo $ kubectl foo I am a plugin named kubectl-foo $ kubectl foo version 1.0.0

Slide 15

Slide 15 text

Krew ◼ kubectl プラグインマネージャー ⚫ プラグインの検索/インストール/アップデート ⚫ プラグインは kubernetes-sigs/krew-index で管理 ✓ MinIO プラグインも登録されている

Slide 16

Slide 16 text

Krew ◼ Z Lab さんの記事がオススメ https://techblog.yahoo.co.jp/entry/2020081830014718/

Slide 17

Slide 17 text

MinIO プラグイン $ kubectl krew install minio Updated the local copy of plugin index. Installing plugin: minio Installed plugin: minio \ | Use this plugin: | kubectl minio | Documentation: | https://github.com/minio/operator/tree/master/kubectl-minio | Caveats: | \ | | * For resources that are not in default namespace, currently you must | | specify -n/--namespace explicitly (the current namespace setting is not | | yet used). | / / WARNING: You installed plugin "minio" from the krew-index plugin repository. These plugins are not audited for security by the Krew maintainers. Run them at your own risk.

Slide 18

Slide 18 text

MinIO Operator $ kubectl minio init namespace/minio-operator created serviceaccount/minio-operator created clusterrole.rbac.authorization.k8s.io/minio-operator-role created clusterrolebinding.rbac.authorization.k8s.io/minio-operator-binding created customresourcedefinition.apiextensions.k8s.io/tenants.minio.min.io created service/operator created deployment.apps/minio-operator created serviceaccount/console-sa created clusterrole.rbac.authorization.k8s.io/console-sa-role created clusterrolebinding.rbac.authorization.k8s.io/console-sa-binding created configmap/console-env created service/console created deployment.apps/console created ----------------- To open Operator UI, start a port forward using this command: kubectl minio proxy -n minio-operator -----------------

Slide 19

Slide 19 text

MinIO Tenant $ kubectl minio tenant create minio-tenant-1 \ --servers 4 \ --volumes 16 \ --capacity 4Gi \ --namespace minio-tenant-1 \ --storage-class local-volume Tenant 'minio-tenant-1' created in 'minio-tenant-1' Namespace Username: admin Password: 4c467817-1786-418e-a346-370b3c7c50ae Note: Copy the credentials to a secure location. MinIO will not display these again. <とてもカンタン!

Slide 20

Slide 20 text

MinIO Tenant ↑オブジェクトストレージ ↓管理コンソール

Slide 21

Slide 21 text

まとめ

Slide 22

Slide 22 text

まとめ ◼ Operator 導入が Kubernetes の理解を深めるキッカケに ⚫ MinIO Operator インストールでは Krew と Local Persistent Volume ⚫ Operator を導入することがゴールではない ⚫ けど、 色々触ってみるのも楽しい