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.2k
プロダクションレディを目指した 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
Formの複雑さに立ち向かう
bmthd
1
920
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
270
PEPCは何を変えようとしていたのか
ken7253
2
140
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
250
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
230
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
7
4.2k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
16
3.5k
技術を改善し続ける
gumioji
0
110
推しメソッドsource_locationのしくみを探る - はじめてRubyのコードを読んでみた
nobu09
2
140
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
2
410
ファインディLT_ポケモン対戦の定量的分析
fufufukakaka
0
910
Amazon Q Developer Proで効率化するAPI開発入門
seike460
PRO
0
120
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
42
7.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Done Done
chrislema
182
16k
Git: the NoSQL Database
bkeepers
PRO
427
65k
Building Applications with DynamoDB
mza
93
6.2k
RailsConf 2023
tenderlove
29
1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Writing Fast Ruby
sferik
628
61k
A Tale of Four Properties
chriscoyier
158
23k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Producing Creativity
orderedlist
PRO
344
40k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
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