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
FastAPIでKubernetesを扱うときに役立つTips
Search
Hiroki Okui
December 07, 2022
Technology
1.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FastAPIでKubernetesを扱うときに役立つTips
Hiroki Okui
December 07, 2022
More Decks by Hiroki Okui
See All by Hiroki Okui
CUEとKubernetesカスタムオペレータを用いた新しいネットワークコントローラをつくってみた
hrk091
1
750
New Network Provisioning System Leveraging Kubernetes and Cloud Native Open Source
hrk091
2
220
マニフェストレスで使える IaC・CI/CD のSaaSプロダクト化への挑戦
hrk091
2
940
クラウドネイティブな新しいネットワークコントローラをつくる
hrk091
6
2.2k
内製DevOps基盤を大きく作り直してみた
hrk091
7
3.2k
React HooksとGraphQLで社内レガシーサービスを巻き取ってみたらものすごくはかどった話
hrk091
12
4.9k
ODTN and TIP collaboration with Whitebox Transponder 'Cassini'
hrk091
0
500
Expectation and Activities for Open and Disaggregated Transport Network Project
hrk091
0
120
Model-Driven SDN Experiences and Learnings with NSO
hrk091
0
220
Other Decks in Technology
See All in Technology
はてなのサービス基盤を支える Kubernetes《足腰》
masayoshimaezawa
0
420
AIで政治は変わるのか? — 中高生と考えたAI時代の民主主義(東海高校サタデープログラム)
eitarosuda
0
360
感情と身体を置き去りにしない、エンジニアの生きのこり方 ──いまから、ここから「自分の状態」を扱うという選択
saorimurooka
1
450
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
8
4.9k
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
170
AIに「使われる」時代のSaaS戦略 〜既存WebAPIのMCPサーバー化における開発ノウハウ〜
ekispert_api
0
260
技術・能力を向上する原理原則 #きのこセッションa #きのこ2026
bash0c7
0
190
Terraform 101 (初心者向け) 資料
shuadachi
0
160
Text-to-SQLをAgentCoreで実現し、生成されるSQLの精度を定量的に評価する
yakumo
2
380
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
320
そこにあるから地図ができる~位置を示す"モノ"を愉しむ~ - Interface 2026年6月号GPS特集オフ会 / interface_202606_GPS_offline
sakaik
1
180
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
560
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
304
22k
A Modern Web Designer's Workflow
chriscoyier
698
190k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
A better future with KSS
kneath
240
18k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
180
RailsConf 2023
tenderlove
30
1.5k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Become a Pro
speakerdeck
PRO
31
6k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
580
Transcript
#ochacafe FastAPIでKubernetesを 扱うときに役立つTips 2022/12/7 NTTコミュニケーションズ 奥井 OCHaCafe
Season6 #4
#ochacafe 自己紹介 NTTコミュニケーションズ Software Engineer 奥井 寛樹 略歴 • 伝送システムのSDNコントローラ開発
• DevOpsプラットフォーム開発 • IoTデータ収集基盤のモダナイゼーション @HirokiOkui 2
#ochacafe はじめに • FastAPIは、型安全性やOASの自動生成機能を備えた ASGIフレームワークで、さっとAPIを作るときに便利です • Kubernetes API Serverをwrapしてドメインロジックを 追加することで、簡易なXaaSがつくれます
• FastAPIからKubernetes API Serverを叩くときのTipsを4つご紹介します 3 Frontend API Kubernetes API Server TektonベースのCI/CDaaSを FastAPIを用いて作りました 構成イメージ
#ochacafe 1. k8s CRD => API => UI まで一気通貫で型を自動生成 •
FastAPIは、Pydantic型を用いることで「型指向開発」「 OASの自動生成」 「型のランタイム検査」などが可能になる • datamodel-codegenを用いると、OASやJSON SchemaからPydantic型を 自動生成できる => KubernetesのCRDから、Pydantic型を生成できる • Pydantic型を用いてAPIを定義するとFastAPIのOASを生成できるため、 openapi-generator-cli などを用いて、UIまで型を生成・流通できる Frontend API Kubernetes API Server k8s Custom Operator openapi-generator api client Pydantic CRD JSONSchema Go Struct datamodel-codegen generate OAS 4 CIで全自動化 できます
#ochacafe 2. kubernetes-clientを型対応する • Kubernetes API Machinery SIGから提供される公式のPython Client*1は、 typingをサポートしているが、型周りの体験が非常に悪い
• API callのresponseに型がない ◦ 汎用のUnion型になる ➞ 都度 型ヒントが必要 • dot notationで深い要素まで アクセス可能だが、 型がAnyになってしまう 5 *1: https://github.com/kubernetes-client/python from kubernetes import client from kubernetes.client import V1Namespace v1 = client.CoreV1Api() res = v1.read_namespace('test') # 汎用のUnion型 res: V1Namespace # 型ヒントを書いても ... res.spec # 子要素はAnyになる OpenAPIGeneratorで生成されており、 かつ古いversionのため(v4.3.0) (最新化を検討中:#1943) 実質、構造体の全てのレイヤで 型ヒントが必要に
#ochacafe 2. kubernetes-clientを型対応する 6 • そもそもFastAPIを使っているので、Pydantic型で扱いたい ◦ Pydantic型にすると、ランタイムチェックが効くし、 OASにも反映される •
kubernetes-clientをwrapして、Pydanticに対応する ◦ この機能を提供している OSSは(多分)ないので、自作が必要 ◦ Sample: https://github.com/hrk091/kubernetes-pydantic • Tips1の型自動生成を 実現するには、 上記の対応が必要 手間ですが、 FastAPIでk8sを制御 するならやるべき 要望いただければ メンテします 型ヒントなしで型が 決定しており、ネスト先の 型も推論できている
#ochacafe 3. kubernetes-clientをasync対応する • 公式のKubernetes Python Clientは、asyncに対応しているが、デフォルトは同期実行 • FastAPIのASGIを活かしてPerformance改善するために、asyncモードで動かすと良い ◦
k8s API Serverはリクエスト次第でレスポンスが良くないので、 blockingは回避すべし 7 都度async処理を書くと ドメイン層が汚れるので client内に隠蔽するとよい
#ochacafe 4: FastAPIのPerformanceに注意 • FastAPIは型のランタイム検査もしてくれるため便利だが、 大きなk8s Resourceを扱うと、CPU・メモリの消費がすごい ◦ さらに、uvicornのメモリリークもあり、メモリが開放されない •
型のランタイム検査をトグルする良い方法は現状ない (#5498) ◦ 検査対象外にしたい場所で、 Pydantic型の使用をやめるしかない • 性能が問題になる場合は、レスポンスのフィールドを 減らす工夫が必要 ◦ last-applied-configuration、managedFields等は削る ◦ 本当に必要なフィールドに限定する 8 uvicorn v0.18.3で メモリリークが 直ったそうです #1624 *1: https://github.com/tiangolo/fastapi/issues/1624 OOM kill
#ochacafe まとめ Tips1: k8s CRD => API => UIまで一気通貫で型を自動生成 Tips2:
kubernetes-clientを型対応する Tips3: kubernetes-clientをasync対応する Tips4: FastAPIのPerformanceに注意 9