Implementation:Kubeflow Kubeflow Manifests E2E Testing
| Knowledge Sources | |
|---|---|
| Domains | Release Management, End-to-End Testing, CI/CD, Kubernetes |
| Last Updated | 2026-02-13 00:00 GMT |
Overview
Concrete tool for end-to-end integration testing of the Kubeflow platform, provided by the E2E test suite in the kubeflow/manifests repository and CI/CD pipeline execution.
Description
The Manifests E2E Testing implementation uses the test infrastructure in the kubeflow/manifests repository to deploy the full Kubeflow platform on Kubernetes clusters and run end-to-end test scenarios. The manifests repository contains Kustomize overlays that pin specific component versions and assemble them into a deployable platform. The E2E test suite exercises cross-component workflows, verifies deployment health, and validates Kubernetes version compatibility and PodSecurityStandards compliance.
Usage
Use this implementation when:
- Component releases have been tagged and version pins need to be updated in manifests
- A release candidate needs to be validated before final release
- Kubernetes compatibility needs to be verified against the supported version matrix
- Security policy compliance (PodSecurityStandards) must be confirmed
- A regression needs to be investigated in the integrated platform
Code Reference
Source Location
- Repository: kubeflow/manifests
- File: tests/ directory (E2E test suite)
Signature
# E2E Test Suite Execution Pattern
# 1. Provision a test Kubernetes cluster
# 2. Deploy Kubeflow using manifests with pinned versions
# 3. Wait for all components to reach healthy state
# 4. Run end-to-end test scenarios
# 5. Collect results and tear down cluster
# Deploy Kubeflow manifests
kustomize build manifests/example | kubectl apply -f -
# Run E2E tests
make test-e2e
Import
# Clone the manifests repository with test infrastructure
git clone https://github.com/kubeflow/manifests.git
cd manifests
# Review available test scenarios
ls tests/
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| component_releases | list of version strings | Yes | Tagged versions of each sub-project to pin in manifests (e.g., KServe v0.15.2, Katib v0.19.0) |
| manifests_branch | string | Yes | Branch of kubeflow/manifests with updated component version pins |
| kubernetes_versions | list of strings | Yes | Kubernetes versions to test against (e.g., 1.28, 1.29, 1.30) |
| pod_security_standards | string | Yes | PodSecurityStandard level to enforce (baseline or restricted) |
| e2e_test_scenarios | list of strings | No | Specific test scenarios to run; defaults to the full suite |
| test_cluster_config | object | Yes | Configuration for provisioning test clusters (cloud provider, node count, machine type) |
Outputs
| Name | Type | Description |
|---|---|---|
| e2e_test_results | test report | Detailed results of each test scenario including pass/fail status and logs |
| compatibility_matrix | table | Verified Kubernetes version compatibility for the component combination |
| integration_issues | list of issues | Identified integration issues with component attribution and severity |
| manifests_release_candidate | git ref | Validated manifests commit or branch suitable for tagging as a release candidate |
Usage Examples
Example: Updating Component Versions in Manifests
# Clone manifests and create a release branch
git clone https://github.com/kubeflow/manifests.git
cd manifests
git checkout -b release-v1.11
# Update component version pins in kustomization files
# Example: Update KServe version
cd apps/kserve
kustomize edit set image kserve-controller=kserve/kserve-controller:v0.15.2
# Example: Update Katib version
cd ../katib
kustomize edit set image katib-controller=docker.io/kubeflowkatib/katib-controller:v0.19.0
# Commit version pin updates
git add -A
git commit -m "Pin component versions for v1.11 release"
Example: Running the E2E Test Suite
# Provision a test cluster (example using kind)
kind create cluster --name kubeflow-e2e --image kindest/node:v1.29.0
# Deploy Kubeflow using the release branch manifests
cd manifests
while ! kustomize build example | kubectl apply -f -; do
echo "Retrying deployment..."
sleep 10
done
# Wait for all pods to be ready
kubectl wait --for=condition=Ready pods --all -n kubeflow --timeout=600s
kubectl wait --for=condition=Ready pods --all -n knative-serving --timeout=600s
kubectl wait --for=condition=Ready pods --all -n istio-system --timeout=600s
# Run E2E test suite
make test-e2e
# Collect test results
kubectl logs -n kubeflow -l app=e2e-test --tail=-1 > e2e-results.log
Example: Testing Kubernetes Version Compatibility
# Test against multiple Kubernetes versions
for K8S_VERSION in v1.28.0 v1.29.0 v1.30.0; do
echo "Testing against Kubernetes ${K8S_VERSION}"
kind create cluster --name "e2e-${K8S_VERSION}" \
--image "kindest/node:${K8S_VERSION}"
kustomize build example | kubectl apply -f -
kubectl wait --for=condition=Ready pods --all -n kubeflow --timeout=600s
make test-e2e
echo "Kubernetes ${K8S_VERSION}: Tests completed"
kind delete cluster --name "e2e-${K8S_VERSION}"
done
Example: Validating PodSecurityStandards Compliance
# Label namespaces with PodSecurityStandard enforcement
kubectl label namespace kubeflow \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/warn=restricted
# Redeploy and check for violations
kustomize build example | kubectl apply -f -
# Check for PodSecurity warnings in events
kubectl get events -n kubeflow --field-selector reason=FailedCreate