The driver operates via two main service types: the Identity Service and the Controller Service, which handle high-level volume management, and the Node Service, which handles local device operations on Kubernetes nodes.
Identity Service
Used by Kubernetes to verify driver health and capabilities:
GetPluginInfo: Returns driver name (ebs.csi.aws.com) and version.GetPluginCapabilities: Returns supported capabilities like CONTROLLER_SERVICE.Probe: A liveness probe. For the Controller Service, this performs an hourly DescribeAvailabilityZones call to verify networking and authentication.
Controller Service
Manages the lifecycle of EBS volumes at the AWS level:
CreateVolume: Provisions a new EBS volume. If creating from a snapshot, it uses the provided snapshot ID.DeleteVolume: Deletes an existing volume. It succeeds if the volume is 'available' (not attached) or if the volume is not found. It returns an error if the volume is currently attached.ControllerPublishVolume: Attaches a volume to a node. It selects an unused device name and polls until the volume state is in-use.ControllerUnpublishVolume: Detaches a volume from a node using DetachVolume.ControllerExpandVolume & ControllerModifyVolume: Used to resize volumes or change attributes (IOPS, throughput, type). These calls are coalesced to prevent hitting AWS API cooldowns.CreateSnapshot / DeleteSnapshot / ListSnapshots: Manages EBS snapshots.
Node Service
Manages the volume on the specific Kubernetes node:
NodeStageVolume: Finds the device, formats it if necessary, runs fsck if already formatted, and mounts it.NodePublishVolume: Performs a bind-mount of the volume.NodeUnstageVolume / NodeUnpublishVolume: Unmounts the volume.NodeExpandVolume: Resizes the filesystem if the underlying volume has been expanded.NodeGetVolumeStats: Returns usage statistics (available, total, used bytes and inodes).NodeGetInfo: Returns the AWS InstanceID and accessible topology (Availability Zone).