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
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.4k
1万枚の写真の中から我が子を見つける顔検索の裏側
yoshiken
0
490
Other Decks in Programming
See All in Programming
どこまでゆるくて許されるのか
tk3fftk
0
520
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
500
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
5.3k
Claude Team Plan導入・ガイド
tk3fftk
0
220
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
230
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
140
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
150
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
160
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
620
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
190
Featured
See All Featured
Building an army of robots
kneath
306
46k
Paper Plane
katiecoart
PRO
2
52k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Building the Perfect Custom Keyboard
takai
2
820
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Code Reviewing Like a Champion
maltzj
528
40k
A designer walks into a library…
pauljervisheath
211
24k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
370
The SEO identity crisis: Don't let AI make you average
varn
0
520
AI: The stuff that nobody shows you
jnunemaker
PRO
9
840
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. 終劇