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
970
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
モダンインフラの基礎を学ぼう!実践コンテナ入門
bells17
2
220
Kubernetes Code Contribution入門
bells17
5
1k
Dev ContainersとTestcontainers
bells17
3
450
アーキテクチャから学ぶKubernetesの全体像
bells17
20
13k
Controllerを作ってみよう ~ Kubernetes Controllerハンズオン ~
bells17
7
1k
Kubernetesに対する理解を高めてKubernetesの「わからない」を減らそう
bells17
19
4.6k
KubernetesとCoreDNSについて理解する
bells17
3
2.5k
KEP-3063: Dynamic resource allocation
bells17
0
370
kube-proxy入門
bells17
9
2.2k
Other Decks in Programming
See All in Programming
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
110
Quine, Polyglot, 良いコード
qnighy
4
640
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
130
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.3k
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
930
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
880
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
Arm移行タイムアタック
qnighy
0
330
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
CSC509 Lecture 09
javiergs
PRO
0
140
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Navigating Team Friction
lara
183
14k
KATA
mclloyd
29
14k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
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_