Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kubernetesコントローラのプログラミングモデル
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Satoru Takeuchi
PRO
August 27, 2022
Technology
1
650
Kubernetesコントローラのプログラミングモデル
Kubernetesにおいてシステムのあるべき状態を保つためのコントローラというプログラムのプログラミングモデルについて説明するスライドです。
Satoru Takeuchi
PRO
August 27, 2022
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
書籍執筆での生成AIの活用
sat
PRO
1
290
ChatGPTに従って体調管理2026
sat
PRO
0
150
eBPF
sat
PRO
1
110
waruiBPF
sat
PRO
0
110
eBPFとwaruiBPF
sat
PRO
5
3.8k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
1
100
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
200
様々なファイルシステム
sat
PRO
0
340
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
430
Other Decks in Technology
See All in Technology
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
330
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
150
Greatest Disaster Hits in Web Performance
guaca
0
260
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
310
ランサムウェア対策としてのpnpm導入のススメ
ishikawa_satoru
0
170
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
960
AWS Network Firewall Proxyを触ってみた
nagisa53
1
240
15 years with Rails and DDD (AI Edition)
andrzejkrzywda
0
200
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
810
Context Engineeringの取り組み
nutslove
0
360
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
We Have a Design System, Now What?
morganepeng
54
8k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
55
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to build a perfect <img>
jonoalderson
1
4.9k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
240
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
Making the Leap to Tech Lead
cromwellryan
135
9.7k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
640
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
The SEO identity crisis: Don't let AI make you average
varn
0
290
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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はシステムをユーザが決めた「あるべき姿」に保つ • あるべき姿を記述するためにリソースという概念がある • クラスタの現状とあるべき姿のギャップを埋める処理をするプログラムを「コントロー ラと呼ぶ」 • コントローラはあるべき姿を保つために冪等性を保持するよう動く