Awesome
Usage
eks-node-viewer
is a tool for visualizing dynamic node usage within a cluster. It was originally developed as an internal tool at AWS for demonstrating consolidation with Karpenter. It displays the scheduled pod resource requests vs the allocatable capacity on the node. It does not look at the actual pod resource usage.
Talks Using eks-node-viewer
- Containers from the Couch: Workload Consolidation with Karpenter
- AWS re:Invent 2022 - Kubernetes virtually anywhere, for everyone
Installation
Homebrew
brew tap aws/tap
brew install eks-node-viewer
Manual
Please either fetch the latest release or install manually using:
go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest
Note: This will install it to your GOBIN
directory, typically ~/go/bin
if it is unconfigured.
Usage
Usage of ./eks-node-viewer:
-attribution
Show the Open Source Attribution
-context string
Name of the kubernetes context to use
-disable-pricing
Disable pricing lookups
-extra-labels string
A comma separated set of extra node labels to display
-kubeconfig string
Absolute path to the kubeconfig file (default "~/.kube/config")
-node-selector string
Node label selector used to filter nodes, if empty all nodes are selected
-node-sort string
Sort order for the nodes, either 'creation' or a label name. The sort order can be controlled by appending =asc or =dsc to the value. (default "creation")
-resources string
List of comma separated resources to monitor (default "cpu")
-style string
Three color to use for styling 'good','ok' and 'bad' values. These are also used in the gradients displayed from bad -> good. (default "#04B575,#FFFF00,#FF0000")
-v Display eks-node-viewer version
-version
Display eks-node-viewer version
Examples
# Standard usage
eks-node-viewer
# Karpenter nodes only
eks-node-viewer --node-selector karpenter.sh/nodepool
# Display both CPU and Memory Usage
eks-node-viewer --resources cpu,memory
# Display extra labels, i.e. AZ
eks-node-viewer --extra-labels topology.kubernetes.io/zone
# Sort by CPU usage in descending order
eks-node-viewer --node-sort=eks-node-viewer/node-cpu-usage=dsc
# Specify a particular AWS profile and region
AWS_PROFILE=myprofile AWS_REGION=us-west-2
Computed Labels
eks-node-viewer
supports some custom label names that can be passed to the --extra-labels
to display additional node information.
eks-node-viewer/node-age
- Age of the nodeeks-node-viewer/node-cpu-usage
- CPU usage (requests)eks-node-viewer/node-memory-usage
- Memory usage (requests)eks-node-viewer/node-pods-usage
- Pod usage (requests)eks-node-viewer/node-ephemeral-storage-usage
- Ephemeral Storage usage (requests)
Default Options
You can supply default options to eks-node-viewer
by creating a file named .eks-node-viewer
in your home directory and specifying
options there. The format is option-name=value
where the option names are the command line flags:
# select only Karpenter managed nodes
node-selector=karpenter.sh/nodepool
# display both CPU and memory
resources=cpu,memory
# show the zone and nodepool name by default
extra-labels=topology.kubernetes.io/zone,karpenter.sh/nodepool
# sort so that the newest nodes are first
node-sort=creation=asc
Troubleshooting
NoCredentialProviders: no valid providers in chain. Deprecated.
This CLI relies on AWS credentials to access pricing data if you don't use the --disable-pricing
option. You must have credentials configured via ~/aws/credentials
, ~/.aws/config
, environment variables, or some other credential provider chain.
See credential provider documentation for more.
I get an error of creating client, exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1"
Updating your AWS cli to the latest version and updating your kubeconfig should resolve this issue.
Development
Building
$ make build
Or local execution of GoReleaser build:
$ make goreleaser