Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Operator を導入してみよう ~MinIO Operator 編~ / Let's install Operator ~MinIO Operator~

Operator を導入してみよう ~MinIO Operator 編~ / Let's install Operator ~MinIO Operator~

ののし

June 23, 2021
Tweet

More Decks by ののし

Other Decks in Technology

Transcript

  1. 自己紹介 ◼ インフラエンジニア • SQL Server • Ansible • Azure

    ◼ Kubernetes は趣味 • 最近はストレージ沼を覗いている ののし @nnstt1
  2. 今日の発表について ◼お話しすること ⚫ MinIO Operator を導入することで得られた知見 ✓ Krew, Local Persistent

    Volume ◼お話ししないこと ⚫ Operator とは何か ⚫ MinIO Operator の挙動, 使い方
  3. なぜ 「Operator を導入してみよう」? ある程度 Kubernetes の基礎は分かってきた(つもり) 次は何をしよう… Operator は Kubernetes

    運用のノウハウが詰まっている とりあえず Operator 入れてみるか ← イマココ Operator 導入を介して Kubernetes の知識を深めよう
  4. MinIO とは ◼ S3 互換の分散オブジェクトストレージ ⚫ ハイブリッドクラウドで利用可能 ⚫ ローカル環境で簡単にオブジェクトストレージを構築可能 ⚫

    かつて Rook のストレージプロバイダだった (v1.2 まで) ↓コウノトリ(フラミンゴじゃないの…) ↑発音はミンアイオー(ミニオじゃないの…)
  5. MinIO Operator とは ◼ Kubernetes 上で MinIO をイイカンジに運用 テナント 利用者毎のオブジェクトストレージ領域

    Operator によって管理 オブジェクトストレージ:アプリ向け コンソール:管理者向け MinIO Operator 今回はこれをインストール Kubernetes MinIO 用の Storage Class を提供
  6. MinIO Operator インストール ◼ 前提条件 ⚫ Kubernetes バージョンが v1.19.0 以上

    ⚫ MinIO テナント用の Namespace ⚫ volumeBindingMode: WaitForFirstConsumer の StorageClass ✓ Local Persistent Volume または OpenEBS Local PV 推奨 ⚫ kubectl プラグインマネージャー Krew インストール済み この 2 つを説明します
  7. Local Persistent Volume ◼ ノードのローカルストレージを永続ボリュームとして使用 ⚫ 外部ストレージを準備しなくても PV を提供可能 ⚫

    Node Affinity による Pod のスケジューリング ⚫ 動的プロビジョニング不可 Node ローカルストレージを 使うことを定義 マウントパスと Node Affinity を定義 Local PV を要求 PVC をマウント
  8. 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 のボリュームマウント時
  9. 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
  10. 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 で ノードとマウントパスを指定
  11. kubectl プラグイン ◼ kubectl にサブコマンドを追加可能 ⚫ $PATH 配下に kubectl- で始まる実行可能ファイルを配置

    /usr/local/bin/kubectl-foo $ kubectl foo I am a plugin named kubectl-foo $ kubectl foo version 1.0.0
  12. 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.
  13. 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 -----------------
  14. 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. <とてもカンタン!
  15. まとめ ◼ Operator 導入が Kubernetes の理解を深めるキッカケに ⚫ MinIO Operator インストールでは

    Krew と Local Persistent Volume ⚫ Operator を導入することがゴールではない ⚫ けど、 色々触ってみるのも楽しい