From 356c6240bf1f1e458584ca18456ef999bfef3e06 Mon Sep 17 00:00:00 2001 From: Zheng Xi Zhou Date: Wed, 3 Nov 2021 17:29:48 +0800 Subject: [PATCH] Fix: change Initializer to Application for addon Observability (#2615) In this doc, updated the Observability implementation from initializer to Application. I also store definitions as it's not well stored in vela-templates/addons/observability --- .../application-observability.yaml | 130 ++++++++++++++ .../trait-import-grafana-dashboard.yaml | 31 ++++ .../definitions/trait-pure-ingress.yaml | 58 +++++++ .../trait-register-grafana-datasource.yaml | 42 +++++ .../initializer-observability.yaml | 159 ------------------ 5 files changed, 261 insertions(+), 159 deletions(-) create mode 100644 docs/examples/obervability/application-observability.yaml create mode 100644 docs/examples/obervability/definitions/trait-import-grafana-dashboard.yaml create mode 100644 docs/examples/obervability/definitions/trait-pure-ingress.yaml create mode 100644 docs/examples/obervability/definitions/trait-register-grafana-datasource.yaml delete mode 100644 docs/examples/obervability/initializer-observability.yaml diff --git a/docs/examples/obervability/application-observability.yaml b/docs/examples/obervability/application-observability.yaml new file mode 100644 index 000000000..4fc544e09 --- /dev/null +++ b/docs/examples/obervability/application-observability.yaml @@ -0,0 +1,130 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: observability +spec: { } + +--- +apiVersion: core.oam.dev/v1beta1 +kind: Application +metadata: + annotations: + addons.oam.dev/description: "An out of the box solution for KubeVela observability" + name: grafana + namespace: observability +spec: + components: + # install grafana datasource registration chart + - name: grafana-registration-release + type: helm + properties: + repoType: git + url: https://github.com/oam-dev/grafana-registration + git: + branch: master + chart: ./chart + targetNamespace: observability + values: + replicaCount: 1 + + # install Grafana + - name: grafana + properties: + chart: grafana + version: 6.14.1 + repoType: helm + # original url: https://grafana.github.io/helm-charts + url: https://charts.kubevela.net/addons + targetNamespace: observability + releaseName: grafana + type: helm + traits: + - type: pure-ingress + properties: + domain: grafana.c58136db32cbc44cca364bf1cf7f90519.cn-hongkong.alicontainer.com + http: + "/": 80 + - type: import-grafana-dashboard + properties: + grafanaServiceName: grafana + grafanaServiceNamespace: observability + credentialSecret: grafana + credentialSecretNamespace: observability + urls: + - "https://charts.kubevela.net/addons/dashboards/kubevela_core_logging.json" + - "https://charts.kubevela.net/addons/dashboards/kubevela_core_monitoring.json" + - "https://charts.kubevela.net/addons/dashboards/flux2/cluster.json" + - "https://charts.kubevela.net/addons/dashboards/kubevela_application_logging.json" + + # install loki + - name: loki + type: helm + properties: + chart: loki-stack + version: 2.4.1 + repoType: helm + # original url: https://grafana.github.io/helm-charts + url: https://charts.kubevela.net/addons + targetNamespace: observability + releaseName: loki + traits: + - type: register-grafana-datasource # register loki datasource to Grafana + properties: + grafanaServiceName: grafana + grafanaServiceNamespace: observability + credentialSecret: grafana + credentialSecretNamespace: observability + name: loki + service: loki + namespace: observability + type: loki + access: proxy + + # install Prometheus + - name: prometheus-server + type: helm + properties: + chart: prometheus + version: 14.4.1 + repoType: helm + # original url: https://prometheus-community.github.io/helm-charts + url: https://charts.kubevela.net/addons + targetNamespace: observability + releaseName: prometheus + values: + alertmanager: + persistentVolume: + storageClass: "alicloud-disk-available" + size: "20Gi" + server: + persistentVolume: + storageClass: "alicloud-disk-available" + size: "20Gi" + + traits: + - type: register-grafana-datasource # register Prometheus datasource to Grafana + properties: + grafanaServiceName: grafana + grafanaServiceNamespace: observability + credentialSecret: grafana + credentialSecretNamespace: observability + name: prometheus + service: prometheus-server + namespace: observability + type: prometheus + access: proxy + + # install kube-state-metrics + - name: kube-state-metrics + type: helm + properties: + chart: kube-state-metrics + version: 3.4.1 + repoType: helm + # original url: https://prometheus-community.github.io/helm-charts + url: https://charts.kubevela.net/addons + targetNamespace: observability + values: + image: + repository: oamdev/kube-state-metrics + tag: v2.1.0 diff --git a/docs/examples/obervability/definitions/trait-import-grafana-dashboard.yaml b/docs/examples/obervability/definitions/trait-import-grafana-dashboard.yaml new file mode 100644 index 000000000..8a79a7219 --- /dev/null +++ b/docs/examples/obervability/definitions/trait-import-grafana-dashboard.yaml @@ -0,0 +1,31 @@ +apiVersion: core.oam.dev/v1beta1 +kind: TraitDefinition +metadata: + annotations: + definition.oam.dev/description: "Import dashboards to Grafana" + name: import-grafana-dashboard + namespace: vela-system +spec: + schematic: + cue: + template: | + outputs: registerdatasource: { + apiVersion: "grafana.extension.oam.dev/v1alpha1" + kind: "ImportDashboard" + spec: { + grafana: { + service: parameter.grafanaServiceName + namespace: parameter.grafanaServiceNamespace + credentialSecret: parameter.credentialSecret + credentialSecretNamespace: parameter.credentialSecretNamespace + } + urls: parameter.urls + } + } + parameter: { + grafanaServiceName: string + grafanaServiceNamespace: *"default" | string + credentialSecret: string + credentialSecretNamespace: *"default" | string + urls: [...string] + } \ No newline at end of file diff --git a/docs/examples/obervability/definitions/trait-pure-ingress.yaml b/docs/examples/obervability/definitions/trait-pure-ingress.yaml new file mode 100644 index 000000000..9fa412b91 --- /dev/null +++ b/docs/examples/obervability/definitions/trait-pure-ingress.yaml @@ -0,0 +1,58 @@ +apiVersion: core.oam.dev/v1beta1 +kind: TraitDefinition +metadata: + annotations: + definition.oam.dev/description: "Enable public web traffic for the component without creating a Service." + name: pure-ingress + namespace: vela-system +spec: + status: + customStatus: |- + let igs = context.outputs.ingress.status.loadBalancer.ingress + if igs == _|_ { + message: "No loadBalancer found, visiting by using 'vela port-forward " + context.appName + " --route'\n" + } + if len(igs) > 0 { + if igs[0].ip != _|_ { + message: "Visiting URL: " + context.outputs.ingress.spec.rules[0].host + ", IP: " + igs[0].ip + } + if igs[0].ip == _|_ { + message: "Visiting URL: " + context.outputs.ingress.spec.rules[0].host + } + } + healthPolicy: | + isHealth: len(context.outputs.ingress.status.loadBalancer.ingress) > 0 + schematic: + cue: + template: | + + outputs: ingress: { + apiVersion: "networking.k8s.io/v1beta1" + kind: "Ingress" + metadata: + name: context.name + spec: { + rules: [{ + host: parameter.domain + http: { + paths: [ + for k, v in parameter.http { + path: k + backend: { + serviceName: context.name + servicePort: v + } + }, + ] + } + }] + } + } + + parameter: { + // +usage=Specify the domain you want to expose + domain: string + + // +usage=Specify the mapping relationship between the http path and the workload port + http: [string]: int + } diff --git a/docs/examples/obervability/definitions/trait-register-grafana-datasource.yaml b/docs/examples/obervability/definitions/trait-register-grafana-datasource.yaml new file mode 100644 index 000000000..486ed431d --- /dev/null +++ b/docs/examples/obervability/definitions/trait-register-grafana-datasource.yaml @@ -0,0 +1,42 @@ +apiVersion: core.oam.dev/v1beta1 +kind: TraitDefinition +metadata: + annotations: + definition.oam.dev/description: "Add a datasource to Grafana" + name: register-grafana-datasource + namespace: vela-system +spec: + schematic: + cue: + template: | + outputs: registerdatasource: { + apiVersion: "grafana.extension.oam.dev/v1alpha1" + kind: "DatasourceRegistration" + spec: { + grafana: { + service: parameter.grafanaServiceName + namespace: parameter.grafanaServiceNamespace + credentialSecret: parameter.credentialSecret + credentialSecretNamespace: parameter.credentialSecretNamespace + } + datasource: { + name: parameter.name + type: parameter.type + access: parameter.access + service: parameter.service + namespace: parameter.namespace + } + } + } + + parameter: { + grafanaServiceName: string + grafanaServiceNamespace: *"default" | string + credentialSecret: string + credentialSecretNamespace: string + name: string + type: string + access: *"proxy" | string + service: string + namespace: *"default" | string + } diff --git a/docs/examples/obervability/initializer-observability.yaml b/docs/examples/obervability/initializer-observability.yaml deleted file mode 100644 index abd18a849..000000000 --- a/docs/examples/obervability/initializer-observability.yaml +++ /dev/null @@ -1,159 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: observability -spec: { } - ---- -apiVersion: core.oam.dev/v1beta1 -kind: Initializer -metadata: - name: grafana - namespace: observability -spec: - appTemplate: - spec: - components: - # install grafana datasource registration chart - - name: grafana-registration-release - properties: - apiVersion: helm.toolkit.fluxcd.io/v2beta1 - kind: HelmRelease - metadata: - name: grafana-registration-release - namespace: observability - spec: - chart: - spec: - chart: ./chart - interval: 1m - sourceRef: - kind: GitRepository - name: grafana-registration-repo - namespace: observability - interval: 5m - values: - replicaCount: 1 - type: raw - - name: grafana-registration-repo - properties: - apiVersion: source.toolkit.fluxcd.io/v1beta1 - kind: GitRepository - metadata: - name: grafana-registration-repo - namespace: observability - spec: - interval: 5m - ref: - branch: master - url: https://github.com/oam-dev/grafana-registration - type: raw - - # install Grafana - - name: grafana - properties: - chart: grafana - version: 6.14.1 - repoType: helm - # original url: https://grafana.github.io/helm-charts - url: https://charts.kubevela.net/addons - targetNamespace: observability - releaseName: grafana - type: helm - traits: - - type: pure-ingress - properties: - domain: grafana.cf7223b8abedc4691b7eccfe3c675850a.cn-hongkong.alicontainer.com - http: - "/": 80 - - type: import-grafana-dashboard - properties: - grafanaServiceName: grafana - grafanaServiceNamespace: observability - credentialSecret: grafana - credentialSecretNamespace: observability - urls: - - "https://charts.kubevela.net/addons/dashboards/kubevela_core_logging.json" - - "https://charts.kubevela.net/addons/dashboards/kubevela_core_monitoring.json" - - "https://charts.kubevela.net/addons/dashboards/flux2/cluster.json" - - "https://charts.kubevela.net/addons/dashboards/kubevela_application_logging.json" - - # install loki - - name: loki - type: helm - properties: - chart: loki-stack - version: 2.4.1 - repoType: helm - # original url: https://grafana.github.io/helm-charts - url: https://charts.kubevela.net/addons - targetNamespace: observability - releaseName: loki - traits: - - type: register-grafana-datasource # register loki datasource to Grafana - properties: - grafanaServiceName: grafana - grafanaServiceNamespace: observability - credentialSecret: grafana - credentialSecretNamespace: observability - name: loki - service: loki - namespace: observability - type: loki - access: proxy - - # install Prometheus - - name: prometheus-server - type: helm - properties: - chart: prometheus - version: 14.4.1 - repoType: helm - # original url: https://prometheus-community.github.io/helm-charts - url: https://charts.kubevela.net/addons - targetNamespace: observability - releaseName: prometheus - values: - alertmanager: - persistentVolume: - storageClass: "alicloud-disk-available" - size: "20Gi" - server: - persistentVolume: - storageClass: "alicloud-disk-available" - size: "20Gi" - - traits: - - type: register-grafana-datasource # register Prometheus datasource to Grafana - properties: - grafanaServiceName: grafana - grafanaServiceNamespace: observability - credentialSecret: grafana - credentialSecretNamespace: observability - name: prometheus - service: prometheus-server - namespace: observability - type: prometheus - access: proxy - - # install kube-state-metrics - - name: kube-state-metrics - type: helm - properties: - chart: kube-state-metrics - version: 3.4.1 - repoType: helm - # original url: https://prometheus-community.github.io/helm-charts - url: https://charts.kubevela.net/addons - targetNamespace: observability - values: - image: - repository: oamdev/kube-state-metrics - tag: v2.1.0 - - dependsOn: - - ref: - apiVersion: core.oam.dev/v1beta1 - kind: Initializer - name: fluxcd - namespace: vela-system