Skip to content

Commit

Permalink
Install all observability tools in the cnf-testsuite namespace
Browse files Browse the repository at this point in the history
It allows running observability and platform:observability
when Pod Security Standard restricted is enforced.

It also sets the namespace cnf-space and the right label in
the sample-openmetrics manifest.

Signed-off-by: Cédric Ollivier <[email protected]>
  • Loading branch information
collivier authored and martin-mat committed Jan 22, 2025
1 parent d6bc395 commit 8e03ab9
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 30 deletions.
10 changes: 10 additions & 0 deletions sample-cnfs/sample-openmetrics/manifests/manifest.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: cnfspace
labels:
pod-security.kubernetes.io/enforce: privileged

---
apiVersion: v1
kind: ConfigMap
metadata:
name: metrics-data
namespace: cnfspace
data:
OpenMetricsData: |-
# HELP meows Heard around the house.
Expand Down Expand Up @@ -31,6 +40,7 @@ apiVersion: v1
kind: Pod
metadata:
name: metrics-example
namespace: cnfspace
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "80"
Expand Down
28 changes: 14 additions & 14 deletions spec/platform/observability_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,25 @@ describe "Platform Observability" do
helm = Helm::BinarySingleton.helm
result = ShellCmd.run("#{helm} repo add prometheus-community https://prometheus-community.github.io/helm-charts")
result = ShellCmd.run("#{helm} repo update")
result = ShellCmd.run("#{helm} install --version 5.3.0 kube-state-metrics prometheus-community/kube-state-metrics", force_output: true)
KubectlClient::Get.wait_for_install("kube-state-metrics")
result = ShellCmd.run("#{helm} -n #{TESTSUITE_NAMESPACE} install --version 5.3.0 kube-state-metrics prometheus-community/kube-state-metrics", force_output: true)
KubectlClient::Get.wait_for_install("kube-state-metrics", namespace: TESTSUITE_NAMESPACE)

result = ShellCmd.run_testsuite("platform:kube_state_metrics poc")
(/(PASSED).*(Your platform is using the).*(release for kube state metrics)/ =~ result[:output]).should_not be_nil
ensure
result = ShellCmd.run("#{helm} delete kube-state-metrics", force_output: true)
result = ShellCmd.run("#{helm} delete kube-state-metrics -n #{TESTSUITE_NAMESPACE}", force_output: true)
result[:status].success?.should be_true
end

it "'node_exporter' should detect the named release of the installed node_exporter", tags: ["platform:observability"] do

Log.info { "Installing prometheus-node-exporter" }
Log.info { "Installing prometheus-node-exporter" }
helm = Helm::BinarySingleton.helm
Helm.helm_repo_add("prometheus-community","https://prometheus-community.github.io/helm-charts")
result = ShellCmd.run("#{helm} install node-exporter prometheus-community/prometheus-node-exporter", force_output: true)
result = ShellCmd.run("#{helm} install -n #{TESTSUITE_NAMESPACE} node-exporter prometheus-community/prometheus-node-exporter", force_output: true)

repeat_with_timeout(timeout: POD_READINESS_TIMEOUT, errormsg: "Pod readiness has timed-out") do
pod_ready = KubectlClient::Get.pod_status("node-exporter-prometheus").split(",")[2] == "true"
pod_ready = KubectlClient::Get.pod_status("node-exporter-prometheus", namespace: TESTSUITE_NAMESPACE).split(",")[2] == "true"
Log.info { "Pod Ready Status: #{pod_ready}" }
pod_ready
end
Expand All @@ -44,7 +44,7 @@ describe "Platform Observability" do
(/skipping node_exporter: This test only supports the Containerd Runtime./ =~ result[:output]).should_not be_nil
end
ensure
result = ShellCmd.run("#{helm} delete node-exporter", force_output: true)
result = ShellCmd.run("#{helm} delete node-exporter -n #{TESTSUITE_NAMESPACE}", force_output: true)
result[:status].success?.should be_true
end

Expand All @@ -53,35 +53,35 @@ describe "Platform Observability" do
helm = Helm::BinarySingleton.helm
begin
Helm.helm_repo_add("prometheus-community","https://prometheus-community.github.io/helm-charts")
result = Helm.install("prometheus-adapter prometheus-community/prometheus-adapter")
result = Helm.install("-n #{TESTSUITE_NAMESPACE} prometheus-adapter prometheus-community/prometheus-adapter")
Log.info { "Prometheus installed" }
rescue e : Helm::CannotReuseReleaseNameError
Log.info { "Prometheus already installed" }
end
KubectlClient::Get.wait_for_install("prometheus-adapter")
KubectlClient::Get.wait_for_install("prometheus-adapter", namespace: TESTSUITE_NAMESPACE)

result = ShellCmd.run_testsuite("platform:prometheus_adapter poc")
(/(PASSED).*(Your platform is using the prometheus adapter)/ =~ result[:output]).should_not be_nil
ensure
resp = Helm.uninstall("prometheus-adapter")
resp = Helm.uninstall("prometheus-adapter -n #{TESTSUITE_NAMESPACE}")
end

it "'metrics_server' should detect the named release of the installed metrics_server", tags: ["platform:observability"] do
Log.info { "Installing metrics-server" }
helm = Helm::BinarySingleton.helm
begin
Helm.helm_repo_add("metrics-server","https://kubernetes-sigs.github.io/metrics-server/")
result = Helm.install("metrics-server -f spec/fixtures/metrics_values.yml metrics-server/metrics-server")
result = Helm.install("-n #{TESTSUITE_NAMESPACE} metrics-server -f spec/fixtures/metrics_values.yml metrics-server/metrics-server")
Log.info { "Metrics Server installed" }
rescue e : Helm::CannotReuseReleaseNameError
Log.info { "Metrics Server already installed" }
end
Log.info { result }
KubectlClient::Get.wait_for_install(deployment_name: "metrics-server")
Log.info { result }
KubectlClient::Get.wait_for_install(deployment_name: "metrics-server", namespace: TESTSUITE_NAMESPACE)
result = ShellCmd.run_testsuite("platform:metrics_server poc")
(/(PASSED).*(Your platform is using the metrics server)/ =~ result[:output]).should_not be_nil
ensure
result = Helm.uninstall("metrics-server")
result = Helm.uninstall("metrics-server -n #{TESTSUITE_NAMESPACE}")
Log.info { result }
result[:status].success?.should be_true
end
Expand Down
32 changes: 16 additions & 16 deletions spec/workload/observability_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -40,25 +40,25 @@ describe "Observability" do
ShellCmd.run("#{helm} repo add prometheus-community https://prometheus-community.github.io/helm-charts", "helm_repo_add_prometheus", force_output: true)

Log.info { "Installing prometheus server" }
install_cmd = "#{helm} install --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false prometheus prometheus-community/prometheus"
install_cmd = "#{helm} install -n #{TESTSUITE_NAMESPACE} --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false prometheus prometheus-community/prometheus"
ShellCmd.run(install_cmd, "helm_install_prometheus", force_output: true)

KubectlClient::Get.wait_for_install("prometheus-server")
ShellCmd.run("kubectl describe deployment prometheus-server", "k8s_describe_prometheus", force_output: true)
KubectlClient::Get.wait_for_install("prometheus-server", namespace: TESTSUITE_NAMESPACE)
ShellCmd.run("kubectl describe deployment prometheus-server -n #{TESTSUITE_NAMESPACE}", "k8s_describe_prometheus", force_output: true)

test_result = ShellCmd.run_testsuite("prometheus_traffic")
(/(PASSED).*(Your cnf is sending prometheus traffic)/ =~ test_result[:output]).should_not be_nil
ensure
ShellCmd.cnf_uninstall()
result = ShellCmd.run("#{helm} delete prometheus", "helm_delete_prometheus")
result = ShellCmd.run("#{helm} delete prometheus -n #{TESTSUITE_NAMESPACE}", "helm_delete_prometheus")
result[:status].success?.should be_true
end

it "'prometheus_traffic' should skip if there is no prometheus installed", tags: ["observability"] do

ShellCmd.cnf_install("cnf-config=sample-cnfs/sample-coredns-cnf/cnf-testsuite.yml")
helm = Helm::BinarySingleton.helm
result = ShellCmd.run("#{helm} delete prometheus", force_output: true)
result = ShellCmd.run("#{helm} delete prometheus -n #{TESTSUITE_NAMESPACE}", force_output: true)

result = ShellCmd.run_testsuite("prometheus_traffic")
(/(SKIPPED).*(Prometheus server not found)/ =~ result[:output]).should_not be_nil
Expand All @@ -72,16 +72,16 @@ describe "Observability" do
Log.info { "Installing prometheus server" }
helm = Helm::BinarySingleton.helm
result = ShellCmd.run("helm repo add prometheus-community https://prometheus-community.github.io/helm-charts", force_output: true)
result = ShellCmd.run("#{helm} install --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false prometheus prometheus-community/prometheus", force_output: true)
KubectlClient::Get.wait_for_install("prometheus-server")
result = ShellCmd.run("#{helm} install -n #{TESTSUITE_NAMESPACE} --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false prometheus prometheus-community/prometheus", force_output: true)
KubectlClient::Get.wait_for_install("prometheus-server", namespace: TESTSUITE_NAMESPACE)
result = ShellCmd.run("kubectl describe deployment prometheus-server", force_output: true)
#todo logging on prometheus pod

result = ShellCmd.run_testsuite("prometheus_traffic")
(/(FAILED).*(Your cnf is not sending prometheus traffic)/ =~ result[:output]).should_not be_nil
ensure
result = ShellCmd.cnf_uninstall()
result = ShellCmd.run("#{helm} delete prometheus", force_output: true)
result = ShellCmd.run("#{helm} delete prometheus -n #{TESTSUITE_NAMESPACE}", force_output: true)
result[:status].success?.should be_true
end

Expand All @@ -90,16 +90,16 @@ describe "Observability" do
result = ShellCmd.run("helm repo add prometheus-community https://prometheus-community.github.io/helm-charts", force_output: true)
Log.info { "Installing prometheus server" }
helm = Helm::BinarySingleton.helm
result = ShellCmd.run("#{helm} install --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false prometheus prometheus-community/prometheus", force_output: true)
KubectlClient::Get.wait_for_install("prometheus-server")
result = ShellCmd.run("kubectl describe deployment prometheus-server", force_output: true)
result = ShellCmd.run("#{helm} install -n #{TESTSUITE_NAMESPACE} --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false prometheus prometheus-community/prometheus", force_output: true)
KubectlClient::Get.wait_for_install("prometheus-server", namespace: TESTSUITE_NAMESPACE)
result = ShellCmd.run("kubectl describe deployment prometheus-server -n #{TESTSUITE_NAMESPACE}", force_output: true)
#todo logging on prometheus pod

result = ShellCmd.run_testsuite("open_metrics")
(/(FAILED).*(Your cnf's metrics traffic is not OpenMetrics compatible)/ =~ result[:output]).should_not be_nil
ensure
result = ShellCmd.cnf_uninstall()
result = ShellCmd.run("#{helm} delete prometheus", force_output: true)
result = ShellCmd.run("#{helm} delete prometheus -n #{TESTSUITE_NAMESPACE}", force_output: true)
result[:status].success?.should be_true
end

Expand All @@ -108,16 +108,16 @@ describe "Observability" do
result = ShellCmd.run("helm repo add prometheus-community https://prometheus-community.github.io/helm-charts", force_output: true)
Log.info { "Installing prometheus server" }
helm = Helm::BinarySingleton.helm
result = ShellCmd.run("#{helm} install --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false prometheus prometheus-community/prometheus", force_output: true)
KubectlClient::Get.wait_for_install("prometheus-server")
result = ShellCmd.run("kubectl describe deployment prometheus-server", force_output: true)
result = ShellCmd.run("#{helm} install -n #{TESTSUITE_NAMESPACE} --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false prometheus prometheus-community/prometheus", force_output: true)
KubectlClient::Get.wait_for_install("prometheus-server", namespace: TESTSUITE_NAMESPACE)
result = ShellCmd.run("kubectl describe deployment prometheus-server -n #{TESTSUITE_NAMESPACE}", force_output: true)
#todo logging on prometheus pod

result = ShellCmd.run_testsuite("open_metrics")
(/(PASSED).*(Your cnf's metrics traffic is OpenMetrics compatible)/ =~ result[:output]).should_not be_nil
ensure
result = ShellCmd.cnf_uninstall()
result = ShellCmd.run("#{helm} delete prometheus", force_output: true)
result = ShellCmd.run("#{helm} delete prometheus -n #{TESTSUITE_NAMESPACE}", force_output: true)
result[:status].success?.should be_true
end

Expand Down

0 comments on commit 8e03ab9

Please sign in to comment.