Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Cloud Native Developers JP • 早川 博(はやかわ ひろし) • 日本オラクル所属 – Java SE/EE, Microservices, DevOps • Ergodoxユーザー 2 自己紹介 @hhiroshell

Slide 3

Slide 3 text

Cloud Native Developers JP 発端 • KubernetesとKafkaを組み合わせたら、こんなことができるんじゃ ないかと思った – コマンドひとつでスケールアウト(brokerを追加) – brokerが落ちたときに、オペレーションなしで自律回復 • やってみよう! 3

Slide 4

Slide 4 text

Cloud Native Developers JP と、その前に…。 Kubernetesとはなにか1分で解説します。 4

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Cloud Native Developers JP KubernetesでKafkaを動かすまで 14

Slide 15

Slide 15 text

Cloud Native Developers JP どうやってKafkaを動かすか • Kubernetesにデプロイするモノの定義は、manifestファイル (json/yaml)に記述することができる • Kubernetesの管理用CLI(kubectl)を、manifestを噛ませて実行する と、所望のオブジェクト群がKubernetesに配備される → Kafka用のmanifestファイルを用意してkubectl実行! 15

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Cloud Native Developers JP Kubernetesでbroker群が立ち上がる仕組み • zookeeperが配備済みの状態から説明します 17 zookeeper Kubernetesクラスター ストレージ (e.g. AWS EBS)

Slide 18

Slide 18 text

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を編集するスクリプト

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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 マウント

Slide 22

Slide 22 text

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がストレージを プロビジョニング

Slide 23

Slide 23 text

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のプロセスを起動

Slide 24

Slide 24 text

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)

Slide 25

Slide 25 text

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 繰り返し…

Slide 26

Slide 26 text

Cloud Native Developers JP チュートリアルも公開中 • 具体的な操作手順やmanifestの中身については、チュートリアルを 参照ください – https://github.com/oracle-japan/cndjp3/blob/master/handson1.md 26

Slide 27

Slide 27 text

Cloud Native Developers JP Demo 27

Slide 28

Slide 28 text

Cloud Native Developers JP Demoでやること • Kubernetesにbrokerを配備 • スケールアウト • brokerの障害からの自律的な回復 28

Slide 29

Slide 29 text

Cloud Native Developers JP まとめ • KubernetesでKafkaがちゃんと動いた • スケールアウトは道半ば – broker追加まではいいが、そのあとパーティションをリバランスするところ でもうひと工夫必要 • brokerに障害があっても自律回復できることがわかった • manifestがありさえすればどこのKubernetes環境にもデプロイOK 29

Slide 30

Slide 30 text

Cloud Native Developers JP お知らせ Cloud NativeなOSSの勉強会シリーズ 「Cloud Native Developers JP」 30 https://cnd.connpass.com/event/

Slide 31

Slide 31 text

Cloud Native Developers JP Fin. 31