From 4e9ec85c14c0cd0d6e8c00e7980a2c75af8e3e67 Mon Sep 17 00:00:00 2001 From: Vineeth Pothulapati Date: Thu, 12 Aug 2021 18:54:05 +0530 Subject: [PATCH 1/2] bump kube-prometheus-stack for multi-cluster support --- chart/Chart.yaml | 2 +- chart/docs/ha-setup.md | 39 ----------- chart/docs/values-config.md | 128 ++++++++++++++++++++++++++++++++++++ chart/values.yaml | 5 ++ cli/cmd/upgrade/upgrade.go | 16 ++--- 5 files changed, 142 insertions(+), 48 deletions(-) delete mode 100644 chart/docs/ha-setup.md create mode 100644 chart/docs/values-config.md diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 48f22d24..c1a1fa79 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: https://charts.timescale.com - name: kube-prometheus-stack condition: kube-prometheus-stack.enabled - version: 15.2.4 + version: 17.2.1 repository: https://prometheus-community.github.io/helm-charts diff --git a/chart/docs/ha-setup.md b/chart/docs/ha-setup.md deleted file mode 100644 index 80af1028..00000000 --- a/chart/docs/ha-setup.md +++ /dev/null @@ -1,39 +0,0 @@ -# Prometheus High-Availability - -**Note**: This is unnecessary if using the tobs CLI, To enable Prometheus high-availability with tobs CLI use `--enable-prometheus-ha`. - -The following steps will explain how to enable Prometheus high-availability with Promscale when using tobs helm chart (without tobs CLI). - -Update the tobs `values.yaml` with below HA configuration. - -Increase the TimescaleDB connection pool i.e. - -``` -timescaledb-single: - patroni: - bootstrap: - dcs: - postgresql: - parameters: - max_connections: 400 -``` - -Update the Promscale configuration to enable HA mode and increase the replicas to 3: - -``` -promscale: - replicaCount: 3 - args: - - --high-availability -``` - -Update Prometheus configuration to send prometheus pod name with `__replica__` and prometheus cluster name as `cluster` labelSets in the form of external labels and run Prometheus as 3 replicas for HA. - -``` -kube-prometheus-stack: - prometheus: - prometheusSpec: - replicaExternalLabelName: "__replica__" - prometheusExternalLabelName: "cluster" - replicas: 3 -``` \ No newline at end of file diff --git a/chart/docs/values-config.md b/chart/docs/values-config.md new file mode 100644 index 00000000..e18a8d16 --- /dev/null +++ b/chart/docs/values-config.md @@ -0,0 +1,128 @@ +# Tobs helm values config + +## Prometheus High-Availability + +**Note**: This is unnecessary if using the tobs CLI, To enable Prometheus high-availability with tobs CLI use `--enable-prometheus-ha`. + +The following steps will explain how to enable Prometheus high-availability with Promscale when using tobs helm chart (without tobs CLI). + +Update the tobs `values.yaml` with below HA configuration. + +Increase the TimescaleDB connection pool i.e. + +``` +timescaledb-single: + patroni: + bootstrap: + dcs: + postgresql: + parameters: + max_connections: 400 +``` + +Update the Promscale configuration to enable HA mode and increase the replicas to 3: + +``` +promscale: + replicaCount: 3 + args: + - --high-availability +``` + +Update Prometheus configuration to send prometheus pod name with `__replica__` and prometheus cluster name as `cluster` labelSets in the form of external labels and run Prometheus as 3 replicas for HA. + +``` +kube-prometheus-stack: + prometheus: + prometheusSpec: + replicaExternalLabelName: "__replica__" + prometheusExternalLabelName: "cluster" + replicas: 3 +``` + +## Multi-cluster support + +In tobs you can enable multi-cluster support to install a data aggregation cluster to collect observability data coming from different observer clusters. + +With tobs you can deploy both observer clusters and data aggregation cluster. + +### Deploying the data aggregation cluster + +The data aggregation cluster acts as central observability cluster which stores, visualizes data flowing from observer clusters. + +Steps to deploy data aggregation cluster + +* Enable LoadBalancer service to Promscale to remote-wrtie, remote-read data from observer clusters. + +``` +promscale: + service: + loadBalancer: + enabled: true +``` + +* Add external cluster label to differentiate the visualisation in Grafana dashboards per cluster level. + +``` +kube-prometheus-stack: + prometheus: + prometheusSpec: + externalLabels: + cluster: +``` + +* Enable multi-cluster support in Grafana dashboards + +``` +kube-prometheus-stack: + grafana: + sidecar: + dashboards: + multicluster: + global: + enabled: true +``` + +### Deploying the observer cluster + +The observer cluster forwards the metrics to data-aggregation/centralised monitoring cluster which supports ingesting, visualising of metrics flowing from different observer clusters. + +Steps to install an observer cluster + +* Disable TimescaleDB + +``` +timescaledb-single: + enabled: false +``` + +* Disable Promscale + +``` +promscale: + enabled: false +``` + + +* Disable Grafana + +``` +kube-prometheus-stack: + grafana: + enabled: false +``` + +* Configure Prometheus remote-write to Promscale loadbalancer service in data aggregation cluster and add the external label representing the current cluster name to differentiate the visualisation on per cluster basis in Grafana. + +``` +kube-prometheus-stack: + prometheus: + prometheusSpec: + externalLabels: + cluster: + remoteRead: + - url: "/read" + readRecent: true + remoteWrite: + - url: "/write" +``` \ No newline at end of file diff --git a/chart/values.yaml b/chart/values.yaml index 734043fb..4cd43ba5 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -321,6 +321,11 @@ kube-prometheus-stack: # Promscale is the default datasource defaultDatasourceEnabled: false dashboards: + # option to enable multi-cluster support + # in Grafana dashboards by default disabled + multicluster: + global: + enabled: false enabled: true files: - dashboards/k8s-cluster.json diff --git a/cli/cmd/upgrade/upgrade.go b/cli/cmd/upgrade/upgrade.go index 30d70344..b6c76323 100644 --- a/cli/cmd/upgrade/upgrade.go +++ b/cli/cmd/upgrade/upgrade.go @@ -470,14 +470,14 @@ func parsePgBackRestConf(data string) map[string]string { } var crdURLs = []string{ - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.47.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml", } var crdNames = []string{ From 8b7909a652348aee36414e81d4dc88d6af56ffdd Mon Sep 17 00:00:00 2001 From: Vineeth Pothulapati Date: Tue, 24 Aug 2021 18:30:18 +0530 Subject: [PATCH 2/2] update the docs and tests for dependencies --- .github/workflows/generate.yml | 5 ++ .github/workflows/go-schedule.yml | 5 ++ chart/Chart.yaml | 2 +- chart/docs/values-config.md | 4 +- cli/cmd/upgrade/upgrade.go | 26 +++++----- cli/tests/dependency-tests/main_test.go | 64 ++++++++++++++++++++++++ docs/assets/multi-cluster.png | Bin 0 -> 37575 bytes 7 files changed, 92 insertions(+), 14 deletions(-) create mode 100644 cli/tests/dependency-tests/main_test.go create mode 100644 docs/assets/multi-cluster.png diff --git a/.github/workflows/generate.yml b/.github/workflows/generate.yml index b1457e30..8286d31c 100644 --- a/.github/workflows/generate.yml +++ b/.github/workflows/generate.yml @@ -57,6 +57,11 @@ jobs: run: | make helm-tests + - name: Dependency-Tests + working-directory: ${{env.working-directory}} + run: | + go test -v ./tests/dependency-tests + - name: E2E-Tests working-directory: ${{env.working-directory}} run: | diff --git a/.github/workflows/go-schedule.yml b/.github/workflows/go-schedule.yml index 0f120424..be242489 100644 --- a/.github/workflows/go-schedule.yml +++ b/.github/workflows/go-schedule.yml @@ -57,6 +57,11 @@ jobs: run: | make helm-tests + - name: Dependency-Tests + working-directory: ${{env.working-directory}} + run: | + go test -v ./tests/dependency-tests + - name: E2E-Tests working-directory: ${{env.working-directory}} run: | diff --git a/chart/Chart.yaml b/chart/Chart.yaml index c1a1fa79..ebb10fb0 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -18,5 +18,5 @@ dependencies: repository: https://charts.timescale.com - name: kube-prometheus-stack condition: kube-prometheus-stack.enabled - version: 17.2.1 + version: 18.0.0 repository: https://prometheus-community.github.io/helm-charts diff --git a/chart/docs/values-config.md b/chart/docs/values-config.md index e18a8d16..f803a560 100644 --- a/chart/docs/values-config.md +++ b/chart/docs/values-config.md @@ -42,6 +42,8 @@ kube-prometheus-stack: ## Multi-cluster support +multi-cluster setup diagram + In tobs you can enable multi-cluster support to install a data aggregation cluster to collect observability data coming from different observer clusters. With tobs you can deploy both observer clusters and data aggregation cluster. @@ -121,7 +123,7 @@ kube-prometheus-stack: externalLabels: cluster: remoteRead: - - url: "/read" + - url: "/read" readRecent: true remoteWrite: - url: "/write" diff --git a/cli/cmd/upgrade/upgrade.go b/cli/cmd/upgrade/upgrade.go index b6c76323..2180f3c6 100644 --- a/cli/cmd/upgrade/upgrade.go +++ b/cli/cmd/upgrade/upgrade.go @@ -469,18 +469,20 @@ func parsePgBackRestConf(data string) map[string]string { return newData } -var crdURLs = []string{ - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml", - "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.49.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml", +var KubePrometheusCRDVersion = "v0.50.0" + +var kubePrometheusCRDURLs = []string{ + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/"+KubePrometheusCRDVersion+"/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/"+KubePrometheusCRDVersion+"/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/"+KubePrometheusCRDVersion+"/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/"+KubePrometheusCRDVersion+"/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/"+KubePrometheusCRDVersion+"/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/"+KubePrometheusCRDVersion+"/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/"+KubePrometheusCRDVersion+"/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml", + "https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/"+KubePrometheusCRDVersion+"/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml", } -var crdNames = []string{ +var kubePrometheusCRDNames = []string{ "alertmanagerconfigs.monitoring.coreos.com", "alertmanagers.monitoring.coreos.com", "podmonitors.monitoring.coreos.com", @@ -492,11 +494,11 @@ var crdNames = []string{ } func createCRDS() error { - err := k8s.CreateCRDS(crdURLs) + err := k8s.CreateCRDS(kubePrometheusCRDURLs) if err != nil { return err } - fmt.Println("Successfully created CRDs: ", crdNames) + fmt.Println("Successfully created CRDs: ", kubePrometheusCRDNames) return nil } diff --git a/cli/tests/dependency-tests/main_test.go b/cli/tests/dependency-tests/main_test.go new file mode 100644 index 00000000..cca54024 --- /dev/null +++ b/cli/tests/dependency-tests/main_test.go @@ -0,0 +1,64 @@ +package dependency_tests + +import ( + "fmt" + "io/ioutil" + "log" + "net/http" + "testing" + + "github.com/timescale/tobs/cli/cmd/upgrade" + "github.com/timescale/tobs/cli/pkg/helm" + "sigs.k8s.io/yaml" +) + +func TestMain(m *testing.M) { + validateKubePrometheusVersions() +} + +func validateKubePrometheusVersions() { + // Get existing tobs helm chart metadata + b, err := ioutil.ReadFile("./../../../chart/Chart.yaml") + if err != nil { + log.Fatal(err) + } + existingTobsChart := &helm.ChartMetadata{} + err = yaml.Unmarshal(b, existingTobsChart) + if err != nil { + log.Fatal(err) + } + var kubePrometheusVersion string + for _, i := range existingTobsChart.Dependencies { + if i.Name == "kube-prometheus-stack" { + kubePrometheusVersion = i.Version + break + } + } + + // Get upstream kube-prometheus chart metadata using kube-prometheus version used in tobs local Chart.yaml + resp, err := http.Get("https://raw.githubusercontent.com/prometheus-community/helm-charts/kube-prometheus-stack-" + kubePrometheusVersion + "/charts/kube-prometheus-stack/Chart.yaml") + if err != nil { + log.Fatalf("failed to get the kube-prometheus CHart.yaml info %v", err) + } + defer resp.Body.Close() + + bodyBytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + log.Fatal(err) + } + + upstreamKPChart := &helm.ChartMetadata{} + err = yaml.Unmarshal(bodyBytes, upstreamKPChart) + if err != nil { + log.Fatal(err) + } + + upstreamKPChart.AppVersion = "v" + upstreamKPChart.AppVersion + // validate existing tobs kube-prometheus helm chart version & CRDs version with upstream version and CRDs that are being used + if upstreamKPChart.Version != kubePrometheusVersion || upstreamKPChart.AppVersion != upgrade.KubePrometheusCRDVersion { + log.Fatalf("failed to validate tobs kube-prometheus helm chart version and CRDs version with upstream versions."+ + "Mismatch in validation, tobs Kube-Prometheus version: %s, tobs kube-prometheus CRD version: %s, "+ + "upstream kube-prometheus CRD version: %s", kubePrometheusVersion, upgrade.KubePrometheusCRDVersion, upstreamKPChart.AppVersion) + } + fmt.Println("successfully validated kube-prometheus CRD versions with upstream versions.") +} diff --git a/docs/assets/multi-cluster.png b/docs/assets/multi-cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..744aa20556ef91cfb85abe413af2613bb89b9e78 GIT binary patch literal 37575 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%0Aqp}3zY+kTXg@N+>ad(2qZdAnzuIB*7_AyGs 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 literal 0 HcmV?d00001