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
520
Kubernetesコントローラのプログラミングモデル
Kubernetesにおいてシステムのあるべき状態を保つためのコントローラというプログラムのプログラミングモデルについて説明するスライドです。
Satoru Takeuchi
PRO
August 27, 2022
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Linuxの時間を10秒止める
sat
PRO
2
58
プロセスへのメモリ割り当て4 - 実際に使うときにメモリを獲得するデマンドページング(実践編)
sat
PRO
1
24
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
sat
PRO
1
29
プロセスへのメモリ割り当て(1) mmap
sat
PRO
2
45
プロセスへのメモリ割り当て2-Pythonのようなナウい言語ではどうやってメモリ獲得するのか
sat
PRO
1
38
サイボウズのOSPO
sat
PRO
3
230
無いはずのパーティションがある Phantom Atari Partition
sat
PRO
1
42
仮想アドレスから物理アドレスにはどうやって変換するの?
sat
PRO
2
79
仮想アドレスと物理アドレスの対応を実機確認してみよう
sat
PRO
0
58
Other Decks in Technology
See All in Technology
大規模ドラレコデータ収集・機械学習基盤を支える AWS CDK 〜導入・運用事例紹介〜
pemugi
0
110
CEL(Common Expression Language)で書いた条件にマッチしたIAM Policyを見つける / iam-policy-finder
fujiwara3
0
710
AOAI Dev Day - Opening Session
yoshidashingo
2
460
GoとアクターモデルでES+CQRSを実践! / proto_actor_es_cqrs
ytake
1
160
Github Actions 로 Android 팀의 효율성 극대화
hadonghyun
0
160
[2024最新版]AWS Control Towerを使ったセキュアなマルチアカウント環境の作り方
hiashisan
0
270
E2Eテスト自動化プラットフォームにおけるAIの活用
shift_evolve
0
190
AOAI Dev Day LLMシステム開発 Tips集
hirosatogamo
15
3.7k
セキュリティ研修 Day1【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
160
Luupの開発組織におけるインシデントマネジメントの変遷 ver.RoadtoSRENEXT2024
grimoh
1
270
シフトレフトで挑む セキュリティの生産性向上
sekido
PRO
0
270
AutomatedLabを使って内部ペンテストを勉強しよう! -やられ社内ネットワークの自動構築-
n_etupirka
1
610
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
124
16k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.4k
Fontdeck: Realign not Redesign
paulrobertlloyd
79
5.1k
Code Review Best Practice
trishagee
58
16k
The Mythical Team-Month
searls
217
43k
Faster Mobile Websites
deanohume
303
30k
Building Effective Engineering Teams - LeadDev
addyosmani
47
2.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
262
13k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
34
1.9k
Building Adaptive Systems
keathley
34
2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
129
32k
Art, The Web, and Tiny UX
lynnandtonic
291
20k
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はシステムをユーザが決めた「あるべき姿」に保つ • あるべき姿を記述するためにリソースという概念がある • クラスタの現状とあるべき姿のギャップを埋める処理をするプログラムを「コントロー ラと呼ぶ」 • コントローラはあるべき姿を保つために冪等性を保持するよう動く