diff --git a/Makefile b/Makefile index ec6c242ef..02f8465fd 100644 --- a/Makefile +++ b/Makefile @@ -18,13 +18,6 @@ IMG_REPO ?= tempo-operator IMG ?= ${IMG_PREFIX}/${IMG_REPO}:v${OPERATOR_VERSION} BUNDLE_IMG ?= ${IMG_PREFIX}/${IMG_REPO}-bundle:v${OPERATOR_VERSION} - -# Website generation variables -WEBSITE_DIR ?= website -WEBSITE_BASE_URL ?= https://tempo-operator.netlify.app -HUGO_VERSION = v0.80.0 - - # When the VERBOSE variable is set to 1, all the commands are shown ifeq ("$(VERBOSE)","true") echo_prefix=">>>>" @@ -201,7 +194,6 @@ GEN_CRD = $(LOCALBIN)/gen-crd-api-reference-docs-$(GEN_CRD_VERSION) OPERATOR_SDK ?= $(LOCALBIN)/operator-sdk-$(OPERATOR_SDK_VERSION) KIND ?= $(LOCALBIN)/kind KUTTL ?= $(LOCALBIN)/kubectl-kuttl -HUGO ?= $(LOCALBIN)/hugo-$(HUGO_VERSION) # Options for KIND version to use export KUBE_VERSION ?= 1.27 @@ -458,26 +450,6 @@ docs/operator/feature-gates.md: $(FEATURE_GATES_TARGET) gen-crd-api-reference-do sed -i 's/##/\n##/' $@ sed -i 's/+newline/\n/' $@ -.PHONY: web-pre -web-pre: docs/operator/api.md docs/operator/feature-gates.md - @echo ">> preprocessing docs for website" - @git submodule update --init --recursive - cp CONTRIBUTING.md docs/prologue/contributing.md - sed -i 's/(LICENSE)/(https:\/\/raw.githubusercontent.com\/grafana\/tempo-operator\/main\/LICENSE)/' docs/prologue/contributing.md - sed -i 's/(README.md)/(https:\/\/github.com\/grafana\/tempo-operator#readme)/' docs/prologue/contributing.md - cd $(WEBSITE_DIR)/themes/doks/ && npm install && rm -rf content - -.PHONY: web -web: web-pre hugo ## Run production build of the tempo-operator.dev website - cd $(WEBSITE_DIR) && $(HUGO) -b $(WEBSITE_BASE_URL) - -.PHONY: web-serve -web-serve: web-pre ## Run local preview version of the tempo-operator.dev website - @cd $(WEBSITE_DIR) && $(HUGO) serve - -hugo: - test -s $(HUGO) || $(call go-get-tool,$(HUGO),--tags extended github.com/gohugoio/hugo,$(HUGO_VERSION)) - ##@ Release CHLOGGEN_VERSION=v0.3.0 CHLOGGEN ?= $(LOCALBIN)/chloggen-$(CHLOGGEN_VERSION) diff --git a/README.md b/README.md index eb0caa78b..2460d6804 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ This is a Kubernetes operator for [Grafana Tempo](https://github.com/grafana/tem ## Documentation -* [Operator documentation](https://tempo-operator.netlify.app) +* [Operator documentation](https://grafana.com/docs/tempo/next/setup/operator/) * [Tempo CRD design](https://docs.google.com/document/d/1avSSf__R226l2b3hbcpXlYH7w6iKtXZsd9VTcpxDqng/edit) diff --git a/docs/_index.md b/docs/_index.md deleted file mode 100644 index 59f478eca..000000000 --- a/docs/_index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title : "Tempo-Operator Docs" -description: "Documentation for the Tempo-Operator." -lead: "" -date: 2021-04-30T10:40:00+00:00 -lastmod: 2021-04-30T10:40:00+00:00 -draft: false -images: [] ---- - -# Tempo-Operator - -A Kubernetes Operator for Tempo provided by the Grafana Tempo SIG operator. diff --git a/docs/operator/compatibility.md b/docs/operator/compatibility.md deleted file mode 100644 index 34d4c4555..000000000 --- a/docs/operator/compatibility.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Compatibility" -description: "The Tempo Operator supports a number of Kubernetes and Tempo releases." -lead: "" -date: 2022-06-21T08:48:45+00:00 -lastmod: 2022-06-21T08:48:45+00:00 -draft: false -images: [] -menu: - docs: - parent: "operator" -weight: 100 -toc: true ---- - -The Tempo Operator supports a number of Kubernetes and Tempo releases. - -## Kubernetes - -The Tempo Operator uses client-go to communicate with Kubernetes clusters. The supported Kubernetes cluster version is determined by client-go. The compatibility matrix for client-go and Kubernetes clusters can be found [here](https://github.com/kubernetes/client-go#compatibility-matrix). All additional compatibility is only best effort, or happens to still/already be supported. The currently used client-go version is "v0.25.0". - -This operator was tested on Kubernetes >= v1.21.0, so at least that version is required. - - -## Tempo - -The versions of Tempo compatible to be run with the Tempo Operator are: - -* v2.0.1 diff --git a/docs/prologue/_index.md b/docs/prologue/_index.md deleted file mode 100644 index 930231f89..000000000 --- a/docs/prologue/_index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title : "Prologue" -description: "Prologue for the Tempo Operator." -lead: "" -date: 2022-06-21T08:48:45+00:00 -lastmod: 2022-06-21T08:48:45+00:00 -draft: false -images: [] ---- diff --git a/docs/prologue/introduction.md b/docs/prologue/introduction.md deleted file mode 100644 index 8fde338c1..000000000 --- a/docs/prologue/introduction.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "Introduction" -description: "The Tempo Operator provides Kubernetes native deployment and management of Tenoi and related tracing components" -lead: "" -date: 2022-06-21T08:48:45+00:00 -lastmod: 2022-06-21T08:48:45+00:00 -draft: false -images: [] -menu: - docs: - parent: "prologue" -weight: 100 -toc: true ---- - -The Tempo Operator provides [Kubernetes](https://kubernetes.io/) native deployment and management of [Tempo](https://github.com/grafana/tempo) and related tracing components. -The purpose of this project is to simplify and automate the configuration of a Tempo based tracing stack for Kubernetes clusters. - -The Tempo operator includes, but is not limited to, the following features: - -* Kubernetes Custom Resources: Use Kubernetes custom resources to deploy and manage Tempo, and related components. -* Simplified Deployment Configuration: Configure the fundamentals of Tempo like tenants, limits, replication factor and storage from a native Kubernetes resource. - -## Get started - -### Quick Start - -One page summary of how to start with the Tempo Operator. [Quick Start →]({{< ref "quickstart" >}}) diff --git a/docs/prologue/quickstart.md b/docs/prologue/quickstart.md deleted file mode 100644 index d2f1cf075..000000000 --- a/docs/prologue/quickstart.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Quick Start -description: Quick Start -lead: "" -lastmod: "2021-03-08T08:48:57+00:00" -draft: false -images: [] -menu: - docs: - parent: prologue -weight: 200 -toc: true ---- - -One page summary on how to start with Tempo Operator and TempoStack. - -## Requirements - -The easiest way to start with the Tempo Operator is to use Kubernetes [kind](sigs.k8s.io/kind). - -## Deploy - -To install the operator in an existing cluster, make sure you have [`cert-manager` installed](https://cert-manager.io/docs/installation/) and run: - -```shell -kubectl apply -f https://github.com/grafana/tempo-operator/releases/latest/download/tempo-operator.yaml -``` - -Once you have the operator deployed you need to install a storage backend. For this quick start guide we will install [`minio`](https://min.io/) as follows: - -```shell -kubectl apply -f https://raw.githubusercontent.com/grafana/tempo-operator/main/minio.yaml -``` - -After minio was deployed, create a secret for minio in the namespace you are using: - -```yaml -kubectl apply -f - <" \ - --from-literal=endpoint="" \ - --from-literal=access_key_id="" \ - --from-literal=access_key_secret="" - ``` - - where `tempostack-dev-s3` is the secret name. - -* Create an instance of TempoStack by referencing the secret name and type as `s3`: - - ```yaml - spec: - storage: - secret: - name: tempostack-dev-s3 - type: s3 - ``` - -## Azure - -### Requirements - -* Create a [bucket](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) on Azure. - -### Installation - -* Deploy the Tempo Operator to your cluster. - -* Create an Object Storage secret with keys as follows: - - ```console - kubectl create secret generic tempostack-dev-azure \ - --from-literal=container="" \ - --from-literal=account_name="" \ - --from-literal=account_key="" - ``` - - where `tempostack-dev-azure` is the secret name. - -* Create an instance of TempoStack by referencing the secret name and type as `azure`: - - ```yaml - spec: - storage: - secret: - name: tempostack-dev-azure - type: azure - ``` - -## Google Cloud Storage - -### Requirements - -* Create a [project](https://cloud.google.com/resource-manager/docs/creating-managing-projects) on Google Cloud Platform. -* Create a [bucket](https://cloud.google.com/storage/docs/creating-buckets) under same project. -* Create a [service account](https://cloud.google.com/docs/authentication/getting-started#creating_a_service_account) under same project for GCP authentication. - -### Installation - -* Deploy the Tempo Operator to your cluster. - -* Copy the service account credentials received from GCP into a file name `key.json`. - -* Create an Object Storage secret with keys `bucketname` and `key.json` as follows: - - ```console - kubectl create secret generic tempostack-dev-gcs \ - --from-literal=bucketname="" \ - --from-file=key.json="" - ``` - - where `tempostack-dev-gcs` is the secret name, `` is the name of bucket created in requirements step and `` is the file path where the `key.json` was copied to. - -* Create an instance of TempoStack by referencing the secret name and type as `gcs`: - - ```yaml - spec: - storage: - secret: - name: tempostack-dev-gcs - type: gcs - ``` - -## Minio - -### Requirements - -* Deploy Minio on your Cluster, e.g. using the [Minio Operator](https://operator.min.io/) - -* Create a [bucket](https://docs.min.io/docs/minio-client-complete-guide.html) on Minio via CLI. - -### Installation - -* Deploy the Tempo Operator to your cluster. - -* Create an Object Storage secret with keys as follows: - - ```console - kubectl create secret generic tempostack-dev-minio \ - --from-literal=bucket="" \ - --from-literal=endpoint="" \ - --from-literal=access_key_id="" \ - --from-literal=access_key_secret="" - ``` - - where `tempostack-dev-minio` is the secret name. - -* Create an instance of TempoStack by referencing the secret name and type as `s3`: - - ```yaml - spec: - storage: - secret: - name: tempostack-dev-minio - type: s3 - ``` - -## OpenShift Data Foundation - -### Requirements - -* Deploy the [OpenShift Data Foundation](https://access.redhat.com/documentation/en-us/red_hat_openshift_data_foundation/4.10) on your cluster. - -* Create a bucket via an ObjectBucketClaim. - - -### Installation - -* Deploy the Tempo Operator to your cluster. - -* Create an Object Storage secret with keys as follows: - - ```console - kubectl create secret generic tempostack-dev-odf \ - --from-literal=bucket="" \ - --from-literal=endpoint="https://s3.openshift-storage.svc" \ - --from-literal=access_key_id="" \ - --from-literal=access_key_secret="" - ``` - - where `tempostack-dev-odf` is the secret name. You can copy the values for `BUCKET_NAME`, `ACCESS_KEY_ID` and `ACCESS_KEY_SECRET` from your ObjectBucketClaim's accompanied secret. - -* Create an instance of TempoStack by referencing the secret name and type as `s3`: - - ```yaml - spec: - storage: - secret: - name: tempostack-dev-odf - type: s3 - ``` \ No newline at end of file diff --git a/docs/tempostack/observability_tracing.md b/docs/tempostack/observability_tracing.md deleted file mode 100644 index 293c30a27..000000000 --- a/docs/tempostack/observability_tracing.md +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: "Observability Tracing" -description: "Configure tracing of Operands." -lead: "" -date: 2023-03-26T08:48:45+00:00 -lastmod: 2023-03-26T08:48:45+00:00 -draft: false -images: [] -menu: - docs: - parent: "tempostack" -weight: 100 -toc: true ---- - -All tempo components as well as the tempo gateway ([observatorium-api](https://github.com/observatorium/api)) support the export of traces in `thrift_compact` format. - - -## Configure tracing of Operands - -### Requirements - -* A [OpenTelemetry Operator](https://opentelemetry.io/docs/k8s-operator/#getting-started) installation. -* *Optional:* Another tracing backend would be ideal - If none exists, a Jaeger instance can be created. - -### Installation - -* Deploy the Tempo Operator to your cluster. - -* Create an `OpenTelemetryCollector` Object that points to your desired trace destination. The following example exports the traces received from the operands to a service (`jaeger-collector`) via otlp installed the same namespace. - -```yaml -apiVersion: opentelemetry.io/v1alpha1 -kind: OpenTelemetryCollector -metadata: - name: sidecar-for-tempo -spec: - mode: sidecar - config: | - receivers: - jaeger: - protocols: - thrift_compact: - - exporters: - otlp: - endpoint: jaeger-collector:4317 - tls: - insecure: true - - service: - pipelines: - traces: - receivers: [jaeger] - exporters: [otlp] -``` - -* *Optional:* If no trace destination is available, a Jaeger all-in-one instance can be created as follows: - -```yaml -apiVersion: v1 -kind: List -items: - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: jaeger - labels: - app: jaeger - app.kubernetes.io/name: jaeger - app.kubernetes.io/component: all-in-one - spec: - replicas: 1 - selector: - matchLabels: - app: jaeger - strategy: - type: Recreate - template: - metadata: - labels: - app: jaeger - app.kubernetes.io/name: jaeger - app.kubernetes.io/component: all-in-one - annotations: - prometheus.io/scrape: "true" - prometheus.io/port: "16686" - spec: - containers: - - env: - - name: COLLECTOR_OTLP_ENABLED - value: "true" - - name: JAEGER_SERVICE_NAME - value: "self" - image: jaegertracing/all-in-one:1.42.0 - name: jaeger - ports: - - containerPort: 16686 - protocol: TCP - - containerPort: 4317 - protocol: TCP - - containerPort: 4318 - protocol: TCP - - apiVersion: v1 - kind: Service - metadata: - name: jaeger-query - labels: - app: jaeger - app.kubernetes.io/name: jaeger - app.kubernetes.io/component: query - spec: - ports: - - name: query-http - port: 80 - protocol: TCP - targetPort: 16686 - selector: - app.kubernetes.io/name: jaeger - app.kubernetes.io/component: all-in-one - type: ClusterIP - - apiVersion: v1 - kind: Service - metadata: - name: jaeger-collector - labels: - app: jaeger - app.kubernetes.io/name: jaeger - app.kubernetes.io/component: collector - spec: - ports: - - name: grpc-otlp - port: 4317 - protocol: TCP - targetPort: 4317 - - name: http-otlp - port: 4318 - protocol: TCP - targetPort: 4318 - selector: - app.kubernetes.io/name: jaeger - app.kubernetes.io/component: all-in-one - type: ClusterIP -``` - - -### Configuration - -Finally, we create a tempostack instance. As `jaeger_agent_endpoint` we choose `localhost`. The OpenTelemetry Operator injects a sidecar into the pod of all operands, which is then listining on localhost. - -```yaml -apiVersion: tempo.grafana.com/v1alpha1 -kind: TempoStack -metadata: - name: simple-stack -spec: - template: - queryFrontend: - jaegerQuery: - enabled: - storage: - secret: - type: s3 - name: minio-test - storageSize: 200M - observability: - tracing: - sampling_fraction: "1.0" - jaeger_agent_endpoint: localhost:6831 -```