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

KubernetesでKafkaクラスターを動かしてみた

36bb9dcd778d2a9621d44e92425d0907?s=47 hhiroshell
March 15, 2018

 KubernetesでKafkaクラスターを動かしてみた

Kafka Meet Up Japan #4 (#kafkajp)の発表資料です。

36bb9dcd778d2a9621d44e92425d0907?s=128

hhiroshell

March 15, 2018
Tweet

Transcript

  1. Cloud Native Developers JP Kubernetesで Kafkaクラスターを動かしてみた @hhiroshell 1

  2. Cloud Native Developers JP • 早川 博(はやかわ ひろし) • 日本オラクル所属

    – Java SE/EE, Microservices, DevOps • Ergodoxユーザー 2 自己紹介 @hhiroshell
  3. Cloud Native Developers JP 発端 • KubernetesとKafkaを組み合わせたら、こんなことができるんじゃ ないかと思った – コマンドひとつでスケールアウト(brokerを追加)

    – brokerが落ちたときに、オペレーションなしで自律回復 • やってみよう! 3
  4. Cloud Native Developers JP と、その前に…。 Kubernetesとはなにか1分で解説します。 4

  5. Cloud Native Developers JP Kubernetesが実現すること 5 大きなリソースのプール

  6. Cloud Native Developers JP Kubernetesが実現すること 動け! 6

  7. Cloud Native Developers JP Kubernetesが実現すること コンテナ化されたアプリ はい! 7

  8. Cloud Native Developers JP Kubernetesが実現すること コンテナ化されたアプリ はい! 8

  9. Cloud Native Developers JP Kubernetesが実現すること 利用者からのリクエスト わー! 9

  10. Cloud Native Developers JP Kubernetesが実現すること がんばれ! 10

  11. Cloud Native Developers JP Kubernetesが実現すること 11 はい! 自動で複数のマシンに分散配置 (HWを意識しない)

  12. Cloud Native Developers JP Kubernetesが実現すること わー! コンテナが落ちたら自動で新たに立ち上げる 12

  13. Cloud Native Developers JP 発端(再掲) • KubernetesとKafkaを組み合わせたら、こんなことができる気がし てきた。 – コマンドひとつでスケールアウト(brokerを追加)

    – brokerが落ちたときに、オペレーションなしで自律回復 13
  14. Cloud Native Developers JP KubernetesでKafkaを動かすまで 14

  15. Cloud Native Developers JP どうやってKafkaを動かすか • Kubernetesにデプロイするモノの定義は、manifestファイル (json/yaml)に記述することができる • Kubernetesの管理用CLI(kubectl)を、manifestを噛ませて実行する

    と、所望のオブジェクト群がKubernetesに配備される → Kafka用のmanifestファイルを用意してkubectl実行! 15
  16. Cloud Native Developers JP manifestファイルの準備 • 先人の知恵を借りました m(_ _)m –

    https://github.com/Yolean/kubernetes-kafka – 手元のKubernetesのバージョン(1.7.x)に合わせて、Release v2.1.0を利用 – 環境に合わせて一部手直し • (参考)Helmを使って配備するものもあります – https://github.com/kubernetes/charts/tree/master/incubator/kafka 16 Helmは複数のmanifestをパッケージとして管理するためのツール。 多数のKubernetesオブジェクトのセットをデプロイするのに便利です。 i
  17. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • zookeeperが配備済みの状態から説明します 17 zookeeper Kubernetesクラスター

    ストレージ (e.g. AWS EBS)
  18. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • server.propertiesのテンプレートとそれを編集するスクリプトを ConfigMapオブジェクトに含めて配備する 18 zookeeper

    broker-config init.sh server.properties Kubernetesクラスター ストレージ (e.g. AWS EBS) ConfigMap server.propertiesのテンプレート server.propertiesを編集するスクリプト
  19. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • brokerを動かすためのPodの配備を開始 • VolumeにConfigMap内のファイルがコピーされる 19

    zookeeper broker-config init.sh server.properties init.sh server.properties Kubernetesクラスター ストレージ (e.g. AWS EBS) kafka-0 Pod ファイルをコピー Volume
  20. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • initContanerが立ち上がり、前ページのVolumeをマウント • init.shを実行して、環境に合わせてserver.propertiesを書き換え 20

    zookeeper broker-config init.sh server.properties init.sh server.properties Kubernetesクラスター ストレージ (e.g. AWS EBS) kafka-0 init-cofnig マウント init.shを実行して server.propertiesを書き換え initContainer
  21. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • brokerを可動させるコンテナを起動 • brokerのデータを保持するためのVolumeオブジェクトをマウント 21

    zookeeper kafka-0 broker-config init.sh server.properties broker init.sh server.properties Kubernetesクラスター ストレージ (e.g. AWS EBS) Container マウント
  22. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • PersistentVolumeClaim(PVC)に記述されたストレージの要件(容量、 サービスレベルなど)に従い、StorageClassがプロビジョニング 22 zookeeper

    kafka-0 broker-config init.sh server.properties broker init.sh server.properties Kubernetesクラスター ストレージ (e.g. AWS EBS) PersistentVolumeClaim(PVC) StorageClass PVCに記述された要件に従い、 StorageClassがストレージを プロビジョニング
  23. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • brokerのプロセスを起動する 23 zookeeper kafka-0

    broker-config init.sh server.properties broker init.sh server.properties Kubernetesクラスター ストレージ (e.g. AWS EBS) brokerのプロセスを起動
  24. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • brokerが起動した状態 24 zookeeper kafka-0

    broker-config init.sh server.properties broker init.sh server.properties Kubernetesクラスター ストレージ (e.g. AWS EBS)
  25. Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • 設定されたレプリカ数に達するまで繰り返し 25 zookeeper kafka-0

    broker-config init.sh server.properties broker container init.sh server.properties Kubernetesクラスター ストレージ (e.g. AWS EBS) kafka-1 init.sh server.properties kafka-1 繰り返し…
  26. Cloud Native Developers JP チュートリアルも公開中 • 具体的な操作手順やmanifestの中身については、チュートリアルを 参照ください – https://github.com/oracle-japan/cndjp3/blob/master/handson1.md

    26
  27. Cloud Native Developers JP Demo 27

  28. Cloud Native Developers JP Demoでやること • Kubernetesにbrokerを配備 • スケールアウト •

    brokerの障害からの自律的な回復 28
  29. Cloud Native Developers JP まとめ • KubernetesでKafkaがちゃんと動いた • スケールアウトは道半ば –

    broker追加まではいいが、そのあとパーティションをリバランスするところ でもうひと工夫必要 • brokerに障害があっても自律回復できることがわかった • manifestがありさえすればどこのKubernetes環境にもデプロイOK 29
  30. Cloud Native Developers JP お知らせ Cloud NativeなOSSの勉強会シリーズ 「Cloud Native Developers

    JP」 30 https://cnd.connpass.com/event/
  31. Cloud Native Developers JP Fin. 31