-
Notifications
You must be signed in to change notification settings - Fork 136
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* feat: testkube kind Docker image Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * fix: tune entrypoint Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * fix: removed Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * fix: remove files Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * fix: add logs Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * feat: cloud image Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * Update build/kind/oss/Dockerfile.kind Co-authored-by: Dawid Rusnak <dawid@drcode.pl> * fix: remove org and env id Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * fix: move folder Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * fix: remove example Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> * fix: add docker container env Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> --------- Signed-off-by: Vladislav Sukhin <vladislav@kubeshop.io> Co-authored-by: Dawid Rusnak <dawid@drcode.pl>
- Loading branch information
Showing
3 changed files
with
408 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# syntax=docker/dockerfile:1 | ||
# Step 1: Use a base image with Docker installed | ||
FROM docker:20.10.24-dind | ||
|
||
# Step 2: Install necessary dependencies (curl, bash, tini) | ||
RUN apk add --no-cache bash curl tini | ||
|
||
# Step 3: Install Kind (Kubernetes in Docker) | ||
RUN curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64 && \ | ||
chmod +x ./kind && \ | ||
mv ./kind /usr/local/bin/kind | ||
|
||
# Step 4: Install kubectl (for interacting with the Kubernetes cluster) | ||
RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && \ | ||
chmod +x ./kubectl && \ | ||
mv ./kubectl /usr/local/bin/kubectl | ||
|
||
# Step 5: Install Helm (package manager for Kubernetes) | ||
RUN curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash | ||
|
||
# Step 6: Script to automatically create Kind cluster and install Testkube | ||
COPY entrypoint.sh /usr/local/bin/entrypoint.sh | ||
RUN chmod +x /usr/local/bin/entrypoint.sh | ||
|
||
# Step 7: Example K6 Test Workflow CRD and preload Kind images | ||
COPY ./images /images | ||
COPY k6.yaml /examples/k6.yaml | ||
|
||
# Step 8: Set Docker entry point for DIND (Docker-in-Docker) | ||
ENTRYPOINT ["tini", "--", "/usr/local/bin/entrypoint.sh"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
#!/bin/bash | ||
|
||
# Turn on bash's job control | ||
set -m | ||
|
||
# Logging function to make it easier to debug | ||
log() { | ||
echo "[INFO] $1" | ||
} | ||
|
||
# Check if agent key is provided | ||
if [ -z "$AGENT_KEY" ]; then | ||
log "Please provide AGENT_KEY env var" | ||
exit 1 | ||
fi | ||
|
||
# Check if cloud url is provided | ||
if [ -z "$CLOUD_URL" ]; then | ||
log "Please provide CLOUD_URL env var" | ||
exit 1 | ||
fi | ||
|
||
# Step 1: Start docker service in background | ||
/usr/local/bin/dockerd-entrypoint.sh & | ||
|
||
# Step 2: Wait that the docker service is up | ||
while ! docker info; do | ||
log "Waiting docker for 5 seconds..." | ||
sleep 5 | ||
done | ||
|
||
# Step 3: Import pre-installed images | ||
for file in /images/*.tar; do | ||
log "Load docker image $file..." | ||
docker load <$file | ||
done | ||
|
||
# Step 4: Create Kind cluster using a specific Kubernetes version | ||
log "Creating Kubernetes cluster using Kind (Kubernetes v1.31.0)..." | ||
kind create cluster --name testkube-cluster --image kindest/node:v1.31.0 --wait 5m | ||
if [ $? -ne 0 ]; then | ||
log "Failed to create Kind cluster." | ||
exit 1 | ||
fi | ||
|
||
# Step 5: Verify kubectl is connected to the cluster | ||
log "Verifying cluster is up..." | ||
kubectl cluster-info | ||
if [ $? -ne 0 ]; then | ||
log "Failed to verify cluster." | ||
exit 1 | ||
fi | ||
|
||
# Step 6: Add the Testkube Helm repository | ||
log "Adding Testkube Helm repository..." | ||
helm repo add testkube https://kubeshop.github.io/helm-charts | ||
helm repo update | ||
|
||
# Step 7: Install Testkube using Helm | ||
log "Installing Testkube via Helm..." | ||
helm install testkube testkube/testkube --namespace testkube --create-namespace --set testkube-api.cloud.key=$AGENT_KEY --set testkube-api.minio.enabled=false --set mongodb.enabled=false --set testkube-dashboard.enabled=false --set testkube-api.cloud.url=$CLOUD_URL --set testkube-api.containerEnv=docker | ||
if [ $? -ne 0 ]; then | ||
log "Testkube installation failed." | ||
exit 1 | ||
fi | ||
|
||
# Step 8: Verify Testkube is installed to the cluster | ||
log "Verifying Testkube is up..." | ||
counter=0 | ||
log_pattern="starting Testkube API server" | ||
while [ $counter -lt 15 ] | ||
do | ||
# Get all pod statuses in the Testkube namespace | ||
pod_status=$(kubectl get pods -n testkube --no-headers) | ||
|
||
# Check if there are any pods in the Testkube namespace | ||
if [ -z "$pod_status" ]; then | ||
log "No pods found in Testkube namespace." | ||
exit 1 | ||
fi | ||
|
||
# Iterate through each pod, check status and log pattern | ||
all_running=true | ||
found_pattern=false | ||
|
||
log "Checking pods in Testkube namespace..." | ||
while read -r line; do | ||
pod_name=$(echo "$line" | awk '{print $1}') | ||
status=$(echo "$line" | awk '{print $3}') | ||
|
||
if [ "$status" != "Running" ]; then | ||
log "Pod $pod_name is not running. Status: $status." | ||
all_running=false | ||
break | ||
else | ||
log "Pod $pod_name is running." | ||
fi | ||
|
||
if [[ $pod_name == *"testkube-api-server"* ]]; then | ||
pod_logs=$(kubectl logs "$pod_name" -n testkube) | ||
|
||
# Check if logs contain the desired pattern | ||
if echo "$pod_logs" | grep -q "$log_pattern"; then | ||
log "Log pattern found: $log_pattern." | ||
found_pattern=true | ||
else | ||
log "Log pattern not found: $log_pattern." | ||
break | ||
fi | ||
fi | ||
done <<< "$pod_status" | ||
|
||
if [ "$all_running" = true ] && [ "$found_pattern" = true ] ; then | ||
log "Waiting Testkube API for 30 seconds..." | ||
sleep 30 | ||
break | ||
else | ||
log "Waiting Testkube for 30 seconds..." | ||
sleep 30 | ||
fi | ||
|
||
counter=$(( counter + 1 )) | ||
done | ||
|
||
if [ $counter -eq 15 ]; then | ||
log "Testkube validation failed." | ||
exit 1 | ||
fi | ||
log "Testkube is up and running." | ||
|
||
# Step 9: Create Testkube k6 Test Workflow | ||
log "Creating and running Testkube k6 Test Workflow..." | ||
kubectl apply -f /examples/k6.yaml -n testkube | ||
|
||
log "Testkube installation successful!" | ||
log "You can now use Testkube in your Kind Kubernetes cluster." | ||
|
||
# Step 10: Bring docker service back to foreground | ||
fg %1 |
Oops, something went wrong.