Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/helm-kustomize-comparison.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ name: Helm vs Kustomize Comparison
on:
pull_request:
paths:
- applications/dashboard/**
- scripts/synchronize-dashboard-manifests.sh
- experimental/helm/charts/**
- common/cert-manager/**
- scripts/synchronize-cert-manager-manifests.sh
Expand Down
17 changes: 17 additions & 0 deletions applications/dashboard/helm/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apiVersion: v2
name: kubeflow-dashboard
description: A Helm wrapper chart for Kubeflow Dashboard platform resources
version: 0.1.0
appVersion: v2.0.0
keywords:
- kubeflow
- dashboard
- profiles
- poddefaults
home: https://github.com/kubeflow/community-distribution
sources:
- https://github.com/kubeflow/community-distribution/tree/master/applications/dashboard
- https://github.com/kubeflow/dashboard
annotations:
category: Dashboard
licenses: Apache-2.0
39 changes: 39 additions & 0 deletions applications/dashboard/helm/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Kubeflow Dashboard Helm Chart

This chart renders the current Kubeflow Dashboard Kustomize resources with Helm.
The first slice is intentionally static so rendered output stays aligned with
`applications/dashboard`.

## Install

Install the platform foundation and wrapper charts first. Store Helm release
metadata in `kubeflow-system`; Dashboard workloads still run in `kubeflow`.

```bash
helm install kubeflow-dashboard ./applications/dashboard/helm \
--namespace kubeflow-system \
--values ./applications/dashboard/helm/ci/values-platform.yaml \
--wait
```

## Caveats

The current platform Dashboard Kustomize overlay includes Central Dashboard,
PodDefaults webhook, and Profile Controller/KFAM. This chart keeps that grouping
for parity.

The `profiles.kubeflow.org` and `poddefaults.kubeflow.org` CRDs are rendered
from templates in this first parity slice. Treat CRD lifecycle as a maintenance
caveat before making this chart a long-term supported install surface.

## Kustomize Mapping

- `ci/values-platform.yaml`: `applications/dashboard/overlays/istio`

## Comparison

```bash
helm lint applications/dashboard/helm
./tests/helm_kustomize_compare.sh kubeflow-dashboard platform
./tests/helm_kustomize_compare_all.sh kubeflow-dashboard
```
1 change: 1 addition & 0 deletions applications/dashboard/helm/ci/values-platform.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
scenario: platform
6,090 changes: 6,090 additions & 0 deletions applications/dashboard/helm/templates/platform.yaml

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions applications/dashboard/helm/templates/validate.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{{- $scenario := default "" .Values.scenario -}}
{{- $validScenarios := list "platform" -}}
{{- if not (has $scenario $validScenarios) -}}
{{- fail (printf "invalid scenario %q; supported values: %s" $scenario (join ", " $validScenarios)) -}}
{{- end -}}
5 changes: 5 additions & 0 deletions applications/dashboard/helm/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Default values for the Kubeflow Dashboard chart.

# -- Rendered Kustomize parity scenario.
# Supported value: platform
scenario: platform
28 changes: 27 additions & 1 deletion scripts/synchronize-dashboard-manifests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,40 @@ copy_component_manifests() {
update_readme "$MANIFESTS_DIRECTORY" "$source_text" "$destination_text"
}
TARGET_DIRECTORY="applications/dashboard/upstream"
HELM_CHART_PATH="applications/dashboard/helm"
HELM_CHART_DIRECTORY="${MANIFESTS_DIRECTORY}/${HELM_CHART_PATH}"
HELM_PLATFORM_TEMPLATE="${HELM_CHART_DIRECTORY}/templates/platform.yaml"

update_dashboard_helm_chart() {
local chart_yaml="${HELM_CHART_DIRECTORY}/Chart.yaml"
local temporary_platform_template

if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i "" "s|^appVersion:.*|appVersion: ${COMMIT}|" "$chart_yaml"
else
sed -i "s|^appVersion:.*|appVersion: ${COMMIT}|" "$chart_yaml"
fi

temporary_platform_template="$(mktemp "${HELM_PLATFORM_TEMPLATE}.tmp.XXXXXX")"
{
printf '{{- if eq .Values.scenario "platform" }}\n'
(cd "$MANIFESTS_DIRECTORY" && kustomize build "applications/dashboard/overlays/istio")
printf '{{- end }}\n'
} > "$temporary_platform_template"
mv "$temporary_platform_template" "$HELM_PLATFORM_TEMPLATE"
}

copy_component_manifests "components/poddefaults-webhooks/manifests/kustomize" \
"${TARGET_DIRECTORY}/poddefaults-webhooks"
copy_component_manifests "components/centraldashboard/manifests/kustomize" \
"${TARGET_DIRECTORY}/centraldashboard"
copy_component_manifests "components/profile-controller/manifests/kustomize" \
"${TARGET_DIRECTORY}/profile-controller"
update_dashboard_helm_chart
commit_changes "$MANIFESTS_DIRECTORY" "Update ${REPOSITORY_NAME} manifests from ${COMMIT}" \
"applications/dashboard/upstream" \
"${TARGET_DIRECTORY}" \
"${HELM_CHART_PATH}/Chart.yaml" \
"${HELM_CHART_PATH}/templates/platform.yaml" \
"${SCRIPT_DIRECTORY}/synchronize-dashboard-manifests.sh" \
"README.md"
echo "Synchronization completed successfully."
6 changes: 4 additions & 2 deletions tests/cert_manager_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ echo "Installing cert-manager ..."
cd common/cert-manager
kustomize build base | kubectl apply -f -
echo "Waiting for cert-manager-webhook to be ready ..."
kubectl wait --for=condition=Ready pod -l 'app=webhook' --timeout=180s -n cert-manager
kubectl -n cert-manager rollout status deployment/cert-manager-webhook --timeout=180s
kustomize build overlays/kubeflow | kubectl apply -f -
echo "Waiting for all cert-manager components to be ready ..."
kubectl wait --for=condition=Ready pod -l 'app.kubernetes.io/instance=cert-manager' --timeout=180s -n cert-manager
kubectl -n cert-manager rollout status deployment/cert-manager --timeout=180s
kubectl -n cert-manager rollout status deployment/cert-manager-cainjector --timeout=180s
kubectl -n cert-manager rollout status deployment/cert-manager-webhook --timeout=180s
kubectl wait --for=jsonpath='{.subsets[0].addresses[0].targetRef.kind}'=Pod endpoints -l 'app in (cert-manager,webhook)' --timeout=180s -n cert-manager
7 changes: 5 additions & 2 deletions tests/helm_kustomize_compare.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,9 @@ def compare_manifests(
print(
"Usage: python compare.py <kustomize_file> <helm_file> <component> <scenario> [namespace] [--verbose]"
)
print("Components: katib, hub, kserve-models-web-application, cert-manager")
print(
"Components: katib, hub, kserve-models-web-application, cert-manager, kubeflow-dashboard"
Comment on lines 369 to +372
)
sys.exit(1)

kustomize_file = sys.argv[1]
Expand All @@ -384,10 +386,11 @@ def compare_manifests(
"hub",
"kserve-models-web-application",
"cert-manager",
"kubeflow-dashboard",
]:
print(f"ERROR: Unknown component: {component}")
print(
"Supported components: katib, hub, kserve-models-web-application, cert-manager"
"Supported components: katib, hub, kserve-models-web-application, cert-manager, kubeflow-dashboard"
)
sys.exit(1)

Expand Down
25 changes: 23 additions & 2 deletions tests/helm_kustomize_compare.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ ROOT_DIRECTORY="$(dirname "$SCRIPT_DIRECTORY")"
if [[ -z "$COMPONENT" ]]; then
echo "ERROR: Component is required"
echo "Usage: $0 <component> <scenario>"
echo "Components: katib, hub, kserve-models-web-application, cert-manager"
echo "Components: katib, hub, kserve-models-web-application, cert-manager, kubeflow-dashboard"
exit 1
fi

Expand Down Expand Up @@ -155,9 +155,26 @@ case "$COMPONENT" in
)
;;

"kubeflow-dashboard")
CHART_DIRECTORY="$ROOT_DIRECTORY/applications/dashboard/helm"
MANIFESTS_DIRECTORY="$ROOT_DIRECTORY/applications/dashboard"

declare -A KUSTOMIZE_PATHS=(
["platform"]="$MANIFESTS_DIRECTORY/overlays/istio"
)

declare -A HELM_VALUES=(
["platform"]="$CHART_DIRECTORY/ci/values-platform.yaml"
)

declare -A NAMESPACES=(
["platform"]="kubeflow-system"
)
;;

*)
echo "ERROR: Unknown component: $COMPONENT"
echo "Supported components: katib, hub, kserve-models-web-application, cert-manager"
echo "Supported components: katib, hub, kserve-models-web-application, cert-manager, kubeflow-dashboard"
exit 1
;;
esac
Expand Down Expand Up @@ -230,6 +247,10 @@ elif [[ "$COMPONENT" == "cert-manager" ]]; then
--namespace "$NAMESPACE" \
--include-crds \
--values "$HELM_VALUES_ARGUMENTS" > "$HELM_OUTPUT"
elif [[ "$COMPONENT" == "kubeflow-dashboard" ]]; then
helm template kubeflow-dashboard "$CHART_DIRECTORY" \
--namespace "$NAMESPACE" \
--values "$HELM_VALUES_ARGUMENTS" > "$HELM_OUTPUT"
else
cd "$CHART_DIRECTORY"
if [[ "$COMPONENT" == "katib" ]]; then
Expand Down
7 changes: 5 additions & 2 deletions tests/helm_kustomize_compare_all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ declare -A COMPONENT_SCENARIOS=(
["hub"]="base overlay-postgres overlay-db controller-manager controller-rbac controller-default controller-prometheus controller-network-policy ui-base ui-standalone ui-integrated ui-istio istio csi"
["kserve-models-web-application"]="base kubeflow"
["cert-manager"]="base kubeflow existing-cert-manager"
["kubeflow-dashboard"]="platform"
)

prepare_component() {
Expand Down Expand Up @@ -61,7 +62,7 @@ if [[ "$COMPONENT" == "all" ]]; then
declare -a passed_components=()
declare -a failed_components=()

for component in katib hub kserve-models-web-application cert-manager; do
for component in katib hub kserve-models-web-application cert-manager kubeflow-dashboard; do
if test_component "$component"; then
passed_components+=("$component")
else
Expand Down Expand Up @@ -90,11 +91,13 @@ elif [[ "$COMPONENT" == "help" ]] || [[ "$COMPONENT" == "--help" ]] || [[ "$COMP
echo " hub Test Hub / Model Registry scenarios"
echo " kserve-models-web-application Test KServe UI scenarios"
echo " cert-manager Test cert-manager wrapper scenarios"
echo " kubeflow-dashboard Test Kubeflow Dashboard platform scenario"
echo ""
echo "Examples:"
echo " $0 # Test all components"
echo " $0 katib # Test only Katib"
echo " $0 hub # Test only Hub / Model Registry"
echo " $0 kubeflow-dashboard # Test only Kubeflow Dashboard platform"
exit 0

elif [[ "${COMPONENT_SCENARIOS[$COMPONENT]:-}" ]]; then
Expand All @@ -109,7 +112,7 @@ elif [[ "${COMPONENT_SCENARIOS[$COMPONENT]:-}" ]]; then

else
echo "ERROR: Unknown component: $COMPONENT"
echo "Supported components: katib, hub, kserve-models-web-application, cert-manager, all"
echo "Supported components: katib, hub, kserve-models-web-application, cert-manager, kubeflow-dashboard, all"
echo "Use '$0 help' for more information."
exit 1
fi
Loading