Help us understand the problem. What is going on with this article?

Amazon EKSとTerraformを組み合わせたとある事例

はじめに

これは、Amazon EKS Advent Calendar 2019 6日目の記事です。
現在関わっているプロジェクトにおいて進行中のKubernetes移行で取り入れた技術や方法について、少し紹介したいと思います。
現状の構成がベストプラクティスであるということではなく、試行錯誤した結果の途中経過となりますが、何らかのヒントになれば幸いです。

前提

  • Amazon EKS 1.14
  • ワーカーノードはEC2(Fargateではない)
  • IaCはTerraform 0.12系を使う

Terraformでどこまで適用するか

はじめ、EKSクラスタについてはAWS CLIでの構築を考えていました。その理由としては、

  • Terraformの適用環境はCodeBuildである(IAMロールを使う)
  • kubectl実行環境は別にある(EC2+SessionManager+SSHの踏み台的な環境)

という前提で、kubectlの実行環境でクラスタを作成したほうがaws-authのConfigMapの適用で考えることが少なくて済む、という考えがありました。

しかし、現在はTerraformで管理する対象を増やしています。大きな理由としては、

  • アプリケーションをデプロイする手前までの環境は自動化したい

というところです。

Terraformで適用するリソース

AWS Providerを使う

  • EKSクラスタ
  • ワーカーノード
    • Auto Scaling Group
    • Security Group
    • IAM Role

Kubernetes Providerを使う

https://www.terraform.io/docs/providers/kubernetes/index.html

  • ConfigMap: aws-auth
  • Helm
    • Service Account
    • Cluster Role Binding
  • External DNS
    • Service Account
    • Cluster Role
    • Cluster Role Binding
    • Deployment

Helm Providerを使う

https://www.terraform.io/docs/providers/helm/index.html

(できたらContainer Insights on Amazon EKSもHelmで導入したい...!)

これらを一通りTerraformで、 AWS modulesを活用しつつ構築することで、アプリケーション側のデプロイに専念できる形にする、というのが現時点での答えとなっています。

Kustomizeの利用

アプリケーションのマニフェストをdev/staging/productionといった環境ごとに重複しない形で管理できるようにKustomizeを利用しています。

デプロイ

デプロイはArgoCDを選定しています。

Argo CD - Declarative GitOps CD for Kubernetes
https://argoproj.github.io/argo-cd/

これがベストかどうかはまだわかりませんが、利用事例の多さ、開発の頻度、Helmで一発で導入できること、Kustomizeへの対応、見やすいWebUIなどが魅力的だと感じています。

まだ確定はしていませんが、ECRへのイメージプッシュからLambdaを起動して、argocdのCLIからプッシュされたイメージのタグを指定してデプロイする方法(GitOps)が良さそうだと考えています。

Parameter Overrides
https://argoproj.github.io/argo-cd/user-guide/parameters/

おわりに

とても簡単な解説にはなりますが、以上の組み合わせでKubernetesまわりの環境を構築しています(しようとしています)。
ここはどうなっているの?という質問や疑問がありましたら、Twitter @isaoshimizu まで優しくお気軽にメンションしていただけたら、こちらとしても大変ありがたい限りです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away