😸

TerraformでEKS Fargateを作成

2023/05/31に公開

概要

Terraform aws eks moduleを使ってEKS FargateをTerraformで作成していきます
TerraformでEKS Fargateを構築する際、問題だったのがCoreDNSの更新問題です。
上記記事にもありますが、デフォルトではCoreDNSはEC2で実行される様になっているため、そのままの状態でFargateでpodを動かそうとすると、deploymentをapplyしてもRUNNINGにならないという問題があります。

なので、null_resourceのlocal-execなどでローカルマシンからkubectl patchをして、corednsをrollout restartさせるなどが必要でしたが、Terraform aws eks moduleのver19.1.0以降は手動でのリスタートなどは不要になり、TerraformでスムーズにEKS Fargateが構築できる様になりました

環境

  • Terraform 1.4.6
  • terraform aws eks module 19.15.1
eks.tf
module "eks" {
  source          = "terraform-aws-modules/eks/aws"
  version         = "19.15.1"
  cluster_version = "1.26"
  cluster_name    = "sample-cluster"

  vpc_id     = var.vpc_id
  subnet_ids = var.vpc_private_subnet_ids
  control_plane_subnet_ids = var.vpc_public_subnet_ids
  cluster_endpoint_public_access = true

  manage_aws_auth_configmap = true
  enable_irsa               = true

  create_cluster_security_group = false
  create_node_security_group = false

  cluster_addons = {
    kube-proxy = {}
    vpc-cni    = {}
    # ここが大事
    coredns = {
      configuration_values = jsonencode({
        computeType = "Fargate"
      })
    }
  }

  aws_auth_users = var.auth_users
  aws_auth_roles = var.auth_roles

  fargate_profiles = {
    default = {
      name = "default"
      selectors = [
        {
          namespace = "default"
        },
        {
          namespace = "kube-system"
        }
      ]
    }
  }

  cluster_enabled_log_types = ["api", "audit", "authenticator", "controllerManager", "scheduler"]

  tags = var.tags
}

Discussion