How awslabs/amazon-eks-ami works
The repository README describes building EKS-optimized AMIs; the supplied source focuses on nodeadm, the node bootstrap/configuration runtime. Its main workflow loads and validates NodeConfig, enriches it with instance details, applies system configuration, and configures and runs containerd and kubelet. Separate commands check or dump configuration, while internal tools handle boot-time networking. Several subsystems are represented by tree paths or index references rather than inspected implementation, so their connections are omitted or marked unverified.
Main entry points: init.go Bootstrap init · main.go nodeadm CLI · root.go Config commands · check.go Config check
Components 23
Nodeadm commands
- nodeadm CLI
nodeadm/cmd/nodeadm/main.go - Bootstrap init
nodeadm/cmd/nodeadm/init/init.go - Config commands
nodeadm/cmd/nodeadm/config/root.go - Config check
nodeadm/cmd/nodeadm/config/check.go - Config dump
nodeadm/cmd/nodeadm/config/dump.go - Internal tools
nodeadm/cmd/nodeadm-internal/main.go
Configuration
- Config providers
nodeadm/internal/configprovider - Public NodeConfig
nodeadm/api/v1alpha1/nodeconfig_types.go - Internal config
nodeadm/internal/api/types.go - Config conversion
nodeadm/internal/api/bridge/zz_generated.conversion.go - Config validation
nodeadm/internal/api/validation.go
Node bootstrap
- Daemon manager
nodeadm/internal/daemon/manager.go - Containerd setup
nodeadm/internal/containerd/daemon.go - Kubelet setup
nodeadm/internal/kubelet/daemon.go
System integration
- System aspects
nodeadm/internal/system/aspect.go - EBS storage
nodeadm/internal/system/ebs_storage.go - Instance environment
nodeadm/internal/system/environment.go - EC2 metadata
nodeadm/internal/aws/imds/imds.go - Boot network hook
nodeadm/cmd/nodeadm-internal/boot-book/hook.go - Udev network manager
nodeadm/cmd/nodeadm-internal/udev/net_manager.go - Network manager
nodeadm/internal/networkmanager/networkmanager.go
Other components
- Node operator
- Serialized config
Connections 28
- Node operator → nodeadm CLI: runs
nodeadm/cmd/nodeadm/main.go - nodeadm CLI → Bootstrap init: registers
nodeadm/cmd/nodeadm/main.go - nodeadm CLI → Config commands: registers
nodeadm/cmd/nodeadm/main.go - Config commands → Config check: registers
- Config commands → Config dump: registers
- Bootstrap init → Config validation: validates
nodeadm/cmd/nodeadm/init/init.go - Bootstrap init → Daemon manager: creates
nodeadm/cmd/nodeadm/init/init.go - Bootstrap init → Containerd setup: configures and runs
nodeadm/cmd/nodeadm/init/init.go - Bootstrap init → Kubelet setup: configures and runs
nodeadm/cmd/nodeadm/init/init.go - Bootstrap init → System aspects: sets up
nodeadm/cmd/nodeadm/init/init.go - Bootstrap init → Config providers: loads through
- Bootstrap init → EC2 metadata: enriches from
- System aspects → EBS storage: includes
- System aspects → Instance environment: includes
- Config check → Config providers: parses
nodeadm/cmd/nodeadm/config/check.go - Config check → Config validation: validates
nodeadm/cmd/nodeadm/config/check.go - Config dump → Config conversion: encodes with
nodeadm/cmd/nodeadm/config/dump.go - Config dump → Serialized config: writes
nodeadm/cmd/nodeadm/config/dump.go - Config conversion → Public NodeConfig: converts to
nodeadm/internal/api/bridge/zz_generated.conversion.go - Config conversion → Internal config: converts to
nodeadm/internal/api/bridge/zz_generated.conversion.go - Config providers → Internal config: decodes to
nodeadm/internal/configprovider/file.go - Node operator → Internal tools: runs
nodeadm/cmd/nodeadm-internal/main.go - Internal tools → Boot network hook: registers
nodeadm/cmd/nodeadm-internal/main.go - Internal tools → Udev network manager: registers
nodeadm/cmd/nodeadm-internal/main.go - Boot network hook → EC2 metadata: reads identity
nodeadm/cmd/nodeadm-internal/boot-book/hook.go - Boot network hook → Network manager: uses cache path
nodeadm/cmd/nodeadm-internal/boot-book/hook.go - Udev network manager → EC2 metadata: reads metadata
nodeadm/cmd/nodeadm-internal/udev/net_manager.go - Udev network manager → Network manager: selects manager
nodeadm/cmd/nodeadm-internal/udev/net_manager.go