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
転生したらEKSをTerraform管理することになった件
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yoshiken
March 19, 2021
Programming
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
転生したらEKSをTerraform管理することになった件
Yoshiken
March 19, 2021
More Decks by Yoshiken
See All by Yoshiken
サイトの信頼性の前にチームとしての信頼性を高めよう
yoshiken
0
1.3k
1万枚の写真の中から我が子を見つける顔検索の裏側
yoshiken
0
480
Other Decks in Programming
See All in Programming
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
160
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
180
Modding RubyKaigi for Myself
yui_knk
0
910
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.6k
Lessons from Spec-Driven Development
simas
PRO
0
170
ふつうのFeature Flag実践入門
irof
7
3.7k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
5
3.9k
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
Contextとはなにか
chiroruxx
0
280
Agentic UI
manfredsteyer
PRO
0
130
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
160
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
320
Featured
See All Featured
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Evolving SEO for Evolving Search Engines
ryanjones
0
210
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
330
The Cult of Friendly URLs
andyhume
79
6.9k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
Designing Experiences People Love
moore
143
24k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
270
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Transcript
転生したらEKSをTerraform管理 することになった件 JAWS DAYS 2021前夜祭 - AWSのTechとJAWS-UGのトレンドキャッチアップ -
Copyright © every, Inc. All rights reserved. お前誰よ 名前 :
吉田 健太 HN : よしけん 所属 : エブリー株式会社MAMADAYS開発部 SRE 趣味 : steamでゲームを買う・植田ひかるさん TW : @yoshiken_tut
Copyright © every, Inc. All rights reserved. 株式会社エブリーとは
Copyright © every, Inc. All rights reserved. 植田ひかるさん 誕生日 :
1996年11月14日 (ちなみに僕は11月13日) 出身地 : 茨城県 血液型 : O型 所属 : オフィスアネモネジュニア 代表作 : クロムクロ(劉神美) 文豪ストレイドッグス(ルイーザ・A) Tokyo 7th シスターズ(西園ホノカ) ©オフィスアネモネ
Copyright © every, Inc. All rights reserved. 本題
Copyright © every, Inc. All rights reserved. いきなり AWS「あと数ヶ月で現行のEKSのサポート終了するよ。強制的にアップデートね。」 ぼく
「ぴえん🥺」 先輩「サービス開始以降EKSのアップデート1回だけしかしたことない…(再現性無」 ぼく「うーんこの」 上長「まかせた」 ぼく「たすけてー!!!!おかーさーーーーん!!!!おとーさーーーん!!!!」 転生(転職)したら...
Copyright © every, Inc. All rights reserved. そしてイベントホライゾンへ そもそもインフラ(AWS)を専属で見る人がいなかった。(故に僕が採用された サーバーサイドエンジニアが片手間で面倒を見るので最新情報のキャッチアップやベス
トプラクティスができる体制ではない。 かと言って正論を振り回すと信用や連携に亀裂が生じ、属人化が生まれるので、今まで インフラを触ってたエンジニアと足並みを揃えてベストプラクティス等を教えつつ無理の ない(知識のオーバーフローが起きない)範囲で改修。 マウントダメ、絶対
Copyright © every, Inc. All rights reserved. 直近の課題 課題1 terraformの構成がめちゃくちゃ
→健全な心でリソース変更ができない 課題2 再現性が低いアップデート →なんにもわからん 課題3 迫るEKSアップデート →迅速かつリスクが低いアップデートの確立
Copyright © every, Inc. All rights reserved. 直近の課題 課題1 terraformの構成がめちゃくちゃ
→健全な心でリソース変更ができない 課題2 再現性が低いアップデート →なんにもわからん 課題3 迫るEKSアップデート →迅速かつリスクが低いアップデートの確立
Copyright © every, Inc. All rights reserved. Terraform構成改善案 workspaceが歴史的経緯(真相は闇)で使われてたり使われなかったり。 →事故多発の要因
→知識レベルがバラバラなのでworkspaceを使用せずにフォルダ構成のみ
Copyright © every, Inc. All rights reserved. Terraform構成改善案 workspaceが歴史的経緯(真相は闇)で使われてたり使われなかったり。 →事故多発の要因
→知識レベルがバラバラなのでworkspaceを使用せずにフォルダ構成のみ 各モジュールが完全に独立している状態。 →汎用性が低い(variable "region" をO(n)回分見る) →ルートを作成しその配下にツリー方式でmoduleを作成でDRYに
Copyright © every, Inc. All rights reserved.
Copyright © every, Inc. All rights reserved.
Copyright © every, Inc. All rights reserved. Terraform構成改善案 workspaceが歴史的経緯(真相は闇)で使われてたり使われなかったり。 →事故多発の要因
→知識レベルがバラバラなのでworkspaceを使用せずにフォルダ構成のみ 各モジュールが完全に独立している状態。 →汎用性が低い(variable "region" をO(n)回分見る) →ルートを作成しその配下にツリー方式でmoduleを作成でDRYに 依存関係はtfstateでの解消のみ。 →依存関係の可視化が全くないのでわかりづらい →moduleを呼び出す際に変数として与えることで可視化
Copyright © every, Inc. All rights reserved. 直近の課題 課題1 terraformの構成がめちゃくちゃ
→健全な心でリソース変更ができない 課題2 再現性が低いアップデート →なんにもわからん 課題3 迫るEKSアップデート →迅速かつリスクが低いアップデートの確立
Copyright © every, Inc. All rights reserved. 過去の事例 • そもそもTerraform化されていないものをTerraform化するためのもの
◦ コードからコードへのアップデートは前例無し
Copyright © every, Inc. All rights reserved. 式年遷宮 • Cluster
Migrationという方式 ◦ 新しいクラスターを立ち上げて、同一の podを作成 ▪ podが稼働状態になったら古いクラスターの podは廃棄してOK ◦ 後述するin-place upgradeに比べてダウンタイムも発生せず、 CoreDNSやKubeProxyなど色々な ことを考えずに済む ▪ しかも上げるバージョンの制約が無いので一気にアップデート (延命処置)ができる
Copyright © every, Inc. All rights reserved. Cluster Migration
Copyright © every, Inc. All rights reserved. Cluster Migration
Copyright © every, Inc. All rights reserved. Cluster Migration
Copyright © every, Inc. All rights reserved. 直近の課題 課題1 terraformの構成がめちゃくちゃ
→健全な心でリソース変更ができない 課題2 再現性が低いアップデート →なんにもわからん 課題3 迫るEKSアップデート →迅速かつリスクが低いアップデートの確立
Copyright © every, Inc. All rights reserved. やったか…? • 運用コストがでかすぎる問題
◦ 新しいクラスターを作成するため、 SGやIAMなど追加で記述し確認する項目がサービス規模に比 例して増えていく ◦ バージョンが出るたびに行うにはあまりにも人の手が入りすぎる ▪ アップデートする間隔を開けてしまい結局リリースノート数バージョン分見直して余計コストが 掛かる運用が見えてしまった … • やらかし ◦ CronJobを移行の際に新クラスターで作成 →旧クラスターで停止の間に二重で実行されてしまった ▪ push通知だっため、ユーザー様のアプリに同一内容の通知が二重で飛ぶ • 👆先週やってしまった
Copyright © every, Inc. All rights reserved. In-place upgrade •
既存クラスター自体をアップデート ◦ ノードを順番にアップデートしていき乗り換える ◦ AWS EKSの公式ドキュメントはこちらを推奨している ◦ 基本的にはダウンタイムは発生しない。致命的なエラーによりアップデートができなくても自動で ロールバックされる。 ◦ Probeをきちんと定義しないとヘルスチェックできなくて爆死するよ! • 結論はこちらを先に試して、ダウンタイムが発生するようならCluster Migration
Copyright © every, Inc. All rights reserved. In-place upgrade
Copyright © every, Inc. All rights reserved. In-place upgrade
Copyright © every, Inc. All rights reserved. In-place upgrade
Copyright © every, Inc. All rights reserved.
Copyright © every, Inc. All rights reserved.
Copyright © every, Inc. All rights reserved. アップデートに関してはAtsushi Tanaka さんの
スライドがめちゃくちゃわかりやすいので読んでください https://speakerdeck.com/bgpat/kubernetes-cluster-migration
Copyright © every, Inc. All rights reserved. 実際にTerraformに書くときに気をつけることは? • 公式が提供してる"terraform-aws-modules/eks/aws"を使いましょう。
◦ https://registry.terraform.io/modules/terraform-aws-modules/eks/aws/latest ◦ 以下のものを自動でよしなに生成 ▪ cloudwatch_log・ami.eks_worker・iam_policy・iam・security_group・local_file.kubeconfig・ kubernetes_config_map・node_groups・cluster • 基本的にEKSに関することなら全て(configmapとかも)Terraform上で管理ができる ので集約しましょう ◦ eksctl?知らない子ですねぇ
Copyright © every, Inc. All rights reserved. EKS独特の注意事項 • subnetに
kubernetes.io/cluster/<cluster-name> というtagがつく ◦ VPCにもtagがつく ▪ ただしversionしだいで仕様が変わるので公式ドキュメントを check ◦ 消すとEKS側が認識できなくなって死ぬので忘れずに • alb-ingress-controllerで作成されたELBの名前がUUIDだけで何にもわからん ◦ tagで名前付いてるのでがんばってください … ◦ alb-ingress-controller自体はterraform上で管理ができるので、公式ドキュメントどおりにやるとつら みが発生するので気をつけてください • kube2iamという概念 ◦ 基本的にはnode(ec2)単位でのIAMと思われがちだが、不必要な権限まで podが所有する ◦ それを防ぐためにpod単位でIAMを絞り込む機能 ◦ これもTerraformで管理できるよ!
Copyright © every, Inc. All rights reserved. 終劇