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~

1e210dc7083cc282628ff071926b9351?s=128

ののし

June 23, 2021
Tweet

Transcript

  1. Operator を導入してみよう ~ MinIO Operator 編 ~ June 22, 2021

    @nnstt1 Kubernetes Novice #11
  2. 自己紹介 ◼ インフラエンジニア • SQL Server • Ansible • Azure

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

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

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

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

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

    ⚫ MinIO テナント用の Namespace ⚫ volumeBindingMode: WaitForFirstConsumer の StorageClass ✓ Local Persistent Volume または OpenEBS Local PV 推奨 ⚫ kubectl プラグインマネージャー Krew インストール済み この 2 つを説明します
  8. Local Persistent Volume

  9. Local Persistent Volume ◼ ノードのローカルストレージを永続ボリュームとして使用 ⚫ 外部ストレージを準備しなくても PV を提供可能 ⚫

    Node Affinity による Pod のスケジューリング ⚫ 動的プロビジョニング不可 Node ローカルストレージを 使うことを定義 マウントパスと Node Affinity を定義 Local PV を要求 PVC をマウント
  10. 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 のボリュームマウント時
  11. 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
  12. 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 で ノードとマウントパスを指定
  13. Krew

  14. kubectl プラグイン ◼ kubectl にサブコマンドを追加可能 ⚫ $PATH 配下に kubectl- で始まる実行可能ファイルを配置

    /usr/local/bin/kubectl-foo $ kubectl foo I am a plugin named kubectl-foo $ kubectl foo version 1.0.0
  15. Krew ◼ kubectl プラグインマネージャー ⚫ プラグインの検索/インストール/アップデート ⚫ プラグインは kubernetes-sigs/krew-index で管理

    ✓ MinIO プラグインも登録されている
  16. Krew ◼ Z Lab さんの記事がオススメ https://techblog.yahoo.co.jp/entry/2020081830014718/

  17. 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.
  18. 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 -----------------
  19. 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. <とてもカンタン!
  20. MinIO Tenant ↑オブジェクトストレージ ↓管理コンソール

  21. まとめ

  22. まとめ ◼ Operator 導入が Kubernetes の理解を深めるキッカケに ⚫ MinIO Operator インストールでは

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