$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kubernetesコントローラのプログラミングモデル
Search
Satoru Takeuchi
PRO
August 27, 2022
Technology
1
560
Kubernetesコントローラのプログラミングモデル
Kubernetesにおいてシステムのあるべき状態を保つためのコントローラというプログラムのプログラミングモデルについて説明するスライドです。
Satoru Takeuchi
PRO
August 27, 2022
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
利きプロセススケジューラ
sat
PRO
5
3.1k
俺とVSCode Python Debugger Extension
sat
PRO
1
190
コード再利用のしくみ ライブラリ
sat
PRO
3
55
AWKへの愛を語る
sat
PRO
3
530
syncコマンドのデータ同期 完了待ちやエラー検出
sat
PRO
0
85
動作中のLinux環境の全メモリを見る
sat
PRO
1
110
Linuxの時間を10秒止める
sat
PRO
2
210
プロセスへのメモリ割り当て4 - 実際に使うときにメモリを獲得するデマンドページング(実践編)
sat
PRO
1
140
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
sat
PRO
1
79
Other Decks in Technology
See All in Technology
検証と資産化を形にするプロダクト組織へ/tapple_pmconf2024
corin8823
1
8.7k
高品質と高スピードを両立させるソフトウェアQA/Software QA that Supports Agility and Quality
goyoki
8
1.3k
マルチプロダクト、マルチデータ基盤での Looker活用事例 〜BQじゃなくてもLookerはいいぞ〜
gappy50
0
130
ミスが許されない領域にAIを溶け込ませる プロダクトマネジメントの裏側
t01062sy
8
7.9k
asumikamというカンファレンスオーガナイザの凄さを語る / The Brilliance of Asumikam
tomzoh
1
290
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
52k
Explain EXPLAIN
keiko713
10
2.6k
LINEヤフーにおける超大規模プラットフォーム実現への挑戦と学び / Challenges and Lessons in Building an Ultra-Large-Scale Platform at LY Corporation
hhiroshell
3
1.1k
[GDG DevFest Bangkok 2024] - The Future of Retail E-commerce with Gemini AI
punsiriboo
0
300
まだチケットを手動で書いてるの?!GitHub Actionsと生成AIでチケットの作成を自動化してみた話 / 20241207 Yoshinori Katayama
shift_evolve
1
720
sre本読んだ感想
pisakun
0
220
WED Company Deck for Engineer
wed
2
3.7k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Facilitating Awesome Meetings
lara
50
6.1k
Fireside Chat
paigeccino
34
3.1k
The Invisible Side of Design
smashingmag
298
50k
RailsConf 2023
tenderlove
29
920
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
890
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
1
85
Transcript
kubernetesコントローラの プログラミングモデル Satoru Takeuchi twitter: satoru_takeuchi kanazawa.rb#120 LT大会ネタ その2
Kubernetesとは • 分散アプリ実行基盤 • 管理者はマニフェストと呼ばれるYAMLを書いて以下コマンド実行 ◦ kubectl apply app.yaml ◦
マニフェストは分散KVS etcdの中に「リソース」として永続化される • K8sはマニフェストの状態になるようにアプリを維持 ◦ リソース監視&クラスタの状態変化をするプログラムをコントローラと呼ぶ 2 node node アプリ アプリ アプリ アプリ Kubernetes etcd(分散kvs) リソース リソース 監視 あるべき状態にする Kubernetesクラスタ
アプリに対応するリソース • Podリソース: アプリに対応するPodを管理 ◦ アプリを構成する1個以上のコンテナを記述する • ReplicaSetリソース: アプリの冗長度を管理 ◦
アプリの冗長度を表現する replicasフィールドがある ◦ “replicas: 3”なら3冗長を保つ 3
ReplicaSetのマニフェストをapplyすると… • ReplicaSetリソースができる 4 node node Kubernetes etcd ReplicaSet リソース
replicas: 2 つくる Kubernetesクラスタ
ReplicaSetリソースができると… replicasフィールドの数だけのPodリソースができる 5 node node Kubernetes etcd ReplicaSet リソース replicas:
2 Kubernetesクラスタ Pod リソース Pod リソース つくる
Podリソースができると… node上にPodができる! 6 node node Kubernetes etcd ReplicaSet リソース replicas:
2 見る つくる Kubernetesクラスタ Pod リソース Pod リソース Pod Pod
コントローラのプログラミングモデル • 一回起動してからreconcilerという処理が頭から終わりまで走りきる ◦ 「起動したらイベントの種類に応じて処理をする」ではない • 一連の処理をreconciliation loopと呼ぶ ◦ 鍵は「冪等性」
• 例: Markdown viewコントローラ ◦ 資料: つくって学ぶKubebuilder ▪ https://zoetrope.github.io/kubebuilder-training/ ◦ markdown viewコントローラのアーキテクチャ ▪ https://zoetrope.github.io/kubebuilder-training/introduction/sample.html ◦ reconciliation loopの実装 ▪ https://github.com/zoetrope/kubebuilder-training/blob/main/codes/40_reconcile/controller s/markdownview_controller.go#L63-L104
Markdown viewコントローラ(想像しがちなもの) while (event := wait()) { case event {
CREATE_SERVICE: サービスを作る CREATE_DEPLOY: deploymentを作る(あとはk8sがpodを作ってくれる) CREATE_CM: configmapを作る } }
Markdown viewコントローラ(想像しがちなもの) while (event := wait()) { case event {
CREATE_SERVICE: サービスを作る CREATE_DEPLOY: deploymentを作る(あとはk8sがpodを作ってくれる) CREATE_CM: configmapを作る } } configmapがないという通 知がくる
Markdown viewコントローラ(想像しがちなもの) while (event := wait()) { case event {
CREATE_SERVICE: サービスを作る CREATE_DEPLOY: deploymentを作る(あとはk8sがpodを作ってくれる) CREATE_CM: configmapを作る } } deploymentがないという 通知がくる
Markdown viewコントローラ(想像しがちなもの) while (event := wait()) { case event {
CREATE_SERVICE: サービスを作る CREATE_DEPLOY: deploymentを作る(あとはk8sがpodを作ってくれる) CREATE_CM: configmapを作る } } サービスがないという通 知がくる
Markdown viewコントローラ(想像しがちなもの) while (event := wait()) { case event {
CREATE_SERVICE: サービスを作る CREATE_DEPLOY: deploymentを作る(あとはk8sがpodを作ってくれる) CREATE_CM: configmapを作る } } こうではない
Markdown viewコントローラ(本物) • reconciliation loopの実装 ◦ https://github.com/zoetrope/kubebuilder-training/blob/main/codes/40_reconcile/controllers/mar kdownview_controller.go#L63-L104 • なんらかのイベントで起き上がるとreconciliation
loopを呼ぶ ◦ MarkdownViewリソースを見てあるべき姿を知る ◦ markdownのファイル名が入った ConfigMapリソースを… ▪ あるべき姿を記述&更新すべきなら更新 ◦ アプリを動かすための Deploymentリソースを… ▪ あるべき姿を記述&更新すべきなら更新 ◦ アプリ使用者へのendpointとなるServiceリソースを… ▪ あるべき姿を記述&更新すべきなら更新 • 前から順番に全部あるべき姿にする • 冪等性を保つように作られている
まとめ • Kubernetesはシステムをユーザが決めた「あるべき姿」に保つ • あるべき姿を記述するためにリソースという概念がある • クラスタの現状とあるべき姿のギャップを埋める処理をするプログラムを「コントロー ラと呼ぶ」 • コントローラはあるべき姿を保つために冪等性を保持するよう動く