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
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
コミュニティ紹介: Kubernetes Meetup Novice
bells17
1
110
社内活動の取り組み紹介 ~ スリーシェイクでこんな取り組みしてます ~
bells17
0
460
モダンインフラの基礎を学ぼう!実践コンテナ入門
bells17
2
260
Kubernetes Code Contribution入門
bells17
5
1.1k
Dev ContainersとTestcontainers
bells17
3
520
アーキテクチャから学ぶKubernetesの全体像
bells17
20
13k
Controllerを作ってみよう ~ Kubernetes Controllerハンズオン ~
bells17
7
1.1k
Kubernetesに対する理解を高めてKubernetesの「わからない」を減らそう
bells17
19
4.7k
KubernetesとCoreDNSについて理解する
bells17
3
2.8k
Other Decks in Programming
See All in Programming
rails newと同時に型を書く
aki19035vc
5
610
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
170
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
270
為你自己學 Python
eddie
0
500
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
400
php-conference-japan-2024
tasuku43
0
410
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1.2k
fs2-io を試してたらバグを見つけて直した話
chencmd
0
280
Flatt Security XSS Challenge 解答・解説
flatt_security
0
590
Zoneless Testing
rainerhahnekamp
0
150
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
180
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1366
200k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Practical Orchestrator
shlominoach
186
10k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Facilitating Awesome Meetings
lara
50
6.2k
Site-Speed That Sticks
csswizardry
2
220
Code Reviewing Like a Champion
maltzj
521
39k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Unsuck your backbone
ammeep
669
57k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
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_