eksdemo
- kubectl-like CLI for Amazon EKSThe easy button for learning, testing, and demoing Amazon EKS:
Note:
eksdemo
is in beta and is intended for demo and test environments only.
eksdemo
?
eksdemo
eksdemo
?While creating an EKS cluster is fairly easy thanks to eksctl
, manually installing and configuring applications on EKS is complex, time consuming and error-prone. One of the most powerful feature of eksdemo
is its extensive application catalog. An application can be installed (including dependencies) with a single command.
For example, the command: eksdemo install karpenter -c <cluster-name>
will:
aws-auth
ConfigMap for the Karpenter Node IAM RoleNodePool
and EC2NodeClass
Custom ResourcesApplication installs are:
--dry-run
flag prints out all the steps eksdemo
will take to create dependencies and install the application--set
flag is available to override any settings in a Helm chart's values file eksdemo
embeds Helm as a library and it's used to install all applications, even those that don't have a Helm charteksdemo
vs EKS BlueprintsBoth eksdemo
and EKS Blueprints automate the creation of EKS clusters and install commonly used applications. Why would you use eksdemo
for learning, testing, and demoing EKS?
eksdemo |
EKS Blueprints |
---|---|
Use cases: learning, testing, and demoing EKS | Use cases: customers deploying to prod and non-prod environments |
Kubectl-like CLI installs apps with single command | Infrastructure as Code (IaC) built on Terraform or CDK |
Imperative tooling is great for iterative testing | Declarative IaC tooling is not designed for iterative testing |
Used to get up and running quickly | Used to drive standards and communicate vetted architecture patterns for utilizing EKS within customer organizations |
eksdemo
eksdemo
is a Golang binary and releases include support for Mac, Linux and Windows running on x86 or arm64. There are a number of ways you can install:
eksdemo
.eksdemo
if you don’t have a Route53 Hosted Zone. Most applications that explose an Ingress resource default to deploying a Service of type LoadBalancer if you don't use the --ingress-host
flag and your connection to the application will be unencrypted.Homebrew installation method is supported for Mac and Linux. Using the Terminal, enter the following commands:
brew tap aws/tap
brew install eksdemo
Note: Depending on how you originally installed eksctl
, you may receive the error: eksctl is already installed from homebrew/core!
This is because eksdemo
uses the official Weaveworks tap weaveworks/tap
as a dependency.
If you receive the error above, run the following commands:
brew uninstall eksctl
brew install eksdemo
AWS CloudShell environments are mostly ephemeral and software you install is lost the next time you reconnect. There is persistent storage available in the home directory that is retained for 120 days after the end of your last session. Use the following commands to install eksdemo
on AWS CloudShell:
curl -s -L "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_Linux_amd64.tar.gz" | tar xz -C /tmp
curl -s -L "https://github.com/awslabs/eksdemo/releases/latest/download/eksdemo_Linux_x86_64.tar.gz" | tar xz -C /tmp
mkdir -p ~/.local/bin && mv /tmp/eksctl ~/.local/bin && mv /tmp/eksdemo ~/.local/bin
To configure Bash completion, first install the bash-completion package:
sudo dnf install bash-completion -y
Once that completes, run the following commands that will configure bash completion to work across CloudShell sessions by installing everything needed in the home directory:
mkdir -p ~/.bashrc.d
cp /usr/share/bash-completion/bash_completion ~/.bashrc.d/
echo '. <(eksdemo completion bash)' >> ~/.bashrc
source ~/.bashrc
To install on Cloud9, you will need to install Homebrew first. In the Cloud9 terminal, run the following commands:
CI=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
(echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> ~/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
brew install aws/tap/eksdemo
To configure Bash completion, run the following commands and then start a new terminal:
cat >> ~/.bashrc << \EOF
if type brew &>/dev/null
then
for COMPLETION in "$(brew --prefix)/etc/bash_completion.d/"*
do
[[ -r "${COMPLETION}" ]] && source "${COMPLETION}"
done
fi
EOF
Navigate to Releases, look under Assets and locate the binary that matches your operation system and platform. Download the file, uncompress and copy to a location of your choice that is in your path. A common location on Mac and Linux is /usr/local/bin
. Note that eksctl
is required and must be installed as well.
Most eksdemo
commands require that you have configured a default AWS region or use the --region
flag. There are 2 ways to configure a default region, either:
aws configure
command to set the region.AWS_REGION
environment variable to the desired default region. An example is export AWS_REGION=us-west-2
. Unless you set the environment variable in your ~/.bashrc
or ~/.zshrc
, you will need to set this every time you open a new terminal.To validate installation you can run the eksdemo version
command and confirm you are running the latest version. The output will be similar to below:
» eksdemo version
eksdemo: version.Info{Version:"0.16.0", Date:"2024-08-19T17:41:55Z", Commit:"74fc767"}
To validate the AWS region is set, you can run eksdemo get cluster
which will list running EKS clusters in the default region. If you don’t have any EKS clusters in the region, you will get the response: No resources found.
» eksdemo get cluster
+------------+--------+---------+---------+----------+----------+
| Age | Status | Cluster | Version | Platform | Endpoint |
+------------+--------+---------+---------+----------+----------+
| 3 weeks | ACTIVE | green | 1.27 | eks.23 | Public |
| 20 minutes | ACTIVE | *blue | 1.31 | eks.2 | Public |
+------------+--------+---------+---------+----------+----------+
* Indicates current context in local kubeconfig
eksdemo
comes with an extensive application catalog. Each application can be installed with a single command:
eksdemo install <application> -c <cluster-name> [flags]
To install applications under a group, you can use either a space or a hyphen. For example, each of the following are valid:
eksdemo install ingress nginx
or eksdemo install ingress-nginx
The application catalog includes:
ack
— AWS Controllers for Kubernetes (ACK)
apigatewayv2-controller
— ACK API Gateway v2 Controllerec2-controller
— ACK EC2 Controllerecr-controller
— ACK ECR Controllereks-controller
— ACK EKS Controlleriam-controller
— ACK IAM Controllerprometheusservice-controller
— ACK Prometheus Service Controllers3-controller
— ACK S3 Controlleradot-operator
— AWS Distro for OpenTelemetry (ADOT) Operatorargo
— Get stuff done with Kubernetes!
cd
— Declarative continuous deployment for Kubernetesworkflows
— Workflow engine for Kubernetesworkflows-cognito
— Workflow engine for Kubernetes using Cognito for authenticationautoscaling
— Kubernetes Autoscaling Applications
cluster-autoscaler
— Kubernetes Cluster Autoscalerkeda
— Kubernetes-based Event Driven Autoscalingvpa
— Vertical Pod Autoscaleraws-fluent-bit
— AWS Fluent Bitaws-lb-controller
— AWS Load Balancer Controllercert-manager
— Cloud Native Certificate Managementcilium
— eBPF-based Networking, Observability, Securityconsul
— HashiCorp Consul Service-Meshcontainer-insights
— CloudWatch Container Insights
adot-collector
— Container Insights ADOT Collector Metricscloudwatch-agent
— Container Insights CloudWatch Agent Metricsfluent-bit
— Container Insights Fluent Bit Logsprometheus
— CloudWatch Container Insights monitoring for Prometheuscore-dump-handler
- Automatically saves core dumps to S3crossplane
— The Cloud Native Control Plane
core
— Crossplane Core Componentsec2-provider
— Crossplane EC2 Provideriam-provider
— Crossplane IAM Providers3-provider
— Crossplane S3 Providerexample
— Example Applications
ascp
— Example for AWS Secrets Manager and Config Provider for Secret Store CSI Drivereks-workshop
— EKS Workshop Example Microservicesgame-2048
— Example Game 2048ghost
— Turn your audience into a businessinflate
— Example App to Demonstrate Autoscalingkube-ops-view
— Kubernetes Operational Viewpodinfo
— Go app w/microservices best practiceswordpress
— WordPress Blogexternal-dns
— ExternalDNSfalco
— Cloud Native Runtime Securityflux
— GitOps family of projects
controllers
— Flux Controllerssync
— Flux GitRepository to sync withgoldilocks
— Get your resource requests "Just Right"harbor
— Cloud Native Registryheadlamp
— An easy-to-use and extensible Kubernetes web UIingress
— Ingress Controllers
contour
— Ingress Controller using Envoy proxyemissary
— Open Source API Gateway from Ambassadornginx
— Ingress NGINX Controlleristio
— Istio Service Mesh
base
— Istio Base (includes CRDs)istiod
— Istio Control Planek8sgpt-operator
— K8sGPT Operatorkarpenter
— Karpenter Node Autoscalingkeycloak-amg
— Keycloak SAML iDP for Amazon Managed Grafanakube-prometheus
— End-to-end Cluster Monitoring with Prometheus
karpenter-dashboards
— Karpenter Dashboards and ServiceMonitorstack
— Kube Prometheus Stackstack-amp
— Kube Prometheus Stack using Amazon Managed Prometheuskube-state-metrics
— Kube State Metricskubecost
— Visibility Into Kubernetes Spend
eks
— EKS optimized bundle of Kubecosteks-amp
— EKS optimized Kubecost using Amazon Managed Prometheusvendor
— Vendor distribution of Kubecostmetrics-server
— Kubernetes Metric Serverneuron
— AWS Neuron for Inferentia and Trainium Support
neuron-device-plugin
— Neuron SDK Device Pluginpolicy
— Kubernetes Policy Controllers
kyverno
— Kubernetes Native Policy Managementopa-gatekeeper
— Policy Controller for Kubernetesprometheus-node-exporter
— Prometheus Node Exportersecrets
— Secrets Management Solutions for Kubernetes
store-csi-driver
— Integrates secrets stores with K8s via a CSI volumestore-csi-driver-provider-aws
— AWS Secrets Manager and Config Provider for Secret Store CSI Driverspark-operator
— Kubeflow Spark Operatorstorage
— Kubernetes Storage Solutions
ebs-csi
— Amazon EBS CSI driverefs-csi
— Amazon EFS CSI driverfsx-lustre-csi
— Amazon FSx for Lustre CSI Driveropenebs
— Kubernetes storage simplifiedvault
— HashiCorp Vault Secrets and Encryption Management Systemvelero
— Backup and Migrate Kubernetes Applicationsvpc-lattice-controller
— Amazon VPC Lattice (Gateway API) Controllereksdemo
makes it easy to view AWS resources from the command line with commands that are very similar to how kubectl get
works. Output defaults to a table, but raw AWS API output can be viewed with -o yaml
and -o json
flag options.
Almost all of the command have shorthand alaises to make it easier to type. For example, get ec2
is an alias for get ec2-instance
. You can find the aliases using the help command, eksdemo get ec2-instance -h
.
access-entry
— EKS Access Entryacm-certificate
— ACM Cerificateaddon
— EKS Managed Addonaddon-versions
— EKS Managed Addon Versionsalarm
— CloudWatch Alarmamg-workspace
— Amazon Managed Grafana Workspaceami
— Amazon Machine Image (AMI)amp-rule
— Amazon Managed Prometheus Rule Namespaceamp-workspace
— Amazon Managed Prometheus Workspaceapplication
— Installed Applicationsauto-scaling-group
— Auto Scaling Groupavailability-zone
— Availability Zonecloudformation-stack
— CloudFormation Stackcloudtrail-event
— CloudTrail Event Historycloudtrail-trail
— CloudTrail Trailcluster
— EKS Clustercognito
— Amazon Cognito Resources
app-client
— Cognito User Pool App Clientdomain
— Cognito User Pool Domainuser-pool
— Cognito User Pooldns-record
— Route53 Resource Record Setec2-instance
— EC2 Instanceecr-repository
— ECR Repositoryelastic-ip
— Elastic IP Addressevent-rule
— EventBridge Rulefargate-profile
— EKS Fargate Profilehosted-zone
— Route53 Hosted Zoneiam-oidc
— IAM OIDC Identity Provideriam-policy
— IAM Policyiam-role
— IAM Roleinternet-gateway
— Internet Gatewaykms-key
— KMS Keylistener
— Load Balancer Listenerlistener-rule
— Load Balancer Listener Ruleload-balancer
— Elastic Load Balancerlog-event
— CloudWatch Log Eventslog-group
— CloudWatch Log Grouplog-stream
— CloudWatch Log Streamlogs-insights
— CloudWatch Logs Insights
query
— Logs Insights Query Historyresults
— Logs Insights Query Resultsstats
— Logs Insights Query Statisticsmetric
— CloudWatch Metricnat-gateway
— NAT Gatewaynetwork-acl
— Network ACLnetwork-acl-rule
— Network ACLnetwork-interface
— Elastic Network Interfacenode
— Kubernetes Nodenodegroup
— EKS Managed Nodegrouporganization
— AWS Organizationprefix-list
— Managed Prefix Listroute-table
— Route Tables3-bucket
— Amazon S3 Bucketsecurity-group
— Security Groupsecurity-group-rule
— Security Group Rulesqs-queue
— SQS Queuessm-node
— SSM Managed Nodessm-parameter
— SSM Parameterssm-session
— SSM Sessionsubnet
— VPC Subnettarget-group
— Target Grouptarget-health
— Target Healthvolume
— EBS Volumevpc
— Virtual Private Cloudvpc-endpoint
— VPC Endpointvpc-lattice
— VPC Lattice Resources
service
— VPC Lattice Serviceservice-network
— VPC Lattice Service Networktarget-group
— VPC Lattice Target Groupvpc-summary
— VPC SummaryThe Basics tutorials provide detailed knowledge on how eksdemo
works. It's recommended you review the Basics tutorials before proceeding to Advanced tutorial as they assume this knowlege.
This project is maintained by AWS Solution Architects. It is not part of an AWS service and support is provided best-effort by the maintainers. To post feedback, submit feature ideas, or report bugs, please use the Issues section of this repo. If you are interested in contributing, please see the Contribution guide.
See CONTRIBUTING for more information.
This library is licensed under the MIT-0 License. See the LICENSE file.