Run Prombench tests in Elastic Kubernetes Service (EKS).
-
Create Security Credentials:
- Create security credentials on AWS.
- Store the credentials in a YAML file as follows:
accesskeyid: <Amazon access key> secretaccesskey: <Amazon access secret>
-
Create a VPC:
- Set up a VPC with public subnets.
-
Create IAM Roles:
- EKS Cluster Role: Create an Amazon EKS cluster role with the following policy:
AmazonEKSclusterPolicy
- EKS Worker Node Role: Create an Amazon EKS worker node role with the following policies:
AmazonEKSWorkerNodePolicy
AmazonEKS_CNI_Policy
AmazonEC2ContainerRegistryReadOnly
- EKS Cluster Role: Create an Amazon EKS cluster role with the following policy:
-
Set Environment Variables and Deploy the Cluster:
export AUTH_FILE=<path to yaml credentials file that was created in the last step> export CLUSTER_NAME=prombench export ZONE=us-east-1 export EKS_WORKER_ROLE_ARN=<Amazon EKS worker node IAM role ARN> export EKS_CLUSTER_ROLE_ARN=<Amazon EKS cluster role ARN> export SEPARATOR=, export EKS_SUBNET_IDS=SUBNETID1,SUBNETID2,SUBNETID3 export PROVIDER=eks make cluster_create
Note: These components are responsible for collecting, monitoring, and displaying test results and logs.
-
Optional GitHub Integration:
- If used with GitHub integration, generate a GitHub auth token:
- Login with the Prombot account and generate a new auth token.
- Required permissions:
public_repo
,read:org
,write:discussion
.
export GRAFANA_ADMIN_PASSWORD=password export DOMAIN_NAME=prombench.prometheus.io # Can be set to any other custom domain or an empty string if not used with the GitHub integration. export OAUTH_TOKEN=<generated token from GitHub or set to an empty string " "> export WH_SECRET=<GitHub webhook secret> export GITHUB_ORG=prometheus export GITHUB_REPO=prometheus
- If used with GitHub integration, generate a GitHub auth token:
-
Deploy the Monitoring Components:
- This step will deploy the nginx-ingress-controller, Prometheus-Meta, Loki, Grafana, Alertmanager, and GitHub Notifier.
make cluster_resource_apply
-
Configure DNS:
- The output will display the ingress IP. Use this IP to point the domain name.
- Set the
A record
for<DOMAIN_NAME>
to point to thenginx-ingress-controller
IP address.
-
Access the Services:
- Grafana:
http://<DOMAIN_NAME>/grafana
- Prometheus:
http://<DOMAIN_NAME>/prometheus-meta
- Logs:
http://<DOMAIN_NAME>/grafana/explore
- Profiles:
http://<DOMAIN_NAME>/profiles
- Grafana:
-
Set the Environment Variables:
export RELEASE=<master/main or any prometheus release (e.g., v2.3.0)> export PR_NUMBER=<PR to benchmark against the selected $RELEASE>
-
Create Nodegroups for Kubernetes Objects:
make node_create
-
Deploy the Kubernetes Objects:
make resource_apply
-
Set the Environment Variables:
export AUTH_FILE=<path to yaml credentials file that was created> export CLUSTER_NAME=prombench export SEPARATOR=, export EKS_WORKER_ROLE_ARN=<Amazon EKS worker node IAM role ARN> export EKS_CLUSTER_ROLE_ARN=<Amazon EKS cluster role ARN> export EKS_SUBNET_IDS=SUBNETID1,SUBNETID2,SUBNETID3 export ZONE=us-east-1 export PROVIDER=eks export PR_NUMBER=<PR to benchmark against the selected $RELEASE>
-
Delete Nodegroups (Keeping the Main Node Intact):
make clean
-
Delete Everything (Complete Teardown):
make cluster_delete