Upgrade to Pro — share decks privately, control downloads, hide ads and more …

極力楽してKubernetes環境を構築したいwith AWS, terraform, EKS, Argo-CD

極力楽してKubernetes環境を構築したいwith AWS, terraform, EKS, Argo-CD

k.bigwheel (kazufumi nishida)

November 23, 2023
Tweet

More Decks by k.bigwheel (kazufumi nishida)

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

  3. インフラ詳細

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. プロジェクト初日にやること
    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

    View full-size slide

  10. 以上のコマンドにより、

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide