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
Metrics Server
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
bells17
February 15, 2022
Programming
1.5k
0
Share
Metrics Server
Kubernetes Novice Tokyo #16(
https://k8s-novice-jp.connpass.com/event/236328/)で発表したセッション資料です
。
bells17
February 15, 2022
More Decks by bells17
See All by bells17
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
1.1k
Amazon VPC CNIに学ぶCNI-LT版
bells17
2
260
コードを読んで理解するko build
bells17
1
570
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
530
スリーシェイクにおけるOSSの取り組み
bells17
4
660
コミュニティ紹介: Kubernetes Meetup Novice
bells17
1
340
社内活動の取り組み紹介 ~ スリーシェイクでこんな取り組みしてます ~
bells17
1
760
モダンインフラの基礎を学ぼう!実践コンテナ入門
bells17
2
500
Kubernetes Code Contribution入門
bells17
5
1.5k
Other Decks in Programming
See All in Programming
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4k
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
140
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.5k
Understanding Apache Lucene - More than just full-text search
spinscale
0
150
おれのAgentic Coding 2026/03
tsukasagr
1
120
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
810
Ruby and LLM Ecosystem 2nd
koic
1
1.4k
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.2k
Java 21/25 Virtual Threads 소개
debop
0
320
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
200
Claude Code Skill入門
mayahoney
0
460
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
8
3.9k
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
Measuring & Analyzing Core Web Vitals
bluesmoon
9
800
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
490
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
170
Evolving SEO for Evolving Search Engines
ryanjones
0
170
Git: the NoSQL Database
bkeepers
PRO
432
67k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
500
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Leo the Paperboy
mayatellez
6
1.6k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
92
Transcript
Metrics Server Kubernetes Novice Tokyo #16(2022/02/15) @bells17
▶ @bells17 ▶ Software Engineer ▶ 普段やってること: + Kubernetes 関連コンポーネントの開発
+ Kubernetes as a Service開発 ▶ Kubernetes SIG-Docs Japanese localization reviewer ▶ Kubernetes Internal Organizer ▶ #kubenews ▶ @bells17_
#kubenews ほぼ毎週⾦曜22:00~YouTubeで配信中 Kubernetes/Cloud Native関連のニュースを中⼼に技術雑談してます
今⽇話すこと ▶ metrics-serverとは? ▶ Kube API Server ▶ metrics-serverの実装 ▶
metrics-serverを利⽤するアプリケーション
注意点 ▶ metrics-server v0.6.1 での内容になります ▶ Kubernetesの基礎知識周りは細かい説明はあんまりしてないです
metrics-serverとは?
metrics-server ▶ Kubernetesのnode/podのメトリクスをKubernetes APIとして公開する ことができるようになる拡張API Server ▶ KubernetesのHPA/VPAを利⽤するためのデータソースとして利⽤される 他、kubectl topコマンドを通してメトリクスデータを⾒ることができる
ようになる ▶ HPA/VPAやkubectlに組み込まれているtopコマンドを利⽤するために必 要なアプリケーションであるため、個⼈的には実質Kubernetesのコアア プリケーションみたいな感じがしてる
拡張API Server(Extention API Server)
拡張API Server ▶ KubernetesのAPIサーバーは外部に⽴てたAPIサーバーによって拡張する ことができる ▶ 拡張API Serverを構築~APIServiceリソースを登録というプロセスによっ て指定groupのAPIリクエストを拡張API Serverに処理させることが可能に
なる
Kube API Server
Kube API Server ▶ Kubernetesの様々なデータ保存や取得、イベント通知を⾏うAPI Server ▶ Rest APIを中⼼としたAPI Serverを提供する
▶ API定義はProtocol Buffersによって⾏われる ▶ 定義したAPIはAPI Server側でOpenAPI形式に変換され、APIからスキーマ定義が 取得可能 ▶ etcdをデータ永続のためのデータストアとして使⽤ ▶ 独⾃リソース管理のための機能を提供 + Extension API Server + Custom Resource Definition(CRD)
Kube API Server Overview
API Serverの主なコンポーネント ▶ ServerChain: 認証/認可などの各種前処理を担当 ▶ Aggregator Server: リクエスト対象のgroupに応じて拡張API Serverや組み込
みのAPI Serverなどに処理を委譲 ▶ API Server/API Extentions Server: Kubernetes組み込みリソースを処理する API Server + API Serverが基本的な組み込みリソースの処理を担当 + API Extentions Serverが主にCRDリソースの処理を担当 ▶ Admission Controller: 永続化前のデータ書き換え/バリデーション処理を担当 + Admission WebhookもAdmission Controllerの1機能として実現してる ▶ Transformer: 永続化するデータの暗号化処理を担当 ▶ Storage: etcdなど実際のデータストアへのデータ保存/読み出しなどを担当
ServerChain
ServerChain ServerChainは各リクエストの処理前に実⾏される前処理になる ▶ HSTS/CacheControl/CORSといったHTTP headerを設定 ▶ リクエスト処理時間を記録 ▶ リクエスト⽤のaudit eventレコーダーを⽣成
▶ リクエスト情報を元にRequestInfoオブジェクトを⽣成 ▶ リクエストの種類を元にタイムアウト時間を設定 ▶ 認証 ▶ ユーザーのなりすまし設定 ▶ APIリクエストの優先度コントロール ▶ 認可 といったことを⾏なっている これらの前処理後に実際に要求した各種のリソース操作などの処理を⾏なっている
Aggregator Server
Aggregator Server ▶ Aggregator Serverは初期化時にAPI ServerとAPI Extensions ServerのOpenAPIス キーマ定義を読み取り、APIServiceリソースを⽣成する ▶
Aggregator ServerではAPIServiceリソースを監視するKubernetes Controllerが動 作していて、APIServiceリソースの変更に基づいて、動的にリクエストを処理する ためのhttp handlerの設定が⾏われる ▶ また、ユーザーが⼿動で追加したExtension API Serverについては、ユーザーが⼿ 動でAPIServiceリソースを作成することにより、設定した条件に基づいてリクエス トがExtension API Serverにプロキシされる ▶ API Extentions ServerやAPI Serverは、実際にはAggregator Serverに組み込まれて 動作するので、複数のHTTPサーバーが起動するわけではない (それぞれが別々に⾃⽴して起動できるような実装にはなっているよう)
Kube API Serverのより詳しい 説明はこちらの本で⾏なってます ▶ 技術書典: https://bit.ly/tbf-kube-api-server ▶ Booth: https://bit.ly/booth-kube-api-server
Kube API Serverの詳細が気になる⽅は 良ければ買ってください! 内容を短くまとめたセッション資料はこちら ▶ Kube API Server(資料) ▶ Kube API Server(セッション動画)
metrics-serverの実装
metrics-server Architecture
metrics-server Architecture ▶ APIService: metrics.k8s.ioグループの拡張API Serverとして登録 ▶ Extension API Server:
+ apigroup: metrics.k8s.io + Version: v1beta1 + リソース: nodemetrics/podmetrics ▶ Scraper: + Kubelet APIをコールしてworker nodeのメトリクスを取得 + エンドポイント: https://<host>:10250/metrics/resource + デフォルトのメトリクス取得間隔: 15秒 + ServiceAccountのkubeconfigの認証情報を使⽤してリクエスト + 取得したメトリクスをパース〜メモリにキャッシュ
metrics-serverを利⽤するアプリケーション
kubectl top
HPA/VPA ▶ HPA: + spec.metrics[].typeでResource/ContainerResourceを使⽤した際に メトリクスの取得に利⽤される ▶ VPA: + VPAのコンポーネントの1つであるVPA
Recommenderによる コンテナメトリクスの取得に利⽤される + VPAは以下の3つのコンポーネントによって構成される + Recommender: VPAの設定値に従ってPod resourceの推奨値を⽣成 + Updater: Recommenderが⽣成した推奨値になっていないPodをevictし て再⽣成を⾏う + Admission Plugin: Pod resourceにRecommenderの推奨値を設定する
https://raw.githubusercontent.com/kubernetes/design-proposals-archive/main/autoscaling/images/vpa-architecture.png
まとめ
metrics-serverを調査してみた感想 ▶ metrics-serverがどのようにメトリクスを収集し、拡張API Serverとしてデータを返してい るのか?の仕組みが理解できた ▶ 拡張API Serverの実際の実装を初めて読んだので作り⽅やユースケース例の勉強になった ▶ また、調査過程でKubelet
APIの認証⽅法にServiceAccountのkubeconfigにあるcacert/ keyを利⽤していることも把握できた
参考資料 ▶ https://github.com/kubernetes-sigs/metrics-server/tree/v0.6.1 ▶ https://github.com/kubernetes/kubernetes/tree/v1.23.3 ▶ https://github.com/kubernetes/autoscaler/tree/vertical-pod-autoscaler-0.10.0 ▶ https://medium.com/p/f73cb17888b7 ▶
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ ▶ https://github.com/kubernetes/design-proposals-archive/blob/main/autoscaling/vertical-pod-autoscaler.md
Thanks / Question? ▶ @bells17 ▶ Slide: https://speakerdeck.com/bells17 ▶ @bells17_