Slide 1

Slide 1 text

極力楽して Kubernetes環境を構築したい with AWS, terraform, EKS, Argo-CD 2020/08/26 Kubernetes Meetup Tokyo #33 株式会社Speee DX事業本部 SREエンジニア 西田和史 (k_bigwheel)

Slide 2

Slide 2 text

弊事業部のインフラ ● ベース ● EKS使用 ● シングルテナント (1サービスごとに1クラスタ) ● Argo CD ● Terraformで管理

Slide 3

Slide 3 text

インフラ詳細

Slide 4

Slide 4 text

課題感 ● 事業部内のサービスの増加速度に対してインフラの構築速度が間に合ってない ○ もっと高速にインフラ 1セットを提供したい ● ほぼ同じインフラを何度も作成 ○ 2人のSREチームでは手間が馬鹿にならない (トイル化) ○ 毎回微妙な差分が発生 ● 毎回ちょっとずつ進化・改善している ○ 改善が過去に構築したインフラへ反映できていない

Slide 5

Slide 5 text

モジュール化(terraform module / helm)で解決? ● 適切に使用すれば紋切り型コードが大幅に減少 ○ 例: ウェブサービス用の helm chart(Deployment, Service, Ingressのセット) ● 一方で過度のモジュール化(共通化)は個別最適化の選択肢を奪う ○ オペレータA, B, C, Dを内包するhelm chartは便利だけどBを入れたくないクラスタではとたんに 面倒になる ● モジュールを十分小さくすれば選択的に使える? ○ モジュールが増えると使い方を理解するコストが増え、モジュール間の グルーコードも増える

Slide 6

Slide 6 text

モジュール化できた次に挙がる問題、 グルーコード ● 適切な粒度で十分な機能を持ったモジュールがあってさえ、 グルーコードは一定必要 ○ 例: helmを可能な限り使った場合でも manifestファイルの行数合計が 780 コードをテンプレート化して自動 生成しよう!

Slide 7

Slide 7 text

● シンプルで汎用性の高いプロジェクトテンプレート作成ツール ○ https://github.com/cookiecutter/cookiecutter ● 使い方 a. テキストファイルの中で変数展開したい箇所を Jinja2フォーマット {{ 変数名 }}で記述 b. cookiecutterコマンドを実行、ダイアログで変数の値を入力 c. 変数展開されたファイルが生成!

Slide 8

Slide 8 text

ここが自動生成できるようになった

Slide 9

Slide 9 text

プロジェクト初日にやること 1. AWSアカウントの作成 2. GitHubにリポジトリの作成 3. GitHub SecretsにCI用の Credentialsを設定 4. 右のコマンドを実行 # インフラコードの生成 cookiecutter [email protected]:speee/infra-template.git # CIでインフラを構築 git add . git push origin HEAD # k8s認証情報の設定 aws eks update-kubeconfig --name hogehoge # Argo CDのインストール kubectl create namespace argo-cd helm repo add argo https://argoproj.github.io/argo-helm helm install argo-cd argo/argo-cd -n argo-cd --set installCRDs=false # マニフェストファイルの生成 cookiecutter [email protected]:speee/manifest-template.git # Argo CDにマニフェストリポジトリを登録 git add . git push origin HEAD argocd repo add https://github.com/speee/hogehoge-manifest

Slide 10

Slide 10 text

以上のコマンドにより、

Slide 11

Slide 11 text

以上のコマンドにより、 ここ以外のすべてが 1時間でできるように なった!

Slide 12

Slide 12 text

課題は解決した? ● もっと高速にインフラ1セットを提供したい ➢ 最短1日未満で提供できるようになりつつある ● 2人のSREチームでは手間が馬鹿にならない(トイル化) ➢ 作業を大幅に簡略化 ● 毎回微妙な差分が発生 ➢ テンプレート化で不要な差分は最小化 ● 改善が過去に構築したインフラへ反映できていない ➢ インフラリポジトリ/マニフェストリポジトリの骨格が揃ったので足並みを揃えやすくなった

Slide 13

Slide 13 text

ご清聴 ありがとう ございました まとめ 1. モジュール化 a. Terraform module b. helm 2. テンプレート(コード自動生成) a. cookiecutter より以下ができた ● トイルの削減 ● 高速な初期構築 ● コードの標準化(正規化)