diff --git a/monitoring/local_monitoring/common.sh b/monitoring/local_monitoring/common.sh index c39b6528..98775fdf 100755 --- a/monitoring/local_monitoring/common.sh +++ b/monitoring/local_monitoring/common.sh @@ -350,6 +350,22 @@ function update_vpa_roles() { fi } +function apply_limitrange_and_namespace_quotas() { + echo "🔄 Applying LimitRange and Namespace Quotas..." + + kubectl apply -f "${current_dir}/manifests/minimal_limit_range.yaml" -n demo-limitrange-violation + if [ $? -ne 0 ]; then + echo "❌ Error applying LimitRange manifest." + fi + + kubectl apply -f "${current_dir}/manifests/minimal_ns_quota.yaml" -n demo-quota-violation + if [ $? -ne 0 ]; then + echo "❌ Error applying Namespace Quota manifest." + fi + + echo "✅ LimitRange and Namespace Quotas applied!" +} + function kruize_local_demo_setup() { bench=$1 # Start all the installs @@ -409,6 +425,17 @@ function kruize_local_demo_setup() { benchmarks_install ${APP_NAMESPACE} ${bench} >> "${LOG_FILE}" 2>&1 apply_benchmark_load ${APP_NAMESPACE} ${bench} >> "${LOG_FILE}" 2>&1 echo "✅ Completed!" + + if [[ -n "${vpa_install_required}" && "${vpa_install_required}" -eq 1 && -n "${CREATE_ALL_EXPERIMENTS}" && "${CREATE_ALL_EXPERIMENTS}" -eq 1 ]]; then + echo -n "🔄 Creating additional namespaces and installing benchmarks..." + create_namespace "demo-quota-violation" >> "${LOG_FILE}" 2>&1 + create_namespace "demo-limitrange-violation" >> "${LOG_FILE}" 2>&1 + benchmarks_install "demo-quota-violation" ${bench} >> "${LOG_FILE}" 2>&1 + apply_benchmark_load "demo-quota-violation" ${bench} >> "${LOG_FILE}" 2>&1 + benchmarks_install "demo-limitrange-violation" ${bench} >> "${LOG_FILE}" 2>&1 + apply_benchmark_load "demo-limitrange-violation" ${bench} >> "${LOG_FILE}" 2>&1 + echo "✅ Completed!" + fi fi echo "" >> "${LOG_FILE}" 2>&1 fi @@ -461,6 +488,10 @@ function kruize_local_demo_setup() { echo -n "🔄 Updating cluser-roles for VPA..." update_vpa_roles >> "${LOG_FILE}" 2>&1 echo "✅ Done!" + + if [ "${CREATE_ALL_EXPERIMENTS:-}" == "1" ]; then + apply_limitrange_and_namespace_quotas + fi } fi diff --git a/monitoring/local_monitoring/vpa_demo/README.md b/monitoring/local_monitoring/vpa_demo/README.md index 32efe495..9b4795b8 100644 --- a/monitoring/local_monitoring/vpa_demo/README.md +++ b/monitoring/local_monitoring/vpa_demo/README.md @@ -32,7 +32,8 @@ cd kruize-demos/monitoring/local_monitoring/vpa_demo ``` ``` -Usage: ./bulk_service_demo.sh [-s|-t] [-c cluster-type] [-l] [-p] [-r] [-i kruize-image] [-u kruize-ui-image] +Usage: ./bulk_service_demo.sh [-s|-t] [-c cluster-type] [-l] [-p] [-r] [-i kruize-image] [-u kruize-ui-image] [-a create-all-experiments] +a = create all experiments simulating error conditions demo c = supports minikube, kind and openshift cluster-type i = kruize image. p = expose prometheus port diff --git a/monitoring/local_monitoring/vpa_demo/experiments/container_vpa_experiment_limitrange_violation.json b/monitoring/local_monitoring/vpa_demo/experiments/container_vpa_experiment_limitrange_violation.json new file mode 100644 index 00000000..528d0ee1 --- /dev/null +++ b/monitoring/local_monitoring/vpa_demo/experiments/container_vpa_experiment_limitrange_violation.json @@ -0,0 +1,30 @@ +[{ + "version": "v2.0", + "experiment_name": "vpa-limit-violation", + "cluster_name": "default", + "performance_profile": "resource-optimization-local-monitoring", + "metadata_profile": "cluster-metadata-local-monitoring", + "mode": "recreate", + "target_cluster": "local", + "datasource": "prometheus-1", + "kubernetes_objects": [ + { + "type": "deployment", + "name": "sysbench", + "namespace": "demo-limitrange-violation", + "containers": [ + { + "container_image_name": "quay.io/kruizehub/sysbench", + "container_name": "sysbench" + } + ] + } + ], + "trial_settings": { + "measurement_duration": "2min" + }, + "recommendation_settings": { + "threshold": "0.1" + } +}] + diff --git a/monitoring/local_monitoring/vpa_demo/experiments/container_vpa_experiment_quota_violation.json b/monitoring/local_monitoring/vpa_demo/experiments/container_vpa_experiment_quota_violation.json new file mode 100644 index 00000000..c5d4736e --- /dev/null +++ b/monitoring/local_monitoring/vpa_demo/experiments/container_vpa_experiment_quota_violation.json @@ -0,0 +1,30 @@ +[{ + "version": "v2.0", + "experiment_name": "vpa-quota-violation", + "cluster_name": "default", + "performance_profile": "resource-optimization-local-monitoring", + "metadata_profile": "cluster-metadata-local-monitoring", + "mode": "recreate", + "target_cluster": "local", + "datasource": "prometheus-1", + "kubernetes_objects": [ + { + "type": "deployment", + "name": "sysbench", + "namespace": "demo-quota-violation", + "containers": [ + { + "container_image_name": "quay.io/kruizehub/sysbench", + "container_name": "sysbench" + } + ] + } + ], + "trial_settings": { + "measurement_duration": "2min" + }, + "recommendation_settings": { + "threshold": "0.1" + } +}] + diff --git a/monitoring/local_monitoring/vpa_demo/manifests/minimal_limit_range.yaml b/monitoring/local_monitoring/vpa_demo/manifests/minimal_limit_range.yaml new file mode 100644 index 00000000..4f214e0f --- /dev/null +++ b/monitoring/local_monitoring/vpa_demo/manifests/minimal_limit_range.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: minimum-limit-range + namespace: demo-limitrange-violation +spec: + limits: + - type: Container + min: + cpu: "500m" + memory: "24Mi" + max: + cpu: "1" + memory: "32Gi" diff --git a/monitoring/local_monitoring/vpa_demo/manifests/minimal_ns_quota.yaml b/monitoring/local_monitoring/vpa_demo/manifests/minimal_ns_quota.yaml new file mode 100644 index 00000000..feb24c14 --- /dev/null +++ b/monitoring/local_monitoring/vpa_demo/manifests/minimal_ns_quota.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ResourceQuota +metadata: + name: minimal-quota + namespace: "demo-quota-violation" +spec: + hard: + pods: "20" + requests.cpu: "10m" + requests.memory: "0.2Mi" + limits.cpu: "10m" + limits.memory: "0.2Mi" diff --git a/monitoring/local_monitoring/vpa_demo/vpa_demo.sh b/monitoring/local_monitoring/vpa_demo/vpa_demo.sh index 8e294eb0..490504ff 100755 --- a/monitoring/local_monitoring/vpa_demo/vpa_demo.sh +++ b/monitoring/local_monitoring/vpa_demo/vpa_demo.sh @@ -36,7 +36,7 @@ KRUIZE_UI_PORT=8081 TECHEMPOWER_PORT=8082 function usage() { - echo "Usage: $0 [-s|-t] [-c cluster-type] [-f] [-i kruize-image] [-u kruize-ui-image] [-e experiment_type] [ [-b] [-m benchmark-manifests] [-n namespace] [-l] [-d load-duration] ] [-p]" + echo "Usage: $0 [-s|-t] [-c cluster-type] [-f] [-i kruize-image] [-u kruize-ui-image] [-e experiment_type] [ [-b] [-m benchmark-manifests] [-n namespace] [-l] [-d load-duration] ] [-p] [-a]" echo "s = start (default), t = terminate" echo "c = supports minikube, kind, aks and openshift cluster-type" echo "f = create environment setup if cluster-type is minikube, kind" @@ -48,7 +48,7 @@ function usage() { echo "l = Run a load against the benchmark" echo "d = duration to run the benchmark load" echo "p = expose prometheus port" - + echo "a = creates all experiments including error scenarios" exit 1 } @@ -67,10 +67,15 @@ export APP_NAMESPACE="default" export LOAD_DURATION="1200" export BENCHMARK_MANIFESTS="resource_provisioning_manifests" export EXPERIMENT_TYPE="" +export CREATE_ALL_EXPERIMENTS=0 + # Iterate through the commandline options -while getopts bc:d:e:fi:lm:n:pstu: gopts +while getopts abc:d:e:fi:lm:n:pstu: gopts do case "${gopts}" in + a) + export CREATE_ALL_EXPERIMENTS=1 + ;; b) start_demo=2 benchmark=1 @@ -118,9 +123,14 @@ export demo="local" export vpa_install_required="1" EXPERIMENT_TYPE="container" -export EXPERIMENTS=("container_vpa_experiment_sysbench") BENCHMARK="sysbench" +if [ ${CREATE_ALL_EXPERIMENTS} -eq 1 ]; then + export EXPERIMENTS=("container_vpa_experiment_sysbench" "container_vpa_experiment_quota_violation" "container_vpa_experiment_limitrange_violation") +else + export EXPERIMENTS=("container_vpa_experiment_sysbench") +fi + if [ ${start_demo} -eq 1 ]; then echo > "${LOG_FILE}"