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
Cluster AutoscalerをTerraformとHelmfileでデプロイしてPrometheusでモニタリングする / Deploy the Cluster Autoscaler with Terraform and Helmfile, Monitor with Prometheus
Search
Hidetake Iwata
November 13, 2019
Technology
3
1.6k
Cluster AutoscalerをTerraformとHelmfileでデプロイしてPrometheusでモニタリングする / Deploy the Cluster Autoscaler with Terraform and Helmfile, Monitor with Prometheus
Kubernetes Meetup Tokyo #25
2019.11.13
Hidetake Iwata
November 13, 2019
Tweet
Share
More Decks by Hidetake Iwata
See All by Hidetake Iwata
Rewrite Go error handling using AST transformation
int128
1
1.2k
認証の仕組みとclient-go credential plugin / authentication and client-go credential plugin
int128
7
7k
CLIでOAuth/OIDCを快適に利用する
int128
0
620
AppEngine × Spring Boot × Kotlin
int128
0
77
いつものJIRA設定
int128
1
150
Swaggerのテンプレートを魔改造した話 / Customize Swagger Templates
int128
1
4.5k
本番環境のリリースを自動化した話
int128
0
640
Swagger × Spring Cloud
int128
0
78
The Evolution of System Architecture
int128
0
150
Other Decks in Technology
See All in Technology
エンジニアリングマネージャーはどう学んでいくのか #devsumi / How Do Engineering Managers Continue to Learn and Grow?
expajp
4
1.3k
LLMアプリケーションの評価の実践と課題 ~PharmaXにおける今後の展望~
pharma_x_tech
2
170
20240717_イケコパ代表Copilot_in_Teams会社でこう使ってます
ponponmikankan
2
430
Azure OpenAI Service Dev Day / LLMでできる!使える!生成AIエージェント
masahiro_nishimi
3
810
AWSでRAGを作る法方
sonoda_mj
1
140
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
3
1.2k
VPoEの視点から見た、ヘンリーがサーバーサイドKotlinを使う理由 / Why Server-side Kotlin 2024
cho0o0
1
420
What if...? 처음부터 다시 LLM 어플리케이션을 개발한다면
huffon
0
1k
コンテナ・K8s研修 - 後半 Kubernetes 基礎&ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
1
120
フルリモートワークはエンジニアの夢を叶えたか? #cm_odyssey
mamohacy
2
600
AOAI Dev Day LLMシステム開発 Tips集
hirosatogamo
15
3.8k
初中級者用如何使用backlog -VALE TUDOEDITION-
in0u
0
140
Featured
See All Featured
What the flash - Photography Introduction
edds
65
11k
Pencils Down: Stop Designing & Start Developing
hursman
118
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Practical Orchestrator
shlominoach
185
10k
Designing for humans not robots
tammielis
247
25k
Creatively Recalculating Your Daily Design Routine
revolveconf
214
11k
Done Done
chrislema
179
15k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
17
1.5k
The Cult of Friendly URLs
andyhume
75
5.9k
GraphQLとの向き合い方2022年版
quramy
36
13k
Why Our Code Smells
bkeepers
PRO
332
56k
Facilitating Awesome Meetings
lara
46
5.8k
Transcript
Cluster Autoscalerを TerraformとHelmfileでデプロイして Prometheusでモニタリングする Kubernetes Meetup Tokyo #25 Hidetake Iwata
at NTT DATA (@int128)
2 Who are you? Software Engineer at NTT DATA, working
on DevOps and Cloud Native Technology R&D. Author of kubectl plugins (kubelogin, kauthproxy).
お話しすること • Cluster Autoscalerのデプロイ(Terraform, Helmfile) • Cluster Autoscalerのモニタリング(Prometheus, Grafana) お話ししないこと
• Cluster Autoscalerのマニアックな仕様 今日お話しすること 3 CI/CD Observability
クラスタに必要なリソース(CPU Request, Memory Request)に応じて、 ノード数を自動的に増減させるツール。 Kubernetes Cluster Cluster Autoscalerとは Worker
Nodes https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler クラスタに必要なリソースを計算する (Core) 例:メモリ不足で新しい Podが起動できないため、ノードの追 加が必要と判断する クラウド依存のスケール処理を行う (Cloud Provider) 例:AWSの場合はAuto Scaling GroupのDesired Capacityを 増やす 4
公式のHelm Chartを利用するとCluster Autoscalerを簡単にデプロイできる。(GCP やAzureの場合はマネージドサービスで設定できる) Helm Chart Cluster Autoscalerのデプロイ https://github.com/helm/charts/tree/master/stable/cluster-autoscaler stable/cluster-autoscaler
5 Helm Release Deployment Cluster Role Service Account ...
AWS Cluster Autoscalerのデプロイ AWSの場合、Cluster AutoscalerにIAM Roleを割り当てて、Cluster Autoscalerが Auto Scaling Groupを操作できる必要がある。
6 stable/cluster-autoscaler Deployment stable/kube2iam DaemonSet Auto Scaling Group IAM Role (Cluster Autoscaler) Cluster AutoscalerがAWS APIに アクセスする kube2iamが一時的なクレデン シャルを取得する IAM Role (Worker) https://github.com/jtblin/kube2iam
クラスタにデプロイするHelm Releasesを宣言的に管理できるツール。 すべてデプロイするには: $ helmfile sync YAMLとクラスタの差分を表示するには: $ helmfile diff
Helmfileとは https://github.com/roboll/helmfile 7 # helmfile.yaml releases: - name: cluster-autoscaler namespace: kube-system chart: stable/cluster-autoscaler values: - cloudProvider: aws awsRegion: {{ env "AWS_REGION" }} - name: kube2iam namespace: kube-system • Helm ReleasesのセットをYAMLで宣言できる • 設定値はインラインでも外部ファイルでも OK • テンプレートで環境変数を参照できる
Helm ReleasesはHelmfile、AWSのリソースはTerraformでデプロイする。 (Terraformでも管理できるけどHelmfileの方がおすすめ※) HelmfileとTerraformによるデプロイ Auto Scaling Group IAM Role (Worker)
stable/cluster-autoscaler helmfile.yaml *.tf Helmfile Terraform ※個人の感想です 8 stable/kube2iam IAM Role (CA)
CI Ops AWS Cluster Autoscalerのデプロイメントパイプライン Helmfile Terraform 9 Git Repository
Auto Scaling Group IAM Role (Worker) stable/cluster-autoscaler stable/kube2iam IAM Role (CA) helmfile.yaml *.tf HelmfileでGitOpsも可能らしい (未検証)
Cluster Autoscalerの動作確認(1/2) CPU Requestの大きなPodをデプロイすると、ノードが追加される。 10 I0927 11:50:35.158353 1 scale_up.go:263] Pod
echoserver/echoserver-74fd7d865f-vkzqb is unschedulable I0927 11:50:35.158391 1 scale_up.go:300] Upcoming 0 nodes I0927 11:50:35.158521 1 scale_up.go:423] Best option to resize: ASG_NAME I0927 11:50:35.158540 1 scale_up.go:427] Estimated 1 nodes needed in ASG_NAME I0927 11:50:35.158556 1 scale_up.go:529] Final scale-up plan: [{ASG_NAME 4->5 (max: 8)}] I0927 11:50:35.158572 1 scale_up.go:694] Scale-up: setting group ASG_NAME size to 5 I0927 11:52:36.144782 1 clusterstate.go:194] Scale up in group ASG_NAME finished successfully in 2m0.794268739s
Cluster Autoscalerの動作確認(2/2) デフォルトでは、Cluster Autoscalerがノードが必要ないと判断してから10分後にノー ドが削除される。 11 I0927 11:57:07.790306 1 scale_down.go:407]
Node ip-172-19-67-52.ap-northeast-1.compute.internal - utilization 0.055000 I0927 11:57:07.790634 1 static_autoscaler.go:359] ip-172-19-67-52.ap-northeast-1.compute.internal is unneeded since 2019-09-27 11:57:07.773690521 +0000 UTC m=+2997.491422805 duration 0s I0927 12:07:12.161679 1 static_autoscaler.go:359] ip-172-19-67-52.ap-northeast-1.compute.internal is unneeded since 2019-09-27 11:57:07.773690521 +0000 UTC m=+2997.491422805 duration 10m4.367847963s I0927 12:07:12.391908 1 auto_scaling_groups.go:269] Terminating EC2 instance: i-066bc60549f083e38
Cluster Autoscalerのモニタリング Cluster Autoscalerは以下の方法でモニタリングできる。 • メトリクスをPrometheusで取得する。 ←本スライドで説明 • Podのログを参照する。 • ConfigMapに格納されているステータスを参照する。
• Eventをsubscribeする。 12 https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/proposals/metrics.md
Prometheus OperatorのServiceMonitorリソースを利用すると、 監視対象のServiceとPrometheusを紐づけることができる。 同じNamespaceに配置する必要がある Prometheus ServiceMonitorとは Prometheus ServiceMonitor Service Pod
(exporter) Grafana https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/running-exporters.md 13
# 実際に生成されるマニフェスト apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: prometheus: kube-prometheus
release: prometheus-operator name: cluster-autoscaler-aws-cluster-autoscaler namespace: monitoring # helmfile.yaml releases: - name: cluster-autoscaler namespace: kube-system chart: stable/cluster-autoscaler values: - serviceMonitor: enabled: true namespace: monitoring selector: release: prometheus-operator Cluster AutoscalerのServiceMonitor Cluster AutoscalerのHelm ChartにはServiceMonitorが含まれている。 このラベルが付いた Prometheusに登録される 14
15 Cluster AutoscalerのGrafanaダッシュボード https://grafana.com/grafana/dashboards/3831
Cluster Autoscalerを TerraformとHelmfileでデプロイして Prometheusでモニタリングする シリーズにできるかも?? 16
まとめ Cluster Autoscalerを利用すると、クラスタに必要なリソースに応じてノード数を自動 的に増減できます。 TerraformとHelmfileによるCluster Autoscalerのデプロイ、 PrometheusとGrafanaによるCluster Autoscalerのモニタリング について説明しました。 17
※記載されている会社名、商品名、サービス名は各社の登録商標または商標です。