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
Satoru Takeuchi
PRO
August 27, 2022
Technology
1
580
Kubernetesコントローラのプログラミングモデル
Kubernetesにおいてシステムのあるべき状態を保つためのコントローラというプログラムのプログラミングモデルについて説明するスライドです。
Satoru Takeuchi
PRO
August 27, 2022
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Linuxのブートプロセス
sat
PRO
6
99
シェルのジョブ
sat
PRO
1
21
常駐サービスを実現するデーモンプロセス
sat
PRO
0
26
絶対殺すSIGKILLシグナルと絶対死なないプロセス
sat
PRO
3
91
シェルのセッション
sat
PRO
2
33
RubyでKubernetesプログラミング
sat
PRO
4
190
プロセスの生成 exec編
sat
PRO
1
44
プロセスの生成 fork&exec編
sat
PRO
0
38
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
38
Other Decks in Technology
See All in Technology
結果的にこうなった。から見える メカニズムのようなもの。
recruitengineers
PRO
1
120
20250307_エンジニアじゃないけどAzureはじめてみた
ponponmikankan
2
200
CSPMとのつきあい方
nantokanare
0
110
Introduction to OpenSearch Project - Search Engineering Tech Talk 2025 Winter
tkykenmt
2
250
Snowflake ML モデルを dbt データパイプラインに組み込む
estie
0
120
リクルートのエンジニア組織を下支えする 新卒の育成の仕組み
recruitengineers
PRO
2
200
アジリティを高めるテストマネジメント #QiitaQualityForward
makky_tyuyan
1
490
目標と時間軸 〜ベイビーステップでケイパビリティを高めよう〜
kakehashi
PRO
8
1.1k
スクラムというコンフォートゾーンから抜け出そう!プロジェクト全体に目を向けるインセプションデッキ / Inception Deck for seeing the whole project
takaking22
3
210
JAWS FESTA 2024「バスロケ」GPS×サーバーレスの開発と運用の舞台裏/jawsfesta2024-bus-gps-serverless
ma2shita
3
410
2025/3/1 公共交通オープンデータデイ2025
morohoshi
0
120
入門 PEAK Threat Hunting @SECCON
odorusatoshi
0
190
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
69
10k
Gamification - CAS2011
davidbonilla
80
5.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
134
33k
4 Signs Your Business is Dying
shpigford
183
22k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Into the Great Unknown - MozCon
thekraken
35
1.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
660
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Unsuck your backbone
ammeep
669
57k
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はシステムをユーザが決めた「あるべき姿」に保つ • あるべき姿を記述するためにリソースという概念がある • クラスタの現状とあるべき姿のギャップを埋める処理をするプログラムを「コントロー ラと呼ぶ」 • コントローラはあるべき姿を保つために冪等性を保持するよう動く