Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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