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
K8sをTerraformで管理してみた
Search
SHIFT EVOLVE
PRO
July 26, 2021
Business
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
K8sをTerraformで管理してみた
SHIFT EVOLVE
PRO
July 26, 2021
More Decks by SHIFT EVOLVE
See All by SHIFT EVOLVE
コミュニティを、仕事にした。‐ 学びの場が会社の価値になるまで / 20260724 Ayana Chandler
shift_evolve
PRO
0
51
越境QA 〜QA歴18年のキャリア~ / 20260724 Masakazu Yoshikawa
shift_evolve
PRO
0
40
fukabori.fm出張版:AI駆動開発でテストエンジニアは不要になるのか / 20260723 Yoshimasa Iwase & Tomoo Morikawa
shift_evolve
PRO
2
49
【実録】「なんちゃってアジャイル」によるプロジェクト崩壊とその教訓 / 20260723 Takeshi Watarai
shift_evolve
PRO
1
25
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
790
AWS DevOps AgentでCDKメンテナンスは楽になるのか ~検証から見えた最適解~ / 20260718 Masaki Okuda
shift_evolve
PRO
0
590
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
540
AIが変えるDevSecOps―開発速度とセキュリティの両立へ / 20260714 Mitsutoshi Matsuo
shift_evolve
PRO
1
85
生成AI活用によるODC欠陥分析の分類高速化の実践と導入効果 / 20260703 Suguru Ishii
shift_evolve
PRO
2
170
Other Decks in Business
See All in Business
5年間コードを書かなかったVPoEが なぜ現場に戻ったのか?
gessy0129
1
280
株式会社ルクレ新卒向け採用ピッチ
lecre
0
1k
株式会社Fact_Base 会社紹介資料
factbase2022
0
1.7k
Algomatic | 会社紹介資料
algomatic
PRO
2
150k
AWS Summit Taipei 2026: Decomposing Ontology and Agentic AI - Using Amazon Bedrock to Bring Living Water to Manufacturing ERP
dwchiang
0
280
malna-recruiting-pitch
malna
0
23k
会社紹介資料/Idein株式会社
ideininc
0
260
『問題解決』を読んでSkillにしてみた
innovationjp
0
190
Mercari-Fact-book_jp
mercari_inc
7
200k
Terraform Provider for TROCCO × AI で 半自動化する複数プロダクトの連携運用 / Semi-Automating Multi-Product Data Integration Ops with the Terraform Provider for TROCCO × AI
medley
0
250
PMMから始まる経営 PMM→CMO/CPOの5年から導いた、 PMMの役割
kazuotanaka
1
340
supa, inc. company deck v260722
kazuki_tanaka
0
200
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
From π to Pie charts
rasagy
0
240
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
320
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Documentation Writing (for coders)
carmenintech
77
5.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
810
The agentic SEO stack - context over prompts
schlessera
0
850
Exploring anti-patterns in Rails
aemeredith
3
450
Building Applications with DynamoDB
mza
96
7.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Transcript
K8sをTerraformで管理してみた 開発支援プロダクト推進部 CAT開発 小田柿 敦士
Terraformでもk8s上のアプリ管理ができ るって知ってました? ◦ クラウドリソースの管理 ◦ ネットワーク(VPC/サブネット) ◦ コントロールプレーン(EKS) ◦ ワーカーノード(EC2/Autoscaling
Group) ◦ etc. ◦ ⇒ これらがTerraformで管理できるのは普通に分かる ◦ K8s上のアプリのインストール・更新・削除 ◦ ⇒ 実はこれもTerraformで実行できます
【本番運用課題】 K8sマニフェストのテンプレート化ツール選定 候補ツール 事前調査結果 Helm • Helmチャートを自分で作るのは敷居が高そう(学習コスト高そう) • 複雑なことができそう(OSS公開するなら必須のようだ、、、) Kustomize
• 学習コスト低そう • kubectlコマンドの付随してくるので利用の敷居も低そう Terraform • クラウドリソース管理と併せて管理を一元化できる • ベトナムメンバーFooさんイチ押し ⇒ 採用 ◦ 実際の運用では dev/stg/prod で構成や設定値が異なる ◦ テンプレートと設定ファイルを分けて、環境ごとの差分だけ設定値として管理したい ◦ ⇒ K8sマニフェストのテンプレート化ツールが必要
【機能】 k8sアプリ管理でTerraformができること ◦ K8sマニフェストのテンプレート化&適用 ◦ プロバイダ: kubernetes provider ◦ 参考
https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs ◦ リソース: kubernetes_xxx (k8sオブジェクトの種類ごと) ◦ kubernetes_deployment, kubernetes_service, kubernetes_config_map, kubernetes_secret, ◦ kubernetes_daemonset, kubernetes_job, kubernetes_ingress, … ◦ Helmリポジトリに公開されているアプリの導入・更新 ◦ プロバイダ: helm provider ◦ リソース: helm_release (helmコマンドの代替) ◦ 参考 https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release
【実装】 K8sマニフェストのテンプレート化&適用 通常のマニフェストYAML resource "kubernetes_deployment" "nginx" { metadata { name
= "nginx-deployment" labels = { app = "nginx" } } spec { replicas = 3 selector { match_labels = { app = "nginx" } } template { metadata { labels = { app = "nginx" } } spec { container { image = "nginx:1.14.2" name = "nginx" port { container_port = 80 } } } } } } ② 変数定義埋め込み ⇒ テンプレート化 ③ Terraform実行 → 適用 HCL = HashiCorp configuration language = JSONぽい?Terraform独自記法 ※YAMLを単純に変換できないのがハマりどころ HCL形式のマニフェスト この例では分かりにくいが、配列の表現形式が違う のが厄介(都度ドキュメントの確認が必要なレベル) ① HCLに変換
【実装】 Helmリポジトリ公開アプリインストール URL・チャート名・バージョンを指定 設定ファイル指定: 通常の設定用YAMLファイルが指定可 設定値の上書き定義作成 ここにTerraformの変数定義を適用する ⇒ 設定YAMLファイルが簡単にテンプレート化できる HCL化不要で
とても簡単! ② Terraform実行 一連のhelmコマンドが実行される ① Terraformコード作成(helm_release)
【感想】 実際導入してみて… ◦ 慣れれば問題なく使える ◦ クラウドリソースのエンドポイント等をTfstateから取得し て利用できるのでアプリ-リソース間連携設定は容易 ◦ Helmリポジトリ上の公開アプリインストールはまあ便利 ◦
が、特段おすすめするほどでもない
【問題点】 積極的に勧められない理由 ◦ Terraform公式ドキュメント以外にHCLでのマニフェスト例 がほぼない ◦ ⇒ 調べたマニフェストYAMLをHCLに変換する作業が頻発 ◦ ⇒
HCLの書き方も都度調べることになり学習コストが増大 ◦ K8s:宣言的構成管理が売りだが… ◦ ⇒ Terraformを挟むとTfstate(状態)管理が発生 ◦ ⇒ 管理コストはさほどでもないが何か違和感。。。 ◦ AWSリソースとk8s上のアプリでは更新頻度も管理体系も そもそも別 ◦ ⇒ Terraformに統一することによる恩恵があまりない