Skip to content

Commit

Permalink
fix: don't create Kind cluster twice (#5914)
Browse files Browse the repository at this point in the history
* fix: don't create Kind cluster twice

Signed-off-by: Vladislav Sukhin <[email protected]>

* fix: remove tini warning

Signed-off-by: Vladislav Sukhin <[email protected]>

---------

Signed-off-by: Vladislav Sukhin <[email protected]>
  • Loading branch information
vsukhin authored Oct 9, 2024
1 parent df7575b commit 2847b2f
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 91 deletions.
187 changes: 97 additions & 90 deletions build/kind/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -195,111 +195,118 @@ for file in /images/*.tar; do
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."
send_telenetry "docker_installation_failed" "kind_error" "Kind cluster was not created"
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."
send_telenetry "docker_installation_failed" "kind_error" "Kind cluster is nor accessible"
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."
send_telenetry "docker_installation_failed" "helm_error" "Testkube installation failed"
exit 1
fi
# Get the list of kind clusters
EXISTING_CLUSTERS=$(kind get clusters)
# Check if the testkube-cluster exists in the list
if echo "$EXISTING_CLUSTERS" | grep -wq "testkube-cluster"; then
log "Kind cluster already exists"
else
# 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."
send_telenetry "docker_installation_failed" "kind_error" "Kind cluster was not created"
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."
send_telenetry "docker_installation_failed" "tetkube_error" "No pods found in testkube namespace"
# 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."
send_telenetry "docker_installation_failed" "kind_error" "Kind cluster is nor accessible"
exit 1
fi

# Iterate through each pod, check status and log pattern
all_running=true
found_pattern=false
# 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."
send_telenetry "docker_installation_failed" "helm_error" "Testkube installation failed"
exit 1
fi

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."
# 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."
send_telenetry "docker_installation_failed" "tetkube_error" "No pods found in testkube namespace"
exit 1
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."
# 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
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
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"

counter=$(( counter + 1 ))
done
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

if [ $counter -eq 15 ]; then
log "Testkube validation failed."
counter=$(( counter + 1 ))
done

if [ $counter -eq 15 ]; then
log "Testkube validation failed."
send_telenetry "docker_installation_failed" "tetkube_error" "Testkube pods are not up and running"
exit 1
fi
log "Testkube is up and running."
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
# 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."
send_telenetry "docker_installation_succeed"
log "Testkube installation successful!"
log "You can now use Testkube in your Kind Kubernetes cluster."
send_telenetry "docker_installation_succeed"
fi

# Step 10: Bring docker service back to foreground
fg %1
4 changes: 3 additions & 1 deletion build/kind/kind.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
# Step 1: Use a base image with Docker installed
FROM docker:20.10.24-dind

# Step 2: Install necessary dependencies (curl, bash, tini)
ENV TINI_SUBREAPER=true

# Step 2: Install necessary dependencies (curl, bash, tini, jq)
RUN apk add --no-cache bash curl tini jq

# Step 3: Install Kind (Kubernetes in Docker)
Expand Down

0 comments on commit 2847b2f

Please sign in to comment.