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
ThirdPartyResource を使った Kubernetes as a Service...
Search
Shunya Murata
January 19, 2017
Programming
2
3.2k
ThirdPartyResource を使った Kubernetes as a Service の実装
Kubernetes Meetup Tokyo #3で発表した ThirdPartyResource を使った Kubernetes as a Service の実装 の資料です。
Shunya Murata
January 19, 2017
Tweet
Share
More Decks by Shunya Murata
See All by Shunya Murata
Kubernetes v1.19 Updates
shmurata
3
1.3k
プロダクションレディを目指した Kubernetes クラスタのアップグレード戦略/Strategy to upgrade Kubernetes clusters in Production
shmurata
9
4.2k
KubeConEU 2019 recap - VPA in-place update
shmurata
3
2.4k
Kubernetes上でアプリケーションを 運用するまでの道のり/The way to run applications with Kubernetes
shmurata
15
2.8k
Kubernetes Operator で実現する NoOps の世界 / How we accomplish NoOps by Kubernetes Operator.
shmurata
20
4.1k
180715-line-meetup.pdf
shmurata
3
1k
Other Decks in Programming
See All in Programming
Building a macOS screen saver with Kotlin (Android Makers 2025)
zsmb
1
150
Qiita Bash
mercury_dev0517
2
200
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1.6k
KawaiiLT 登壇資料 キャリアとモチベーション
hiiragi
0
110
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
0
820
サービスレベルを管理してアジャイルを加速しよう!! / slm-accelerate-agility
tomoyakitaura
1
180
リストビュー画面UX改善の振り返り
splcywolf
0
140
エンジニアが挑む、限界までの越境
nealle
1
180
AWS で実現する安全な AI エージェントの作り方 〜 Bedrock Engineer の実装例を添えて 〜 / how-to-build-secure-ai-agents
gawa
8
810
趣味全開のAITuber開発
kokushin
0
200
MCP調べてみました! / Exploring MCP
uhzz
2
2.3k
Rollupのビルド時間高速化によるプレビュー表示速度改善とバンドラとASTを駆使したプロダクト開発の難しさ
plaidtech
PRO
1
170
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Documentation Writing (for coders)
carmenintech
69
4.7k
Music & Morning Musume
bryan
47
6.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.4k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
Code Review Best Practice
trishagee
67
18k
Being A Developer After 40
akosma
91
590k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
How STYLIGHT went responsive
nonsquared
99
5.5k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
Building Applications with DynamoDB
mza
94
6.3k
Transcript
ThirdPartyResource を使った Kubernetes as a Service の実装 Z Lab Corporation
村⽥ 俊哉 稲津 和磨 1
Z Lab Corporation • 次世代インフラ基盤を調査・研究開発 • Kubernetes, Docker • Yahoo!
JAPAN の⼦会社 • https://zlab.co.jp 2
Kubernetes as a Service • 開発者がセルフサービスでクラスタを作成できるサービス • 作成したクラスタはフルマネージド • ⾃動アップデート
• ダウンタイムゼロ • ローリングアップデート • セルフヒーリング • ノード障害時に別のノードを作成して復旧 • ノードのオートスケール 3
Kubernetes as a Service 要件 • スケール性能 • 数万台規模まで利⽤できるようにしたい •
⾮同期 • サーバの構築などは時間がかかるため⾮同期にせざる負えない • 堅牢性 • フェイルオーバー • 処理を中断しても再開できること 4
実装⽅式検討 • 実装が複雑になりそうな分散システムが必要 • ノードの状態などを監視しながら、ノードの状態の変更に対応して 処理をする必要がある • 各リソースの状態を監視し、そのイベントに対応して処理を⾏うアー キテクチャが良さそう 5
None
Kubernetes のアーキテクチャ 7 Spec と Status の 差分の検知 差分の反映 差分の検知
Queue Status の同期 Resource 4QFD 4UBUVT API Server Controller Manager Other Resource Spec :あるべき状態 Status : 現在の状態
Kubernetes をフレームワークのように利⽤ • ThirdPartyResource • Informer Framework • RateLimitingQueue 8
Kubernetes をフレームワークのように利⽤ 9 Spec と Status の 差分の検知 差分の反映 差分の検知
RateLimitingQueue Status の同期 ThirdParty Resource Spec Status API Server Controller Other Resource InformerFramework アプリケーションの 実装に専念できる SyncLoop
apiVersion: extensions/v1beta1 kind: ThirdPartyResource metadata: name: hello-world.example.com description: "hello world
object" versions: - name: v1 • Kubernetes API にユーザ独⾃のリソースの API を追加するリソー ス • Kubernetes のリソースの⼀つ • 追加される API は CRUD の操作と watch をサポート ThirdPartyResource 10 API Server Pod Service Deployments HelloWorld
Informer Framework 11 Resource Spec Status API Server Informer Framework
watch diff cache OnAdd OnUpdate OnDelete • Kubernetes の Controller (ControllerManager) で利⽤されている • Watch API を利⽤して変更を検知してイベントハンドラを実⾏する • OnAdd, OnUpdate, OnDelete • Watch と対応した Cache をもっていて無駄な API へのアクセスを削減
RateLimitingQueue • RateLimiter を持つ Queue • 同じ key のオブジェクトのユニーク性を保証 •
エラーの場合 Delay を持たせて enqueue (retry) などが簡単にで きる 12 Informer Framework cache OnAdd OnUpdate OnDelete Sync loop エラーなら Delay して retry RateLimitingQueue
SyncLoop • Spec と Status の差分を確認し、Status を Spec へ近づけていく 処理を⾏う
Loop • アプリケーション⾃体の処理を実装する部分 13 • 実装時の注意した点 • いつ中断しても再開できるように • レースコンディションが発⽣しないように Spec と Status の 差分の検知 Status の同期 差分の反映
Controller の動作環境 • 開発した Controller は Kubernetes の Pod としてデプロイ
• Kubernetes API の 認証に ServiceAccount を利⽤できる • 標準の Client と同じものを⽤意すれば特に設定せずにデフォルト のアカウントを勝⼿に使⽤してくれる 14 Kubernetes Cluster API Server TPR TPR Controller Pod ServiceAccount
Kubernetes as a Service の ThirdPartyResource と Controller • ThirdPartyResources
• Kuberneteses • KubernetesClusters • Etcds • LoadBlancers • Machines • MachineSets • MachineDeployments • MachineImages • MachinePools 15 • Controllers • KubernetesController • KubernetesClusterController • EtcdController • LoadBlancerController • MachineController • MachineSetController • MachineDeploymentController • MachineImageController
DEMO
CaaS Kubernetes Cluster Kubernetes as a Service(CaaS) • Kubernetesクラスタを⽣成・管理するシステム 17
Create Read Update Delete API Server TPRs User Kubernetes Cluster Master Worker User Kubernetes Cluster Master Worker TPR Controllers Pods
ThirdPartyResource • KubernetesClusters • クラスタそのものを表す。Kubernetes リソースを管理する • Kubernetes • Master,Worker
の初期化スクリプトを⽣成し MachineDeployments を 管理する • MachineDeployments • MachineSets を管理しローリングアップデートを⾏う • MachineSets • Machines を指定数に保つように管理する • Machines • IaaS のマシンを管理する 18
デモ内容 • Kubernetes クラスタの作成 • Kubernetes のバージョンアップ • ローリングアップデート •
Worker Node のスケールアウト 19
まとめ • ThirdPartyResource を利⽤したアプリケーションの実装例として Kubernetes as a Service の紹介しました •
Kubernetes Like なアプリケーションが ThirdPartyResource, InformerFramework, RateLimitingQueue などを利⽤することで 簡単に実装できます 20
技術で新しい世界へシフトする。 WE ARE HIRING!
参考⽂献 • ThirdPartyResource • https://kubernetes.io/docs/user-guide/thirdpartyresources/ • Informer Framework • https://github.com/kubernetes/kubernetes/blob/v1.5.2/
pkg/client/cache/controller.go • RateLimitingQueue • https://github.com/kubernetes/kubernetes/blob/v1.5.2/ pkg/util/workqueue/rate_limitting_queue.go 22