$30 off During Our Annual Pro Sale. View Details »

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. Operator を導入してみよう
    ~ MinIO Operator 編 ~
    June 22, 2021 @nnstt1
    Kubernetes Novice #11

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. Local Persistent Volume

    View Slide

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

    View Slide

  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 のボリュームマウント時

    View Slide

  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

    View Slide

  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 で
    ノードとマウントパスを指定

    View Slide

  13. Krew

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  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.

    View Slide

  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
    -----------------

    View Slide

  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.
    <とてもカンタン!

    View Slide

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

    View Slide

  21. まとめ

    View Slide

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

    View Slide