0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[EKS] Terraform で構築するEKS

0
Posted at

概要

Frame 6.png

  • TerraformとAnsibleを用いて、AWS EKSでK8Sクラスタをプロビジョニングしてみた

Fargate

  • 正体はPod単位にプロビジョニングされるマイクロVM
  • EFSのアタッチは可能だが、EBSのアタッチは不可
  • そのため、永続性IOはネットワーク越しになる
  • ノード自体の管理が不要
  • 高い可用性のコントロールプレーンに向いている

Managed Node Group

  • 同じAMI、SG、インスタンスタイプの管理型EC2ノードであり
  • DaemonSetのPodデプロイ、AWS EBS CSIドライバによるEBSアタッチが可能
  • STSでデプロイされるPostgresql・Redis・Kafka等の永続性IOをデプロイする

Terraform EKS Module

module "eks" { # TerraformのEKSモジュールを転用する
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 20.31"

  cluster_name    = local.cluster_name
  cluster_version = var.cluster_version

  cluster_endpoint_public_access = true # 学習用であるため、EKSのパブリックアクセスを許可する

  enable_cluster_creator_admin_permissions = true

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  cluster_addons = {
    coredns = { 
      most_recent = true
      configuration_values = jsonencode({ 
        computeType = "Fargate" # corednsはデフォルトでinstance・MNGにデプロイされるが、コントロールプレーンをFargateに乗せるためにcomputeTypeを変更する
        resources = {
          limits   = { cpu = "0.25", memory = "256M" }
          requests = { cpu = "0.25", memory = "256M" }
        }
      })
    }
    kube-proxy = {
      most_recent = true
    }
    vpc-cni = {
      most_recent = true
    }
    aws-ebs-csi-driver = { # AWS EBS CSI ドライバーをアドオンとして設置する
      most_recent              = true
      service_account_role_arn = module.ebs_csi_irsa.iam_role_arn # EBS操作のためのIRSAを指定
    }
  }

  fargate_profiles = { # Fargateをプロビジョニングして動作するPodを指定する
    for ns in var.fargate_namespaces : ns => { # 今回はネームスペースが「kube-system」と「argocd」のPodをFargateでプロビジョニングする
      name = "fp-${ns}"
      selectors = [
        { namespace = ns }
      ]
      subnet_ids = module.vpc.private_subnets
    }
  }

  eks_managed_node_groups = {
    workloads = {
      ami_type       = "AL2_x86_64"
      instance_types = var.nodegroup_instance_types
      capacity_type  = "ON_DEMAND"

      min_size     = var.nodegroup_min_size
      max_size     = var.nodegroup_max_size
      desired_size = var.nodegroup_desired_size

      labels = {
        role = "workloads"
      }
    }
  }
}

IRSA

  • PodにAWSリソースにアクセスする権限を与えるための認証・認可仕組み
  • OIDCプロバイダーをクラスタに設置し、IAMロールとサービスアカウントを結びつけることで
  • 最小権限原則を守りつつ、PodにAWSリソースアクセス権限を持たせる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?