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
bells17
February 15, 2022
Programming
0
1.1k
Metrics Server
Kubernetes Novice Tokyo #16(
https://k8s-novice-jp.connpass.com/event/236328/)で発表したセッション資料です
。
bells17
February 15, 2022
Tweet
Share
More Decks by bells17
See All by bells17
コードを読んで理解するko build
bells17
1
330
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
400
スリーシェイクにおけるOSSの取り組み
bells17
4
470
コミュニティ紹介: Kubernetes Meetup Novice
bells17
1
220
社内活動の取り組み紹介 ~ スリーシェイクでこんな取り組みしてます ~
bells17
1
630
モダンインフラの基礎を学ぼう!実践コンテナ入門
bells17
2
360
Kubernetes Code Contribution入門
bells17
5
1.3k
Dev ContainersとTestcontainers
bells17
3
700
アーキテクチャから学ぶKubernetesの全体像
bells17
22
15k
Other Decks in Programming
See All in Programming
VS Code Update for GitHub Copilot
74th
2
650
Team operations that are not burdened by SRE
kazatohiei
1
310
Node-RED を(HTTP で)つなげる MCP サーバーを作ってみた
highu
0
120
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
21
4k
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
260
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
300
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
220
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
170
Rails Frontend Evolution: It Was a Setup All Along
skryukov
0
160
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
600
AI コーディングエージェントの時代へ:JetBrains が描く開発の未来
masaruhr
1
180
テスト駆動Kaggle
isax1015
0
300
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
Designing Experiences People Love
moore
142
24k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Optimizing for Happiness
mojombo
379
70k
Side Projects
sachag
455
42k
Done Done
chrislema
184
16k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Gamification - CAS2011
davidbonilla
81
5.4k
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_