詳細検索

EKSオートモードがTerraformで登場 – 今日、Kubernetesをシンプルにしよう

アバター
著者: Jatin Mehrotra

EKSオートモードがTerraformで登場 – 今日、Kubernetesをシンプルにしよう
Englishから翻訳 • 原文を読む

AWS re:Invent 2024の際に、AWSはEKSに新機能であるEKSオートモードをリリースしました。これは前回のブログで詳しく説明したものです

このブログでは、オリジナルの「terraform-eks-module」を使ってEKS Autoモードでクラスタを作成する方法と、それが私の eks.tf コードを簡素化した方法を見ていきます。

また、オートモード機能の前にEKクラスタで使ったTerraformコードと、Autoモード機能使用後のTerraformコードの違いについても話し、EKSを何も知らない初心者がどう助けられるかについても話します。

動機

  • Terraform for AWSプロバイダーは新バージョンv5.79.0をリリースし、EKSオートモード用のリソース('compute_config, storage_config, storage_config, kubernetes_network_config.elastic_load_balancing')を追加しました。

  • Terraform eksモジュールは新バージョンv20.31.0をリリースし、EKSオートモードおよびEKSハイブリッドノードのサポートを可能にします。

Terraform AWS EKSモジュールをEKSオートモードに使おう

もし一緒に進みたいなら、このリポジトリを使って動作するコードを使ってください。

新しいクラスターでEKSオートモードを有効にする

  • EKSオートモードで作成される1ノードプール(汎用)

  • クラスタ内にノードやポッドが存在しない(ワークロードは稼働していない)か、今のところノードをプロビジョニングしていない、なぜならそれがEKSのオートモードの役割だからと言える場合。
  • このコードを使ってサンプルをインストールすると、EKSオートモードがEc2ノードを自動でプロビジョニングします。私のノードプロビジョニングにおける魔法のゼロ管理はなんでしょう。

**注意:**サンプルアプリをデプロイするには、kubectl setコンテキストコマンドを実行し、再度terraform applyを実行する必要があります。クラスタ作成時にサンプルアプリはデプロイされていませんでした。なぜならコンテキストが設定されていなかったからです。

AWS eks --region us-east-1 update-kubeconfig --name tf-module-support --profile ck-test

テラフォーム適用

 Kubectl Get PO
名前準備完了 ステータス 年齢の再スタート
test-65b7dbddd4-j6mbt 1/1 Running 0 104s
test-65b7dbddd4-wdz56 1/1 running 0 104s

違いを生んでいるもの

  • 「cluster_compute_config」リソースは、モジュール側でEKSオートモードを有効または無効にするための差分またはリソース使用量です。
  • TerraformではAWSプロバイダー側がEKSオートモードの有効化または無効化に使用されます

  cluster_compute_config = {
    enabled = 真
    node_pools = [「汎用」]
  }
  • 「cluster_compute_config」オプションのおかげで、「eks_managed_node_group_defaults」「eks_managed_node_groups」「node_security_group_additional_rules」を言及する必要がなくなり、それらの概念も知らなくていい。

以下のコードは小さく見えるかもしれませんが、EKSやノードプロビジョニングに詳しい人なら、その概念を理解しているなら、このコードを書く方法を見つけてください。しかし今はEKSのオートモードにより管理が不要です。わあ、なんて洗練されたんでしょう。

# もう必要ないコード

eks_managed_node_group_defaults = {
    ami_type = 「AL2_x86_64」
    instance_types = ["m5.large"]
    # instance_types = [「t3.small」]
    # vpc_security_group_ids = [aws_security_group.all_worker_mgmt.id]
    iam_role_additional_policies = {
      ebs_policy = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy" #IAM CSIドライバーに必要な権利
      auto_scaling_policy = "arn:aws:iam::aws:policy/AutoScalingFullAccess"
      cloudwatch_container_insights_agent_policy = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
      xray_policy = "arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess"
    }
  }

  eks_managed_node_groups = {

    node_group = {
      min_size = 2
      max_size = 5
      desired_size = local.node_group_desired_size
    }
  }

  node_security_group_additional_rules = {
    http_traffic_node_to_node = {
      description = 「Allow inbound HTTP from self」
      from_port = 80
      to_port = 80
      プロトコル = "TCP"
      self = 真
      タイプ = 「入口」
    }
  }

# 管理されたノードグループの希望サイズをトリガーするために

リソース「null_resource」「update_desired_size」{
  トリガー = {
    desired_size = local.node_group_desired_size
  }

  プロビジョナー「Local-Exec」 {
    インタプリター = ["/bin/bash", "-c"]

    command = <-EOT
      aws eks update-nodegroup-config \
        --cluster-name ${module.eks.cluster_name} \
        --nodegroup-name ${element(split(":", module.eks.eks_managed_node_groups["node_group"].node_group_id), 1)} \
        --scaling-config desiredSize=${local.node_group_desired_size} \
        --region us-east-1 \
        --profile ck-test
    EOT
  }
}

What isn't supported

DevOps、IaCの視点から

  • EKSオートモードの活用方法を見ました;これは、新しいクラスタのコンテナワークロードにとって、計画やコンピュレーション(コンピュート)を必要とせずに実現したゲームチェンジャー機能です。
  • まだ、Terraform AWSのプロバイダー側およびEKS側で、既存のクラスターでコンソール使用時のEKオートモードを有効にするためのバグ修正が必要です。
  • EKSの自動モードはユーザーの操作を削減するだけでなく、IaC(terraformコード)も簡素化することに成功しました
  • terraform、terraform-eks-moduleのユーザーとして、この機能がこれほど速くサポートされるのを見るのは驚きです。このコミュニティを支援してくれたBryant Biggsに感謝します。

Related Articles