EBS CSI Node DaemonSet Not Scheduling on EKS Nodes
John  Ajera

John Ajera @jajera

About: Platform Engineer

Location:
Wellington, New Zealand
Joined:
Nov 20, 2024

EBS CSI Node DaemonSet Not Scheduling on EKS Nodes

Publish Date: Mar 30
0 0

🚨 The Problem

After installing the aws-ebs-csi-driver via Helm, the ebs-csi-node DaemonSet shows 0 pods running:

kubectl get daemonset ebs-csi-node -n kube-system -o wide
Enter fullscreen mode Exit fullscreen mode

Bad output:

ebs-csi-node   0         0         0       0            0           kubernetes.io/os=linux   ...
Enter fullscreen mode Exit fullscreen mode

🔍 Root Cause

This usually means the pods are not scheduling on any nodes. One common reason is that node taints are not tolerated by the DaemonSet.

Check current tolerations

kubectl get pod -n kube-system -l app=ebs-csi-node -o jsonpath='{.items[0].spec.tolerations}' | jq
Enter fullscreen mode Exit fullscreen mode

Expected:

[
  {"operator": "Exists"},
  {"effect": "NoExecute", "key": "node.kubernetes.io/not-ready", "operator": "Exists"},
  {"effect": "NoSchedule", "key": "node.kubernetes.io/disk-pressure", "operator": "Exists"}
]
Enter fullscreen mode Exit fullscreen mode

If the toleration list is missing or incomplete, the pods won’t get scheduled.

✅ Solution

Patch the Helm release values to explicitly tolerate all taints:

resource "helm_release" "ebs_csi_driver" {
  name       = "aws-ebs-csi-driver"
  chart      = "aws-ebs-csi-driver"
  repository = "https://kubernetes-sigs.github.io/aws-ebs-csi-driver"
  version    = local.ebs_csi_driver_version
  namespace  = "kube-system"

  set {
    name  = "node.tolerateAllTaints"
    value = true
  }

  set {
    name  = "node.tolerations[0].operator"
    value = "Exists"
  }
}
Enter fullscreen mode Exit fullscreen mode

Then upgrade the release:

terraform apply
Enter fullscreen mode Exit fullscreen mode

🔎 Validation

Re-check the daemonset:

kubectl get daemonset ebs-csi-node -n kube-system
Enter fullscreen mode Exit fullscreen mode

Expected:

ebs-csi-node   1         1         1       1            1           kubernetes.io/os=linux   ...
Enter fullscreen mode Exit fullscreen mode

And verify the tolerations:

kubectl get pod -n kube-system -l app=ebs-csi-node -o jsonpath='{.items[0].spec.tolerations}' | jq
Enter fullscreen mode Exit fullscreen mode

✅ Outcome

Once the tolerations are set properly, the node pods start running and volume provisioning should begin to work as expected.

Make sure you also verify volume attachment behavior afterwards!

Comments 0 total

    Add comment