Closed4

EKSでノード毎の最大pod数を増やす試み

not75743not75743

概要

EKSのノードはインスタンスタイプによってpodの上限数が設定されている
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/cni-increase-ip-addresses.html

例えばt3.mediumの場合

❯ k describe node <t3.mediumのノード> | grep 'pods\|PrivateIPv4Address'
  pods:               17

1つのノードに17までpodを立てることが出来る。
これをなんとかできたらノード数が減らせてお得になりそう

※こちらでインスタンス毎の上限を確認することもできた
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/choosing-instance-type.html#determine-max-pods

バージョン

EKS Kubernetes 1.29

not75743not75743

下調べ

0. Amazon VPC CNI plugin for Kubernetesの確認

問題なさそう

❯ kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
amazon-k8s-cni-init:v1.16.0-eksbuild.1
amazon-k8s-cni:v1.16.0-eksbuild.1

1. ENABLE_PREFIX_DELEGATION

trueにする必要がありそう

❯ k describe daemonset aws-node -n kube-system | grep ENABLE_PREFIX_DELEGATION
      ENABLE_PREFIX_DELEGATION:               false

2. userdataに--max-pods=110を追加

t3/t3a.mediumを使っているため必要
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances

これterraformでなんとかなる...?

not75743not75743

とりあえずterraformでENABLE_PREFIX_DELEGATIONをtrueとする

resource "aws_eks_addon" "vpc-cni" {
  cluster_name  = aws_eks_cluster.main.name
  addon_name    = "vpc-cni"
  addon_version = "v1.18.2-eksbuild.1"
  configuration_values = jsonencode({
    env = {
      ENABLE_PREFIX_DELEGATION = "true"
    }
  })
}

他の記事を見るとこの設定で完結していそうだが、自分の環境では適用できなかった

not75743not75743

ノードグループを変更

terraformで管理していたノードグループをこんな感じで変更

-data "aws_ssm_parameter" "eks_ami_release_version" {
-  name = "/aws/service/eks/optimized-ami/${aws_eks_cluster.main.version}/amazon-linux--2/recommended/release_version"
-}

resource "aws_eks_node_group" "main" {
  cluster_name    = aws_eks_cluster.main.name
  node_group_name = "example-node-group"
- version         = aws_eks_cluster.main.version
- release_version = nonsensitive(data.aws_ssm_parameter.eks_ami_release_version.value)
  node_role_arn   = aws_iam_role.worker.arn
  subnet_ids      = [var.sub1, var.sub2]

version/release_versionを利用しないことで

起動テンプレートがない場合、または AMI ID が指定されていない起動テンプレートを使用する場合 —「マネージド型ノードグループの作成」の手順を完了します。マネージド型ノードグループは、Amazon EKS で推奨される max-pods の値を自動的に計算します。

に該当したため...?とりあえずうまくいった

[Docker] ❯ k describe nodes | grep pod
  pods:               110
  pods:               110
  Normal   NodeAllocatableEnforced  26s                kubelet                Updated Node Allocatable limit across pods
このスクラップは4ヶ月前にクローズされました