Slide 1

Slide 1 text

ゼットラボ須⽥が完全解説! Kubernetesに必要な ストレージの要件とは? ゼットラボ株式会社  ソフトウェアエンジニア 須⽥ ⼀輝(@superbrothers)

Slide 2

Slide 2 text

Kazuki Suda / @superbrothers ▶ ゼットラボ株式会社 ソフトウェアエンジニア ▶ ヤフー株式会社 「Kubernetes」黒帯 ▶ Kubernetes Meetup Tokyo, Cloud Native Deep Dive 共同主催者 ▶ Kubernetes アクティブコントリビュータ ▶ クラウドネイティブ・アンバサダ(CNCF)

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

ゼットラボ株式会社 / Z Lab Corporation ▶ 2015年に設⽴されたヤフー株式会社の100%⼦会社 ▶ インフラ基盤技術の調査・研究開発 ▶ ヤフー株式会社向けのマネージド Kubernetes サービスの開発 ▶ https://zlab.co.jp/

Slide 5

Slide 5 text

アジェンダ 1. Kubernetes とは何か 2. Kubernetes での永続ストレージ 3. ヤフーにおける Kubernetes の利⽤ 4. Kubernetes に必要なストレージの3つの要件 5. NetApp Trident 6. NetApp Trident のここが⾜りない 7. まとめ

Slide 6

Slide 6 text

Kubernetes とは何か

Slide 7

Slide 7 text

Kubernetes ▶ コンテナオーケストレーションツール + 複数のマシン(ノード)で構成されるクラスタに対して コンテナ(アプリケーション)の配備、設定、管理を⾏う ▶ Google の社内システムからインスパイアされた “Kubernetes is open source—a contrast to Borg and Omega,
 which were developed as purely Google-internal systems. “ Borg, Omega, and Kubernetes

Slide 8

Slide 8 text

ロードバランサ 永続ストレージ ホスト コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ ホスト ナ コンテナ ナ コンテナ ナ コンテナ ホスト コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ ホスト コンテナ コ コンテナ コ コンテナ コ Kubernetes デプロイ戦略 ネットワーク

Slide 9

Slide 9 text

Kubernetes ▶ 初期は Google のソフトウェアだったが、その後 Cloud Native Computing Foundation(CNCF)に譲渡され、 現在は CNCF がホストするオープンソースプロジェクト + CNCF は Linux Foundation 傘下の組織 ▶ 「10年以上に渡りコンテナを本番環境で運⽤してきた Google の経験と 多くの企業によるコミュニティの優れたアイデアと⼿法が組み込まれている」

Slide 10

Slide 10 text

BARE METAL

Slide 11

Slide 11 text

Kubernetes での永続ストレージ

Slide 12

Slide 12 text

Kubernetes での永続ストレージ ▶ 特定ベンダに依存せずにストレージの利⽤を抽象化している + PersistentVolume(永続ボリューム) + PersistentVolumeClaim(永続ボリュームの要求) + StorageClass(ストレージクラス) ▶ クラスタ管理者とアプリケーション開発者の役割が考慮されている + 管理者: クラスタ全体の管理者、アドミン権限を持つ + 開発者: 永続ボリュームを利⽤するアプリケーションをデプロイする

Slide 13

Slide 13 text

▶ 事前にプロビジョニングされた永続ボリューム ▶ 1つ1つが実際のボリュームに紐づく ▶ 2種類のボリュームのライフサイクル管理 + クラスタ管理者による静的管理 + 開発者の要求に基づいた動的なプロビジョニング(StorageClass) PersistentVolume(PV) PersistentVolume ボリューム NFS iSCSI 独⾃システム クラスタ管理者による静的管理の例 作成

Slide 14

Slide 14 text

PersistentVolume(PV) ▶ サイズ(e.g. 100GiB ▶ アクセスモード + ReadWriteOnce (RWO), ReadWriteMany (RWX), ReadOnlyMany (RWO) ▶ 再要求ポリシ + Retain(そのまま)、Delete(PV 削除)、Recycle(データ削除) ▶ ボリュームへの接続情報

Slide 15

Slide 15 text

PersistentVolumeClaim(PVC) ▶ 開発者による永続ボリュームの要求 ▶ 要求するボリュームの要件を定義する + サイズ、アクセスモード、StorageClass PersistentVolume PersistentVolumeClaim 開発者 作成 紐付け

Slide 16

Slide 16 text

StorageClass(SC) ▶ 開発者によるボリューム要求(PVC)に基づいて、 動的にストレージバックエンドからボリュームを払い出す ▶ クラスタ管理者が定義する PersistentVolume PersistentVolumeClaim storageClassName: fast fast StorageClass Provisioner ボリューム 開発者 2. 作成 3. 作成 1. 監視 AWS EBS Glusterfs etc ストレージ バックエンド

Slide 17

Slide 17 text

myapp Pod コンテナ PersistentVolume Claim PersistentVolume コンテナ コンテナからの永続ボリュームの利⽤ /data ボリューム

Slide 18

Slide 18 text

ヤフーにおける Kubernetes の利⽤

Slide 19

Slide 19 text

ヤフーにおける Kubernetes 利⽤ 2017年7⽉から⼀部のサービスの本番環境として利⽤を開始し、 現在では数多くのサービスで利⽤されている。

Slide 20

Slide 20 text

ヤフーの Kubernetes-as-a-Service(KaaS) ヤフー向けにゼットラボが開発するマネージド Kubernetes サービス。 オンプレミスの OpenStack 環境に Kubernetes クラスタを作成、管理する。 2016年7⽉から開発を始め、ヤフーの Kubernetes の利⽤を⽀える。 https://speakerdeck.com/superbrothers/the-technology-behind-managed-kubernetes-service-of-yahoo-japan

Slide 21

Slide 21 text

障害の発⽣したノードをクラスタから⾃動的に削除し、新たに必要なノードを クラスタに追加する。 クラスタのセルフヒーリング ノード 1 ノード 2 ノード 3 KaaS 追加 削除

Slide 22

Slide 22 text

⼀定数のノードを順々にアップグレードしていくことで、 クラスタの無停⽌アップグレードを実現している。 クラスタのローリングアップデート v1.15.0 v1.15.0 v1.16.2 KaaS 追加 v1.15.0 v1.15.0 v1.16.2 KaaS 削除

Slide 23

Slide 23 text

次の挑戦: ステートレスからステートフルへ ▶ これまでは、状態を持たないHTTP サーバやアプリケーションサーバ (12 Factor App)の実⾏に注⼒ + ステートレスアプリケーションは、問題が発⽣したら単に再起動すれば復 旧するため、Kubernetes と相性がよく簡単に導⼊できる ▶ ⼀⽅で、データとして状態を保持するデータベースや分散システムといった ステートフルアプリケーションも社内には多く存在する + ステートフルアプリケーションも Kubernetes の強⼒な機能を 利⽤して運⽤したい

Slide 24

Slide 24 text

次の挑戦: ステートレスからステートフルへ ▶ 我々の KaaS ではクラスタのセルフヒーリングやアップグレードによって ノードが削除される + ステートレスでは⼈間が介在することなく⾃動的に回復する ▶ しかし、ステートフルアプリケーションではノードのローカルストレージに データを保持すると消失してしまう + データは外部の永続ストレージに保存しなければならない

Slide 25

Slide 25 text

Kubernetes に必要な ストレージの3つの要件

Slide 26

Slide 26 text

Kubernetesに必要なストレージの3つの要件 1. ストレージ⾃体の信頼性と運⽤ 2. マルチテナント(適切な権限管理とQuota) 3. 動的プロビジョニングのサポート

Slide 27

Slide 27 text

1. ストレージ⾃体の信頼性と運⽤ ▶ ストレージシステム⾃体が信頼できることが⼤前提 ▶ Kubernetes 上にストレージシステムを構築する Rook や OpenEBS といった オープンソースの SDS 等も存在するが… + 安定運⽤するにはソースコードレベルで理解し、加えてKubernetesに 精通した⼈らで構成されたチームが必要 + ストレージは技術的に特に難しく、またビジネスとしてストレージ⾃体に 強みを持ちたいわけではない + 格納するデータの価値によっては検討の余地あり

Slide 28

Slide 28 text

2. マルチテナント(適切な権限管理とQuota) ▶ 不必要なボリュームの操作を禁⽌したい ▶ 不必要なボリュームのマウントを禁⽌したい ▶ 他からのリソース消費に影響を受けたくない

Slide 29

Slide 29 text

3. 動的プロビジョニングのサポート ▶ 開発者によるセルフサービスで必要なときに必要なだけプロビジョニングする + クラスタ管理者およびストレージ管理者の負担軽減 + ボリューム提供までのリードタイムの削減 開発者 クラスタ管理者 PersistentVolumeClaim 20Gi, ReadWriteOnce storageClass: fast StorageClass fast SC SC PV: 20Gi PVC の作成 動的な プロビジョン StorageClass の作成

Slide 30

Slide 30 text

どのストレージシステムを選択するか NetApp ONTAP

Slide 31

Slide 31 text

1. ストレージ⾃体の信頼性と運⽤ 社内で⼗分な実績と運⽤経験がある

Slide 32

Slide 32 text

2. マルチテナント(適切な権限管理とQuota) ▶ 他のサービスからのボリュームの操作を禁⽌したい SVM (vserver) ▶ 他のサービスからのボリュームのマウントを禁⽌したい export-policy(NFS), igroup(iSCSI) ▶ 他のサービスのリソース消費に影響を受けたくない SVM 毎にアグリゲートを分ける

Slide 33

Slide 33 text

3. 動的プロビジョニングのサポート NetApp Trident: Storage orchestrator for containers

Slide 34

Slide 34 text

NetApp Trident Storage orchestrator for containers

Slide 35

Slide 35 text

NetApp Trident ▶ コンテナ向けのストレージオーケストレータ + ボリュームの動的プロビジョニングと管理 ▶ NetApp 社が開発するソフトウェアで完全にオープンソース + https://github.com/NetApp/trident + https://netapp-trident.readthedocs.io/ ▶ サポートするプラットフォーム + Kubernetes(CSI), Docker(Volume plugin)

Slide 36

Slide 36 text

サポートするデータプラットフォーム ▶ ONTAP (AFF/FAS/Select/Cloud) ▶ Element (HCI/SolidFire) ▶ SANtricity (E/EF-Series) ソフトウェア ▶ Azure NetApp Files ▶ NetApp Cloud Volumes for AWS, GCP

Slide 37

Slide 37 text

主な機能(バージョン 19.10.00) ▶ StorageClass によるボリュームの動的プロビジョニング ▶ ボリュームスナップショット ▶ NFS ボリュームのリサイジング ▶ iSCSI ボリュームのリサイジング ▶ 既存ボリュームのインポート

Slide 38

Slide 38 text

Kubernetes ノード CSI Trident Node Pod Pod ノード CSI Trident Node CSI Trident Controller ボリュームの作成、削除 ボリュームのアタッチ/デタッチ ボリュームのリサイズ スナップショットの作成 ボリュームのマウント/アンマウント

Slide 39

Slide 39 text

ノード Pod Pod ノード Pod ontap-file SC ontap-block SC データ LIF データ LIF 管理 LIF SVM アグリゲート FlexVol FlexVol FlexVol export-policy (ip) igroup (iqn) SVM SVM クラスタ クラスタ クラスタ ONTAP 9

Slide 40

Slide 40 text

Trident のここがスゴい! ▶ しっかり動く ▶ オープンソースソフトウェア(OSS)である + トラブルシュート時にソースコードが参照できることは⼤きなメリット + NetApp Corporate Contributor License Agreement に 同意すればパッチもマージしてくれる ▶ Kubernetes のリリースサイクルにしっかり追従してる + Trident は、3ヶ⽉に⼀度のリリースで最新バージョンに追従!

Slide 41

Slide 41 text

ヤフーでの NetApp Trident の利⽤ ▶ 2019年9⽉時点で検証を完了 ▶ 2020年4⽉から本番での利⽤を開始予定 ▶ 今後はマルチAZ/リージョンを⾒据えて、MetroCluster を検証予定

Slide 42

Slide 42 text

NetApp Trident のここが⾜りない

Slide 43

Slide 43 text

NetApp Trident のここが⾜りない 1. export-policy(NFS), igroup(iSCSI)の動的な更新をサポートしていない 2. メトリクス(指標)をサポートしていない 3. ONTAP SVM のメトリクスを公開してほしい 4. Trident の開発を github.com でやってほしい 5. SVM レベルで Quota を設定したい

Slide 44

Slide 44 text

まとめ

Slide 45

Slide 45 text

まとめ ▶ Kubernetes とは + コンテナオーケストレーションツール + 複数のマシンで構成されるクラスタに対して コンテナ(アプリケーション)の配備、設定、管理を⾏う ▶ Kubernetes での永続ストレージ + 特定ベンダに依存せず永続ボリュームの利⽤を抽象化 + PersistentVolume, PersistentVolumeClaim, StorageClass

Slide 46

Slide 46 text

まとめ ▶ ヤフーにおける Kubernetes の利⽤ + 2019年7⽉時点で400クラスタ以上 + ステートレスからステートフルへ ▶ Kubernetes で必要なストレージの3つの要件と NetApp ONTAP 1. ストレージ⾃体の信頼性と運⽤ ヤフーでの運⽤実績 2. マルチテナント SVM とアグリの分離 3. 動的プロビジョニングのサポート NetApp ONTAP + Trident

Slide 47

Slide 47 text

まとめ ▶ NetApp Trident + Kubernetes での永続ボリュームの動的プロビジョニングと管理 + 完全にオープンソースソフトウェア + ONTAP ほか、いくつかのデータプラットフォームをサポート ▶ ヤフーでの NetApp Trident の利⽤ + 2020年4⽉から本番での利⽤を開始予定 + 次のチャレンジは + MetroCluster + ステートフルアプリケーション on Kubernetes

Slide 48

Slide 48 text

© 2019 NetApp, Inc. All rights reserved. No portions of this presentation may be reproduced without prior written consent of NetApp, Inc. Specifications are subject to change without notice. NetApp and the NetApp logo are registered trademarks of NetApp, Inc. in the United States and/or other countries. All other brands or products are trademarks or registered trademarks of their respective holders. ありがとうございました