Toolkit for cloud-native application lifecycle management

  • By Keptn
  • Last update: Jan 2, 2023
  • Comments: 17

Keptn Lifecycle Toolkit

build Codecov goversion version status GitHub Discussions

The goal of this toolkit is to introduce a more “cloud-native” approach for pre- and post-deployment, as well as the concept of application health checks. It is an incubating project, under the umbrella of the Keptn Application Lifecycle working group.

Watch the KubeCon 2022 Detroit Demo

Click to watch it on YouTube:

Keptn Lifecycle Toolkit in a Nutshell

Deploy the latest release

Known Limitations

  • Kubernetes >=1.24 is needed to deploy the Lifecycle Toolkit
  • The Lifecycle Toolkit is currently not compatible with vcluster

Installation

The Lifecycle Toolkit includes a Mutating Webhook which requires TLS certificates to be mounted as a volume in its pod. The certificate creation is handled automatically by cert-manager. To install cert-manager, execute the following command:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml

When cert-manager is installed, you can run

kubectl apply -f https://github.com/keptn/lifecycle-toolkit/releases/download/v0.4.0/manifest.yaml

to install the latest release of the Lifecycle Toolkit.

The Lifecycle Toolkit uses the OpenTelemetry collector to provide a vendor-agnostic implementation of how to receive, process and export telemetry data. To install it, follow their installation instructions. We also provide some more information about this in our observability example.

Goals

The Keptn Lifecycle Toolkit aims to support Cloud Native teams with:

  • Pre-requisite evaluation before deploying workloads and applications
  • Finding out when an application (not workload) is ready and working
  • Checking the Application Health in a declarative (cloud-native) way
  • Standardized way for pre- and post-deployment tasks
  • Provide out-of-the-box Observability of the deployment cycle

The Keptn Lifecycle Toolkit could be seen as a general purpose and declarative Level 3 operator for your Application. For this reason, the Keptn Lifecycle Toolkit is agnostic to deployment tools that are used and works with any GitOps solution.

How to use

The Keptn Lifecycle Toolkit monitors manifests that have been applied against the Kubernetes API and reacts if it finds a workload with special annotations/labels. For this, you should annotate your Workload with (at least) the following annotations:

keptn.sh/app: myAwesomeAppName
keptn.sh/workload: myAwesomeWorkload
keptn.sh/version: myAwesomeWorkloadVersion

Alternatively, you can use Kubernetes Recommended Labels to annotate your workload:

app.kubernetes.io/part-of: myAwesomeAppName
app.kubernetes.io/name: myAwesomeWorkload
app.kubernetes.io/version: myAwesomeWorkloadVersion

In general, the Keptn Annotations/Labels take precedence over the Kubernetes recommended labels. If there is no version annotation/label and there is only one container in the pod, the Lifecycle Toolkit will take the image tag as version (if it is not "latest").

In case you want to run pre- and post-deployment checks, further annotations are necessary:

keptn.sh/pre-deployment-tasks: verify-infrastructure-problems
keptn.sh/post-deployment-tasks: slack-notification,performance-test

The value of these annotations are Keptn CRDs called KeptnTaskDefinitions. These CRDs contains re-usable "functions" that can executed before and after the deployment. In this example, before the deployment starts, a check for open problems in your infrastructure is performed. If everything is fine, the deployment continues and afterward, a slack notification is sent with the result of the deployment and a pipeline to run performance tests is invoked. Otherwise, the deployment is kept in a pending state until the infrastructure is capable to accept deployments again.

A more comprehensive example can be found in our examples folder where we use Podtato-Head to run some simple pre-deployment checks.

To run the example, use the following commands:

cd ./examples/podtatohead-deployment/
kubectl apply -f .

Afterward, you can monitor the status of the deployment using

kubectl get keptnworkloadinstance -n podtato-kubectl -w

The deployment for a Workload will stay in a Pending state until the respective pre-deployment check is completed. Afterward, the deployment will start and when it is Succeeded, the post-deployment checks will start.

Architecture

The Keptn Lifecycle Toolkit is composed of the following components:

  • Keptn Lifecycle Operator
  • Keptn Scheduler

The Keptn Lifecycle Operator contains several controllers for Keptn CRDs and a Mutating Webhook. The Keptn Scheduler ensures that Pods are started only after the pre-deployment checks have finished.

A Kubernetes Manifest, which is annotated with Keptn specific annotations, gets applied to the Kubernetes Cluster. Afterward, the Keptn Scheduler gets injected (via Mutating Webhook), and Kubernetes Events for Pre-Deployment are sent to the event stream. The Event Controller watches for events and triggers a Kubernetes Job to fullfil the Pre-Deployment. After the Pre-Deployment has finished, the Keptn Scheduler schedules the Pod to be deployed. The KeptnApp and KeptnWorkload Controllers watch for the workload resources to finish and then generate a Post-Deployment Event. After the Post-Deployment checks, SLOs can be validated using an interface for retrieving SLI data from a provider, e.g, Prometheus. Finally, Keptn Lifecycle Toolkit exposes Metrics and Traces of the whole Deployment cycle with OpenTelemetry.

How it works

The following sections will provide insights on each component of the Keptn Lifecycle Toolkit in terms of their purpose, responsibility, and communication with other components. Furthermore, there will be a description on what CRD they monitor and a general overview of their fields.

Webhook

Annotating a namespace subjects it to the effects of the mutating webhook:

apiVersion: v1
kind: Namespace
metadata:
  name: podtato-kubectl
  annotations:
    keptn.sh/lifecycle-toolkit: "enabled"  # this lines tells the webhook to handle the namespace

However, the mutating webhook will modify only resources in the annotated namespace that have Keptn annotations. When the webhook receives a request for a new pod, it will look for the workload annotations:

keptn.sh/workload

The mutation consists in changing the scheduler used for the deployment with the Keptn Scheduler. Webhook then creates a workload and app resource per annotated resource. You can also specify a custom app definition with the annotation:

keptn.sh/app

In this case the webhook will not generate an app, but it will expect that the user will provide one. The webhook should be as fast as possible and should not create/change any resource. Additionally, it will compute a version string, using a hash function that takes certain properties of the pod as parameters (e.g. the images of its containers). Next, it will look for an existing instance of a Workload CRD for the given workload name:

  • If it finds the Workload, it will update its version according to the previously computed version string. In addition, it will include a reference to the ReplicaSet UID of the pod (i.e. the Pods owner), or the pod itself, if it does not have an owner.
  • If it does not find a workload instance, it will create one containing the previously computed version string. In addition, it will include a reference to the ReplicaSet UID of the pod (i.e. the Pods owner), or the pod itself, if it does not have an owner.

It will use the following annotations for the specification of the pre/post deployment checks that should be executed for the Workload:

  • keptn.sh/pre-deployment-tasks: task1,task2
  • keptn.sh/post-deployment-tasks: task1,task2

and for the Evaluations:

  • keptn.sh/pre-deployment-evaluations: my-evaluation-definition
  • keptn.sh/post-deployment-evaluations: my-eval-definition

After either one of those actions has been taken, the webhook will set the scheduler of the pod and allow the pod to be scheduled.

Scheduler

After the Webhook mutation, the Keptn-Scheduler will handle the annotated resources. The scheduling flow follows the default scheduler behavior, since it implements a scheduler plugin based on the scheduling framework. For each pod, at the very end of the scheduling cycle, the plugin verifies whether the pre deployment checks have terminated, by retrieving the current status of the WorkloadInstance. Only if that is successful, the pod is bound to a node.

Keptn App

An App contains information about all workloads and checks associated with an application. It will use the following structure for the specification of the pre/post deployment and pre/post evaluations checks that should be executed at app level:

apiVersion: lifecycle.keptn.sh/v1alpha1
kind: KeptnApp
metadata:
name: podtato-head
namespace: podtato-kubectl
spec:
version: "1.3"
workloads:
- name: podtato-head-left-arm
version: 0.1.0
- name: podtato-head-left-leg
postDeploymentTasks:
- post-deployment-hello
preDeploymentEvaluations:    
- my-prometheus-definition

While changes in the workload version will affect only workload checks, a change in the app version will also cause a new execution of app level checks.

Keptn Workload

A Workload contains information about which tasks should be performed during the preDeployment as well as the postDeployment phase of a deployment. In its state it keeps track of the currently active Workload Instances, which are responsible for doing those checks for a particular instance of a Deployment/StatefulSet/ReplicaSet (e.g. a Deployment of a certain version).

Keptn Workload Instance

A Workload Instance is responsible for executing the pre- and post deployment checks of a workload. In its state, it keeps track of the current status of all checks, as well as the overall state of the Pre Deployment phase, which can be used by the scheduler to tell that a pod can be allowed to be placed on a node. Workload Instances have a reference to the respective Deployment/StatefulSet/ReplicaSet, to check if it has reached the desired state. If it detects that the referenced object has reached its desired state (e.g. all pods of a deployment are up and running), it will be able to tell that a PostDeploymentCheck can be triggered.

Keptn Task Definition

A KeptnTaskDefinition is a CRD used to define tasks that can be run by the Keptn Lifecycle Toolkit as part of pre- and post-deployment phases of a deployment. The task definition is a Deno script Please, refer to the function runtime folder for more information about the runtime. In the future, we also intend to support other runtimes, especially running a container image directly.

A task definition can be configured in three different ways:

  • inline
  • referring to an HTTP script
  • referring to another KeptnTaskDefinition

An inline task definition looks like the following:

apiVersion: lifecycle.keptn.sh/v1alpha1
kind: KeptnTaskDefinition
metadata:
  name: deployment-hello
spec:
  function:
    inline:
      code: |
        console.log("Deployment Task has been executed");

In the code section, it is possible to define a full-fletched Deno script. A further example, is available here.

To runtime can also fetch the script on the fly from a remote webserver. For this, the CRD should look like the following:

apiVersion: lifecycle.keptn.sh/v1alpha1
kind: KeptnTaskDefinition
metadata:
  name: hello-keptn-http
spec:
  function:
    httpRef:
      url: <url>

An example is available here.

Finally, KeptnTaskDefinition can build on top of other KeptnTaskDefinitions. This is a common use case where a general function can be re-used in multiple places with different parameters.

apiVersion: lifecycle.keptn.sh/v1alpha1
kind: KeptnTaskDefinition
metadata:
  name: slack-notification-dev
spec:
  function:
    functionRef:
      name: slack-notification
    parameters:
      map:
        textMessage: "This is my configuration"
    secureParameters:
      secret: slack-token

As you might have noticed, Task Definitions also have the possibility to use input parameters. The Lifecycle Toolkit passes the values defined inside the map field as a JSON object. At the moment, multi-level maps are not supported. The JSON object can be read through the environment variable DATA using Deno.env.get("DATA");. K8s secrets can also be passed to the function using the secureParameters field. Here, the secret value is the K8s secret name that will be mounted into the runtime and made available to the function via the environment variable SECURE_DATA.

Keptn Task

A Task is responsible for executing the TaskDefinition of a workload. The execution is done spawning a K8s Job to handle a single Task. In its state, it keeps track of the current status of the K8s Job created.

Keptn Evaluation Definition

A KeptnEvaluationDefinition is a CRD used to define evaluation tasks that can be run by the Keptn Lifecycle Toolkit as part of pre- and post-analysis phases of a workload or application.

A Keptn evaluation definition looks like the following:

apiVersion: lifecycle.keptn.sh/v1alpha1
kind: KeptnEvaluationDefinition
metadata:
  name: my-prometheus-evaluation
spec:
  source: prometheus
  objectives:
    - name: query-1
      query: "xxxx"
      evaluationTarget: <20
    - name: query-2
      query: "yyyy"
      evaluationTarget: >4

Keptn Evaluation Provider

A KeptnEvaluationProvider is a CRD used to define evaluation provider, which will provide data for the pre- and post-analysis phases of a workload or application.

A Keptn evaluation provider looks like the following:

apiVersion: lifecycle.keptn.sh/v1alpha1
kind: KeptnEvaluationProvider
metadata:
  name: prometheus
spec:
  targetServer: "http://prometheus-k8s.monitoring.svc.cluster.local:9090"
  secretName: prometheusLoginCredentials

Install a dev build

The GitHub CLI can be used to download the manifests of the latest CI build.

gh run list --repo keptn/lifecycle-toolkit # find the id of a run
gh run download 3152895000 --repo keptn/lifecycle-toolkit # download the artifacts
kubectl apply -f ./keptn-lifecycle-operator-manifest/release.yaml # install the operator
kubectl apply -f ./scheduler-manifest/release.yaml # install the scheduler

Instead, if you want to build and deploy the operator into your cluster directly from the code, you can type:

RELEASE_REGISTRY=<YOUR_DOCKER_REGISTRY>
# (optional)ARCH=<amd64(default)|arm64v8>
# (optional)TAG=<YOUR_PREFERRED_TAG (defaulting to current time)>

# Build and deploy the dev images to the current kubernetes cluster
make build-deploy-dev-environment

License

Please find more information in the LICENSE file.

Thanks to all the people who have contributed 💜

Made with contrib.rocks.

Download

lifecycle-toolkit.zip

Comments(17)

  • 1

    Renaming the lifecycle controller to Lifecycle Toolkit

    Synopsis:

    We are building - and will be building - a number of components which we should release together but independently from Keptn all-in-one

    • Lifecycle controller
    • Functions runtime
    • Default functions
    • Day 2 controller
    • Monitoring controller
    • Grafana config ....
    • ...

    We should distinguish them from Keptn all-in-one and have a meaningful name that covers all components. These should then be under a coordinated release cycle. The proposal is to call this the Keptn Lifecycle Toolkit

  • 2

    SUD pods stuck pending (timeout plugin KLCPermit)

    Regardless of success of failure of either pre and / or post deployment KLC tasks, I'd expect it to timeout and pass rather than just block my deployment.

    Client Version: v1.24.0
    Kustomize Version: v4.5.4
    Server Version: v1.25.2
    

    Step 1: Install KLC

    Step 2: Label System under diagnosis namespace (eg. otel-demo)

    apiVersion: v1
    kind: Namespace
    metadata:
      name: otel-demo
      annotations:
        keptn.sh/lifecycle-controller: "enabled"
    

    Step 3: Create post deploy task

    apiVersion: lifecycle.keptn.sh/v1alpha1
    kind: KeptnTaskDefinition
    metadata:
      name: post-deploy-task
      namespace: otel-demo
    spec:
      function:
        inline:
          code: |
            console.log(">> Post-Deployment Task has been executed");
            const headers = new Headers({ "x-klc-step": "post-deploy-test" });
            const res = await fetch("https://webhook.site/3fee1127-d56a-4ac9-96bf-aff86508e660", {
              headers,
            });
            const body = new Uint8Array(await res.arrayBuffer());
            console.log(body)
    

    Step 4: Label Deployment

    - kind: Deployment
      apiVersion: apps/v1
      metadata:
        name: my-otel-demo-adservice
        labels:
          owner: "TeamA"
          priority: "P5"
          variant: "var1"
          app.kubernetes.io/part-of: "otel-demo"
          dynatrace-release-stage: "production"
          app.kubernetes.io/version: "0.6.1"
          keptn.sh/post-deployment-tasks: post-deploy-task
    

    Step 5: Modify SUD replicas in deployment

    # adservice
              - kind: Deployment
                apiVersion: apps/v1
                metadata:
                  name: my-otel-demo-adservice
                  labels:
                    owner: "TeamA"
                    priority: "P5"
                    variant: "var1"
                    app.kubernetes.io/part-of: "otel-demo"
                    dynatrace-release-stage: "production"
                    app.kubernetes.io/version: "0.6.1"
                    keptn.sh/post-deployment-tasks: post-deploy-task
                spec:
                  replicas: 2
    

    image

    E1028 04:45:08.815843       1 main.go:111] Could not set up OTel exporter: dial tcp: lookup otel-collector: i/o timeout
    2022/10/28 04:45:08 <nil>
    I1028 04:45:09.724077       1 serving.go:348] Generated self-signed cert in-memory
    W1028 04:45:10.883376       1 client_config.go:617] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
    I1028 04:45:10.908658       1 server.go:147] "Starting Kubernetes Scheduler" version="v0.24.3"
    I1028 04:45:10.914641       1 server.go:149] "Golang settings" GOGC="" GOMAXPROCS="" GOTRACEBACK=""
    I1028 04:45:10.937181       1 secure_serving.go:210] Serving securely on [::]:10259
    I1028 04:45:10.937469       1 requestheader_controller.go:169] Starting RequestHeaderAuthRequestController
    I1028 04:45:10.937542       1 shared_informer.go:255] Waiting for caches to sync for RequestHeaderAuthRequestController
    I1028 04:45:10.937619       1 tlsconfig.go:240] "Starting DynamicServingCertificateController"
    I1028 04:45:10.939144       1 configmap_cafile_content.go:202] "Starting controller" name="client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file"
    I1028 04:45:10.939255       1 shared_informer.go:255] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
    I1028 04:45:10.941860       1 configmap_cafile_content.go:202] "Starting controller" name="client-ca::kube-system::extension-apiserver-authentication::client-ca-file"
    I1028 04:45:10.952369       1 shared_informer.go:255] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::client-ca-file
    I1028 04:45:11.038254       1 shared_informer.go:262] Caches are synced for RequestHeaderAuthRequestController
    I1028 04:45:11.039818       1 shared_informer.go:262] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
    I1028 04:45:11.053086       1 shared_informer.go:262] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::client-ca-file
    I1028 04:45:25.239598       1 permit.go:35] [Keptn Permit Plugin] waiting for pre-deployment checks on my-otel-demo-emailservice-6885f744d5-lwf5p
    I1028 04:45:25.248756       1 workflow_manager.go:83] [Keptn Permit Plugin] workloadInstance crd &{map[apiVersion:lifecycle.keptn.sh/v1alpha1 kind:KeptnWorkloadInstance metadata:map[annotations:map[traceparent:00-ac9bce933ed2c3c5d9b28b888c209a7b-b491f1cbf5a6eefb-01] creationTimestamp:2022-10-28T04:45:25Z generation:%!s(int64=1) managedFields:[map[apiVersion:lifecycle.keptn.sh/v1alpha1 fieldsType:FieldsV1 fieldsV1:map[f:metadata:map[f:annotations:map[.:map[] f:traceparent:map[]] f:ownerReferences:map[.:map[] k:{"uid":"8797c49c-453c-4124-8c98-6afcce17ade2"}:map[]]] f:spec:map[.:map[] f:app:map[] f:resourceReference:map[.:map[] f:kind:map[] f:uid:map[]] f:version:map[] f:workloadName:map[]]] manager:manager operation:Update time:2022-10-28T04:45:25Z]] name:otel-demo-my-otel-demo-0.6.1-beta namespace:otel-demo ownerReferences:[map[apiVersion:lifecycle.keptn.sh/v1alpha1 blockOwnerDeletion:%!s(bool=true) controller:%!s(bool=true) kind:KeptnWorkload name:otel-demo-my-otel-demo uid:8797c49c-453c-4124-8c98-6afcce17ade2]] resourceVersion:2133 uid:e8f3efe3-7be4-440f-bd06-fccfc1a51b1e] spec:map[app:otel-demo resourceReference:map[kind:ReplicaSet uid:4c056b8d-1c80-4d4a-8bfe-f145c8e311bc] version:0.6.1-beta workloadName:otel-demo-my-otel-demo]]}, found %!s(bool=false) with phase  
    I1028 04:45:25.249009       1 permit.go:47] [Keptn Permit Plugin] waiting for pre-deployment checks on my-otel-demo-emailservice-6885f744d5-lwf5p
    I1028 04:45:25.257354       1 workflow_manager.go:83] [Keptn Permit Plugin] workloadInstance crd &{map[apiVersion:lifecycle.keptn.sh/v1alpha1 kind:KeptnWorkloadInstance metadata:map[annotations:map[traceparent:00-ac9bce933ed2c3c5d9b28b888c209a7b-b491f1cbf5a6eefb-01] creationTimestamp:2022-10-28T04:45:25Z generation:%!s(int64=1) managedFields:[map[apiVersion:lifecycle.keptn.sh/v1alpha1 fieldsType:FieldsV1 fieldsV1:map[f:metadata:map[f:annotations:map[.:map[] f:traceparent:map[]] f:ownerReferences:map[.:map[] k:{"uid":"8797c49c-453c-4124-8c98-6afcce17ade2"}:map[]]] f:spec:map[.:map[] f:app:map[] f:resourceReference:map[.:map[] f:kind:map[] f:uid:map[]] f:version:map[] f:workloadName:map[]]] manager:manager operation:Update time:2022-10-28T04:45:25Z]] name:otel-demo-my-otel-demo-0.6.1-beta namespace:otel-demo ownerReferences:[map[apiVersion:lifecycle.keptn.sh/v1alpha1 blockOwnerDeletion:%!s(bool=true) controller:%!s(bool=true) kind:KeptnWorkload name:otel-demo-my-otel-demo uid:8797c49c-453c-4124-8c98-6afcce17ade2]] resourceVersion:2133 uid:e8f3efe3-7be4-440f-bd06-fccfc1a51b1e] spec:map[app:otel-demo resourceReference:map[kind:ReplicaSet uid:4c056b8d-1c80-4d4a-8bfe-f145c8e311bc] version:0.6.1-beta workloadName:otel-demo-my-otel-demo]]}, found %!s(bool=false) with phase  
    I1028 04:45:25.272285       1 permit.go:35] [Keptn Permit Plugin] waiting for pre-deployment checks on my-otel-demo-otelcol-848f4c9fcd-ql2qw
    I1028 04:45:25.290110       1 workflow_manager.go:83] [Keptn Permit Plugin] workloadInstance crd &{map[apiVersion:lifecycle.keptn.sh/v1alpha1 kind:KeptnWorkloadInstance metadata:map[annotations:map[traceparent:00-53aa570210df2cbaa7600437ff8d9229-1a32b310f963f478-01] creationTimestamp:2022-10-28T04:45:25Z generation:%!s(int64=1) managedFields:[map[apiVersion:lifecycle.keptn.sh/v1alpha1 fieldsType:FieldsV1 fieldsV1:map[f:metadata:map[f:annotations:map[.:map[] f:traceparent:map[]] f:ownerReferences:map[.:map[] k:{"uid":"61f53c3e-505c-4380-9e90-14e4dc386d1f"}:map[]]] f:spec:map[.:map[] f:app:map[] f:resourceReference:map[.:map[] f:kind:map[] f:uid:map[]] f:version:map[] f:workloadName:map[]]] manager:manager operation:Update time:2022-10-28T04:45:25Z]] name:otel-demo-otelcol-0.6.1-beta namespace:otel-demo ownerReferences:[map[apiVersion:lifecycle.keptn.sh/v1alpha1 blockOwnerDeletion:%!s(bool=true) controller:%!s(bool=true) kind:KeptnWorkload name:otel-demo-otelcol uid:61f53c3e-505c-4380-9e90-14e4dc386d1f]] resourceVersion:2137 uid:3bb3a2e5-7f82-4ad2-9deb-76c5a7588f37] spec:map[app:otel-demo resourceReference:map[kind:ReplicaSet uid:95c6a755-0352-48f2-91d9-cc32c6604c9c] version:0.6.1-beta workloadName:otel-demo-otelcol]]}, found %!s(bool=false) with phase  
    I1028 04:45:25.290237       1 permit.go:47] [Keptn Permit Plugin] waiting for pre-deployment checks on my-otel-demo-otelcol-848f4c9fcd-ql2qw
    etc..
    Over and over again...
    
  • 3

    chore: upgrade examples and tests to v1alpha2

    This PR

    • updates the following files to lifecycle.keptn.sh/v1alpha2:
      • examples
      • integration tests (except KeptnApp API conversion test)
      • README

    Part of #471

  • 4

    feat: use scarf.sh registry for all container images

    This PR

    • introduces a new container registry under our own keptn domain
    • this gives keptn the option to keep track of download numbers and versions of KLT that are downloaded

    THIS IS A BREAKING CHANGE

    Part of #195

  • 5

    Research: Testing

    Goal

    Research how we can test the controller and which type of tests we should use.

    Acceptance Criteria

    • [x] Define how we can test CRD in isolation: maybe using K3s/K3d/Kind
    • [x] Define what type of tests we should execute:
      • [x] Unit tests
      • [ ] Contract tests
      • [x] E2E & run them on multiple K8s versions
      • [x] Load tests
    • [x] Define a testing strategy and how to automate it

    DoD

    • [x] A PoC with tests is created
    • [x] Best practices on how to structure the code are documented in a Developer.md

    References

  • 6

    deps: update module github.com/stretchr/testify to v1.8.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/stretchr/testify | require | patch | v1.8.0 -> v1.8.1 |


    Release Notes

    stretchr/testify

    v1.8.1

    Compare Source


    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • 7

    deps: update opentelemetry-go monorepo to v1 (major)

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | go.opentelemetry.io/otel | require | major | v0.20.0 -> v1.11.2 | | go.opentelemetry.io/otel/sdk | require | major | v0.20.0 -> v1.11.2 | | go.opentelemetry.io/otel/trace | require | major | v0.20.0 -> v1.11.2 |


    Release Notes

    open-telemetry/opentelemetry-go

    v1.11.2: /0.34.0

    Compare Source

    Added
    • The WithView Option is added to the go.opentelemetry.io/otel/sdk/metric package. This option is used to configure the view(s) a MeterProvider will use for all Readers that are registered with it. (#​3387)
    • Add Instrumentation Scope and Version as info metric and label in Prometheus exporter. This can be disabled using the WithoutScopeInfo() option added to that package.(#​3273, #​3357)
    • OTLP exporters now recognize: (#​3363)
      • OTEL_EXPORTER_OTLP_INSECURE
      • OTEL_EXPORTER_OTLP_TRACES_INSECURE
      • OTEL_EXPORTER_OTLP_METRICS_INSECURE
      • OTEL_EXPORTER_OTLP_CLIENT_KEY
      • OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY
      • OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY
      • OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE
      • OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE
      • OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE
    • The View type and related NewView function to create a view according to the OpenTelemetry specification are added to go.opentelemetry.io/otel/sdk/metric. These additions are replacements for the View type and New function from go.opentelemetry.io/otel/sdk/metric/view. (#​3459)
    • The Instrument and InstrumentKind type are added to go.opentelemetry.io/otel/sdk/metric. These additions are replacements for the Instrument and InstrumentKind types from go.opentelemetry.io/otel/sdk/metric/view. (#​3459)
    • The Stream type is added to go.opentelemetry.io/otel/sdk/metric to define a metric data stream a view will produce. (#​3459)
    • The AssertHasAttributes allows instrument authors to test that datapoints returned have appropriate attributes. (#​3487)
    Changed
    • The "go.opentelemetry.io/otel/sdk/metric".WithReader option no longer accepts views to associate with the Reader. Instead, views are now registered directly with the MeterProvider via the new WithView option. The views registered with the MeterProvider apply to all Readers. (#​3387)
    • The Temporality(view.InstrumentKind) metricdata.Temporality and Aggregation(view.InstrumentKind) aggregation.Aggregation methods are added to the "go.opentelemetry.io/otel/sdk/metric".Exporter interface. (#​3260)
    • The Temporality(view.InstrumentKind) metricdata.Temporality and Aggregation(view.InstrumentKind) aggregation.Aggregation methods are added to the "go.opentelemetry.io/otel/exporters/otlp/otlpmetric".Client interface. (#​3260)
    • The WithTemporalitySelector and WithAggregationSelector ReaderOptions have been changed to ManualReaderOptions in the go.opentelemetry.io/otel/sdk/metric package. (#​3260)
    • The periodic reader in the go.opentelemetry.io/otel/sdk/metric package now uses the temporality and aggregation selectors from its configured exporter instead of accepting them as options. (#​3260)
    Fixed
    • The go.opentelemetry.io/otel/exporters/prometheus exporter fixes duplicated _total suffixes. (#​3369)
    • Remove comparable requirement for Readers. (#​3387)
    • Cumulative metrics from the OpenCensus bridge (go.opentelemetry.io/otel/bridge/opencensus) are defined as monotonic sums, instead of non-monotonic. (#​3389)
    • Asynchronous counters (Counter and UpDownCounter) from the metric SDK now produce delta sums when configured with delta temporality. (#​3398)
    • Exported Status codes in the go.opentelemetry.io/otel/exporters/zipkin exporter are now exported as all upper case values. (#​3340)
    • Aggregations from go.opentelemetry.io/otel/sdk/metric with no data are not exported. (#​3394, #​3436)
    • Reenabled Attribute Filters in the Metric SDK. (#​3396)
    • Asynchronous callbacks are only called if they are registered with at least one instrument that does not use drop aggragation. (#​3408)
    • Do not report empty partial-success responses in the go.opentelemetry.io/otel/exporters/otlp exporters. (#​3438, #​3432)
    • Handle partial success responses in go.opentelemetry.io/otel/exporters/otlp/otlpmetric exporters. (#​3162, #​3440)
    • Prevent duplicate Prometheus description, unit, and type. (#​3469)
    • Prevents panic when using incorrect attribute.Value.As[Type]Slice(). (#​3489)
    Removed
    • The go.opentelemetry.io/otel/exporters/otlp/otlpmetric.Client interface is removed. (#​3486)
    • The go.opentelemetry.io/otel/exporters/otlp/otlpmetric.New function is removed. Use the otlpmetric[http|grpc].New directly. (#​3486)
    Deprecated
    • The go.opentelemetry.io/otel/sdk/metric/view package is deprecated. Use Instrument, InstrumentKind, View, and NewView in go.opentelemetry.io/otel/sdk/metric instead. (#​3476)

    v1.11.1: /v0.33.0

    Compare Source

    Added
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus registers with a Prometheus registerer on creation. By default, it will register with the default Prometheus default registerer. A non-default registerer can be used by passing the WithRegisterer option. (#​3239)
    • Added the WithAggregationSelector option to the go.opentelemetry.io/otel/exporters/prometheus package to change the default AggregationSelector used. (#​3341)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus converts the Resource associated with metric exports into a target_info metric. (#​3285)
    Changed
    • The "go.opentelemetry.io/otel/exporters/prometheus".New function is updated to return an error. It will return an error if the exporter fails to register with Prometheus. (#​3239)
    Fixed
    • The URL-encoded values from the OTEL_RESOURCE_ATTRIBUTES environment variable are decoded. (#​2963)
    • The baggage.NewMember function decodes the value parameter instead of directly using it. This fixes the implementation to be compliant with the W3C specification. (#​3226)
    • Slice attributes of the attribute package are now comparable based on their value, not instance. (#​3108 #​3252)
    • The Shutdown and ForceFlush methods of the "go.opentelemetry.io/otel/sdk/trace".TraceProvider no longer return an error when no processor is registered. (#​3268)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus cumulatively sums histogram buckets. (#​3281)
    • The sum of each histogram data point is now uniquely exported by the go.opentelemetry.io/otel/exporters/otlpmetric exporters. (#​3284, #​3293)
    • Recorded values for asynchronous counters (Counter and UpDownCounter) are interpreted as exact, not incremental, sum values by the metric SDK. (#​3350, #​3278)
    • UpDownCounters are now correctly output as Prometheus gauges in the go.opentelemetry.io/otel/exporters/prometheus exporter. (#​3358)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus no longer describes the metrics it will send to Prometheus on startup. Instead the exporter is defined as an "unchecked" collector for Prometheus. This fixes the reader is not registered warning currently emitted on startup. (#​3291 #​3342)
    • The go.opentelemetry.io/otel/exporters/prometheus exporter now correctly adds _total suffixes to counter metrics. (#​3360)
    • The go.opentelemetry.io/otel/exporters/prometheus exporter now adds a unit suffix to metric names. This can be disabled using the WithoutUnits() option added to that package. (#​3352)

    v1.11.0: /v0.32.3

    Compare Source

    Retracts the v0.32.2 version of go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetricgrpc and go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetrichttp given they include unresolvable dependencies.

    Added
    • Add default User-Agent header to OTLP exporter requests (go.opentelemetry.io/otel/exporters/otlptrace/otlptracegrpc and go.opentelemetry.io/otel/exporters/otlptrace/otlptracehttp). (#​3261)
    Changed
    • span.SetStatus has been updated such that calls that lower the status are now no-ops. (#​3214)
    • Upgrade golang.org/x/sys/unix from v0.0.0-20210423185535-09eb48e85fd7 to v0.0.0-20220919091848-fb04ddd9f9c8. This addresses GO-2022-0493. (#​3235)

    v1.10.0

    Compare Source

    Added
    • Support Go 1.19. (#​3077) Include compatibility testing and document support. (#​3077)
    • Support the OTLP ExportTracePartialSuccess response; these are passed to the registered error handler. (#​3106)
    • Upgrade go.opentelemetry.io/proto/otlp from v0.18.0 to v0.19.0 (#​3107)
    Changed
    • Fix misidentification of OpenTelemetry SpanKind in OpenTracing bridge (go.opentelemetry.io/otel/bridge/opentracing). (#​3096)
    • Attempting to start a span with a nil context will no longer cause a panic. (#​3110)
    • All exporters will be shutdown even if one reports an error (#​3091)
    • Ensure valid UTF-8 when truncating over-length attribute values. (#​3156)

    v1.9.0: /v0.0.3

    Compare Source

    Added
    • Add support for Schema Files format 1.1.x (metric "split" transform) with the new go.opentelemetry.io/otel/schema/v1.1 package. (#​2999)
    • Add the go.opentelemetry.io/otel/semconv/v1.11.0 package. The package contains semantic conventions from the v1.11.0 version of the OpenTelemetry specification. (#​3009)
    • Add the go.opentelemetry.io/otel/semconv/v1.12.0 package. The package contains semantic conventions from the v1.12.0 version of the OpenTelemetry specification. (#​3010)
    • Add the http.method attribute to HTTP server metric from all go.opentelemetry.io/otel/semconv/* packages. (#​3018)
    Fixed
    • Invalid warning for context setup being deferred in go.opentelemetry.io/otel/bridge/opentracing package. (#​3029)

    v1.8.0: /v0.31.0

    Compare Source

    1.8.0/0.31.0 - 2022-07-08
    Added
    • Add support for opentracing.TextMap format in the Inject and Extract methods of the "go.opentelemetry.io/otel/bridge/opentracing".BridgeTracer type. (#​2911)
    Changed
    • The crosslink make target has been updated to use the go.opentelemetry.io/build-tools/crosslink package. (#​2886)
    • In the go.opentelemetry.io/otel/sdk/instrumentation package rename Library to Scope and alias Library as Scope (#​2976)
    • Move metric no-op implementation form nonrecording to metric package. (#​2866)
    Removed
    • Support for go1.16. Support is now only for go1.17 and go1.18 (#​2917)
    Deprecated
    • The Library struct in the go.opentelemetry.io/otel/sdk/instrumentation package is deprecated. Use the equivalent Scope struct instead. (#​2977)
    • The ReadOnlySpan.InstrumentationLibrary method from the go.opentelemetry.io/otel/sdk/trace package is deprecated. Use the equivalent ReadOnlySpan.InstrumentationScope method instead. (#​2977)

    v1.7.0: /v0.30.0

    Compare Source

    Added
    • Add the go.opentelemetry.io/otel/semconv/v1.8.0 package. The package contains semantic conventions from the v1.8.0 version of the OpenTelemetry specification. (#​2763)
    • Add the go.opentelemetry.io/otel/semconv/v1.9.0 package. The package contains semantic conventions from the v1.9.0 version of the OpenTelemetry specification. (#​2792)
    • Add the go.opentelemetry.io/otel/semconv/v1.10.0 package. The package contains semantic conventions from the v1.10.0 version of the OpenTelemetry specification. (#​2842)
    • Added an in-memory exporter to metrictest to aid testing with a full SDK. (#​2776)
    Fixed
    • Globally delegated instruments are unwrapped before delegating asynchronous callbacks. (#​2784)
    • Remove import of testing package in non-tests builds of the go.opentelemetry.io/otel package. (#​2786)
    Changed
    • The WithLabelEncoder option from the go.opentelemetry.io/otel/exporters/stdout/stdoutmetric package is renamed to WithAttributeEncoder. (#​2790)
    • The LabelFilterSelector interface from go.opentelemetry.io/otel/sdk/metric/processor/reducer is renamed to AttributeFilterSelector. The method included in the renamed interface also changed from LabelFilterFor to AttributeFilterFor. (#​2790)
    • The Metadata.Labels method from the go.opentelemetry.io/otel/sdk/metric/export package is renamed to Metadata.Attributes. Consequentially, the Record type from the same package also has had the embedded method renamed. (#​2790)
    Deprecated
    • The Iterator.Label method in the go.opentelemetry.io/otel/attribute package is deprecated. Use the equivalent Iterator.Attribute method instead. (#​2790)
    • The Iterator.IndexedLabel method in the go.opentelemetry.io/otel/attribute package is deprecated. Use the equivalent Iterator.IndexedAttribute method instead. (#​2790)
    • The MergeIterator.Label method in the go.opentelemetry.io/otel/attribute package is deprecated. Use the equivalent MergeIterator.Attribute method instead. (#​2790)
    Removed
    • Removed the Batch type from the go.opentelemetry.io/otel/sdk/metric/metrictest package. (#​2864)
    • Removed the Measurement type from the go.opentelemetry.io/otel/sdk/metric/metrictest package. (#​2864)

    v1.6.3

    Compare Source

    Fixed
    • Allow non-comparable global MeterProvider, TracerProvider, and TextMapPropagator types to be set. (#​2772, #​2773)

    v1.6.2

    Compare Source

    1.6.2 - 2022-04-06
    Changed
    • Don't panic anymore when setting a global TracerProvider or TextMapPropagator to itself. (#​2749)
    • Upgrade go.opentelemetry.io/proto/otlp in go.opentelemetry.io/otel/exporters/otlp/otlptrace from v0.12.1 to v0.15.0. This replaces the use of the now deprecated InstrumentationLibrary and InstrumentationLibrarySpans types and fields in the proto library with the equivalent InstrumentationScope and ScopeSpans. (#​2748)

    v1.6.1

    Compare Source

    Fixed
    • The go.opentelemetry.io/otel/schema/* packages now use the correct schema URL for their SchemaURL constant. Instead of using "https://opentelemetry.io/schemas/v<version>" they now use the correct URL without a v prefix, "https://opentelemetry.io/schemas/<version>". (#​2743, #​2744)
    Security
    • Upgrade go.opentelemetry.io/proto/otlp from v0.12.0 to v0.12.1. This includes an indirect upgrade of github.com/grpc-ecosystem/grpc-gateway which resolves a vulnerability from gopkg.in/yaml.v2 in version v2.2.3. (#​2724, #​2728)

    v1.6.0: /v0.28.0

    Compare Source

    ⚠️ Notice ⚠️

    This update is a breaking change of the unstable Metrics API. Code instrumented with the go.opentelemetry.io/otel/metric will need to be modified.

    Added
    • Add metrics exponential histogram support. New mapping functions have been made available in sdk/metric/aggregator/exponential/mapping for other OpenTelemetry projects to take dependencies on. (#​2502)
    • Add Go 1.18 to our compatibility tests. (#​2679)
    • Allow configuring the Sampler with the OTEL_TRACES_SAMPLER and OTEL_TRACES_SAMPLER_ARG environment variables. (#​2305, #​2517)
    • Add the metric/global for obtaining and setting the global MeterProvider. (#​2660)
    Changed
    • The metrics API has been significantly changed to match the revised OpenTelemetry specification. High-level changes include:

      • Synchronous and asynchronous instruments are now handled by independent InstrumentProviders. These InstrumentProviders are managed with a Meter.
      • Synchronous and asynchronous instruments are grouped into their own packages based on value types.
      • Asynchronous callbacks can now be registered with a Meter.

      Be sure to check out the metric module documentation for more information on how to use the revised API. (#​2587, #​2660)

    Fixed
    • Fallback to general attribute limits when span specific ones are not set in the environment. (#​2675, #​2677)

    v1.5.0

    Compare Source

    Added
    • Log the Exporters configuration in the TracerProviders message. (#​2578)
    • Added support to configure the span limits with environment variables. The following environment variables are supported. (#​2606, #​2637)
      • OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT
      • OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT
      • OTEL_SPAN_EVENT_COUNT_LIMIT
      • OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT
      • OTEL_SPAN_LINK_COUNT_LIMIT
      • OTEL_LINK_ATTRIBUTE_COUNT_LIMIT If the provided environment variables are invalid (negative), the default values would be used.
    • Rename the gc runtime name to go (#​2560)
    • Add resource container ID detection. (#​2418)
    • Add span attribute value length limit. The new AttributeValueLengthLimit field is added to the "go.opentelemetry.io/otel/sdk/trace".SpanLimits type to configure this limit for a TracerProvider. The default limit for this resource is "unlimited". (#​2637)
    • Add the WithRawSpanLimits option to go.opentelemetry.io/otel/sdk/trace. This option replaces the WithSpanLimits option. Zero or negative values will not be changed to the default value like WithSpanLimits does. Setting a limit to zero will effectively disable the related resource it limits and setting to a negative value will mean that resource is unlimited. Consequentially, limits should be constructed using NewSpanLimits and updated accordingly. (#​2637)
    Changed
    • Drop oldest tracestate Member when capacity is reached. (#​2592)
    • Add event and link drop counts to the exported data from the oltptrace exporter. (#​2601)
    • Unify path cleaning functionally in the otlpmetric and otlptrace configuration. (#​2639)
    • Change the debug message from the sdk/trace.BatchSpanProcessor to reflect the count is cumulative. (#​2640)
    • Introduce new internal envconfig package for OTLP exporters. (#​2608)
    • If http.Request.Host is empty, fall back to use URL.Host when populating http.host in the semconv packages. (#​2661)
    Fixed
    • Remove the OTLP trace exporter limit of SpanEvents when exporting. (#​2616)
    • Default to port 4318 instead of 4317 for the otlpmetrichttp and otlptracehttp client. (#​2614, #​2625)
    • Unlimited span limits are now supported (negative values). (#​2636, #​2637)
    Deprecated
    • Deprecated "go.opentelemetry.io/otel/sdk/trace".WithSpanLimits. Use WithRawSpanLimits instead. That option allows setting unlimited and zero limits, this option does not. This option will be kept until the next major version incremented release. (#​2637)

    v1.4.1

    Compare Source

    Fixed
    • Fix race condition in reading the dropped spans number for the BatchSpanProcessor. (#​2615)

    v1.4.0: /v0.27.0

    Compare Source

    Added
    • Use OTEL_EXPORTER_ZIPKIN_ENDPOINT environment variable to specify zipkin collector endpoint. (#​2490)
    • Log the configuration of TracerProviders, and Tracers for debugging. To enable use a logger with Verbosity (V level) >=1. (#​2500)
    • Added support to configure the batch span-processor with environment variables. The following environment variables are used. (#​2515)
      • OTEL_BSP_SCHEDULE_DELAY
      • OTEL_BSP_EXPORT_TIMEOUT
      • OTEL_BSP_MAX_QUEUE_SIZE.
      • OTEL_BSP_MAX_EXPORT_BATCH_SIZE
    Changed
    • Zipkin exporter exports Resource attributes in the Tags field. (#​2589)
    Deprecated
    • Deprecate module the go.opentelemetry.io/otel/sdk/export/metric. Use the go.opentelemetry.io/otel/sdk/metric module instead. (#​2382)
    • Deprecate "go.opentelemetry.io/otel/sdk/metric".AtomicFieldOffsets. (#​2445)
    Fixed
    • Fixed the instrument kind for noop async instruments to correctly report an implementation. (#​2461)
    • Fix UDP packets overflowing with Jaeger payloads. (#​2489, #​2512)
    • Change the otlpmetric.Client interface's UploadMetrics method to accept a single ResourceMetrics instead of a slice of them. (#​2491)
    • Specify explicit buckets in Prometheus example, fixing issue where example only has +inf bucket. (#​2419, #​2493)
    • W3C baggage will now decode urlescaped values. (#​2529)
    • Baggage members are now only validated once, when calling NewMember and not also when adding it to the baggage itself. (#​2522)
    • The order attributes are dropped from spans in the go.opentelemetry.io/otel/sdk/trace package when capacity is reached is fixed to be in compliance with the OpenTelemetry specification. Instead of dropping the least-recently-used attribute, the last added attribute is dropped. This drop order still only applies to attributes with unique keys not already contained in the span. If an attribute is added with a key already contained in the span, that attribute is updated to the new value being added. (#​2576)
    Removed

    v1.3.0: /v0.26.0

    Compare Source

    ⚠️ Notice ⚠️

    We have updated the project minimum supported Go version to 1.16

    Added
    • Added an internal Logger. This can be used by the SDK and API to provide users with feedback of the internal state. To enable verbose logs configure the logger which will print V(1) logs. For debugging information configure to print V(5) logs. (#​2343)
    • Add the WithRetry Option and the RetryConfig type to the go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp package to specify retry behavior consistently. (#​2425)
    • Add SpanStatusFromHTTPStatusCodeAndSpanKind to all semconv packages to return a span status code similar to SpanStatusFromHTTPStatusCode, but exclude 4XX HTTP errors as span errors if the span is of server kind. (#​2296)
    Changed
    • The "go.opentelemetry.io/otel/exporter/otel/otlptrace/otlptracegrpc".Client now uses the underlying gRPC ClientConn to handle name resolution, TCP connection establishment (with retries and backoff) and TLS handshakes, and handling errors on established connections by re-resolving the name and reconnecting. (#​2329)
    • The "go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetricgrpc".Client now uses the underlying gRPC ClientConn to handle name resolution, TCP connection establishment (with retries and backoff) and TLS handshakes, and handling errors on established connections by re-resolving the name and reconnecting. (#​2425)
    • The "go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetricgrpc".RetrySettings type is renamed to RetryConfig. (#​2425)
    • The go.opentelemetry.io/otel/exporter/otel/* gRPC exporters now default to using the host's root CA set if none are provided by the user and WithInsecure is not specified. (#​2432)
    • Change resource.Default to be evaluated the first time it is called, rather than on import. This allows the caller the option to update OTEL_RESOURCE_ATTRIBUTES first, such as with os.Setenv. (#​2371)
    Fixed
    • The go.opentelemetry.io/otel/exporter/otel/* exporters are updated to handle per-signal and universal endpoints according to the OpenTelemetry specification. Any per-signal endpoint set via an OTEL_EXPORTER_OTLP_<signal>_ENDPOINT environment variable is now used without modification of the path. When OTEL_EXPORTER_OTLP_ENDPOINT is set, if it contains a path, that path is used as a base path which per-signal paths are appended to. (#​2433)
    • Basic metric controller updated to use sync.Map to avoid blocking calls (#​2381)
    • The go.opentelemetry.io/otel/exporter/jaeger correctly sets the otel.status_code value to be a string of ERROR or OK instead of an integer code. (#​2439, #​2440)
    Deprecated
    • Deprecated the "go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp".WithMaxAttempts Option, use the new WithRetry Option instead. (#​2425)
    • Deprecated the "go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp".WithBackoff Option, use the new WithRetry Option instead. (#​2425)
    Removed
    • Remove the metric Processor's ability to convert cumulative to delta aggregation temporality. (#​2350)
    • Remove the metric Bound Instruments interface and implementations. (#​2399)
    • Remove the metric MinMaxSumCount kind aggregation and the corresponding OTLP export path. (#​2423)
    • Metric SDK removes the "exact" aggregator for histogram instruments, as it performed a non-standard aggregation for OTLP export (creating repeated Gauge points) and worked its way into a number of confusing examples. (#​2348)

    v1.2.0: /v0.25.0

    Compare Source

    Changed

    • Metric SDK export.ExportKind, export.ExportKindSelector types have been renamed to aggregation.Temporality and aggregation.TemporalitySelector respectively to keep in line with current specification and protocol along with built-in selectors (e.g., aggregation.CumulativeTemporalitySelector, ...). (#​2274)
    • The Metric Exporter interface now requires a TemporalitySelector method instead of an ExportKindSelector. (#​2274)
    • Metrics API cleanup. The metric/sdkapi package has been created to relocate the API-to-SDK interface:
      • The following interface types simply moved from metric to metric/sdkapi: Descriptor, MeterImpl, InstrumentImpl, SyncImpl, BoundSyncImpl, AsyncImpl, AsyncRunner, AsyncSingleRunner, and AsyncBatchRunner
      • The following struct types moved and are replaced with type aliases, since they are exposed to the user: Observation, Measurement.
      • The No-op implementations of sync and async instruments are no longer exported, new functions sdkapi.NewNoopAsyncInstrument() and sdkapi.NewNoopSyncInstrument() are provided instead. (#​2271)
    • Update the SDK BatchSpanProcessor to export all queued spans when ForceFlush is called. (#​2080, #​2335)
    Added
    • Add the "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc".WithGRPCConn option so the exporter can reuse an existing gRPC connection. (#​2002)
    • Added a new schema module to help parse Schema Files in OTEP 0152 format. (#​2267)
    • Added a new MapCarrier to the go.opentelemetry.io/otel/propagation package to hold propagated coss-cutting concerns as a map[string]string held in memory. (#​2334)

    v1.1.0

    Compare Source

    Added
    • Add the "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc".WithGRPCConn option so the exporter can reuse an existing gRPC connection. (#​2002)
    • Add the go.opentelemetry.io/otel/semconv/v1.7.0 package. The package contains semantic conventions from the v1.7.0 version of the OpenTelemetry specification. (#​2320)
    • Add the go.opentelemetry.io/otel/semconv/v1.6.1 package. The package contains semantic conventions from the v1.6.1 version of the OpenTelemetry specification. (#​2321)
    • Add the go.opentelemetry.io/otel/semconv/v1.5.0 package. The package contains semantic conventions from the v1.5.0 version of the OpenTelemetry specification. (#​2322)
      • When upgrading from the semconv/v1.4.0 package note the following name changes:
        • K8SReplicasetUIDKey -> K8SReplicaSetUIDKey
        • K8SReplicasetNameKey -> K8SReplicaSetNameKey
        • K8SStatefulsetUIDKey -> K8SStatefulSetUIDKey
        • k8SStatefulsetNameKey -> K8SStatefulSetNameKey
        • K8SDaemonsetUIDKey -> K8SDaemonSetUIDKey
        • K8SDaemonsetNameKey -> K8SDaemonSetNameKey
    Changed
    • Links added to a span will be dropped by the SDK if they contain an invalid span context (#​2275).
    Fixed
    • The "go.opentelemetry.io/otel/semconv/v1.4.0".HTTPServerAttributesFromHTTPRequest now correctly only sets the HTTP client IP attribute even if the connection was routed with proxies and there are multiple addresses in the X-Forwarded-For header. (#​2282, #​2284)
    • The "go.opentelemetry.io/otel/semconv/v1.4.0".NetAttributesFromHTTPRequest function correctly handles IPv6 addresses as IP addresses and sets the correct net peer IP instead of the net peer hostname attribute. (#​2283, #​2285)
    • The simple span processor shutdown method deterministically returns the exporter error status if it simultaneously finishes when the deadline is reached. (#​2290, #​2289)

    v1.0.1: /Metrics v0.24.0

    Compare Source

    1.0.1 - 2021-10-01
    Fixed
    • json stdout exporter no longer crashes due to concurrency bug. (#​2265)
    Metrics 0.24.0 - 2021-10-01
    Changed
    • NoopMeterProvider is now private and NewNoopMeterProvider must be used to obtain a noopMeterProvider. (#​2237)
    • The Metric SDK Export() function takes a new two-level reader interface for iterating over results one instrumentation library at a time. (#​2197)
      • The former "go.opentelemetry.io/otel/sdk/export/metric".CheckpointSet is renamed Reader.
      • The new interface is named "go.opentelemetry.io/otel/sdk/export/metric".InstrumentationLibraryReader.

    v1.0.0

    Compare Source

    This is the first stable release for the project. This release includes an API and SDK for the tracing signal that will comply with the stability guarantees defined by the projects versioning policy.

    Added
    • OTLP trace exporter now sets the SchemaURL field in the exported telemetry if the Tracer has WithSchemaURL option. (#​2242)
    Fixed
    • Slice-valued attributes can correctly be used as map keys. (#​2223)
    Removed
    • Removed the "go.opentelemetry.io/otel/exporters/zipkin".WithSDKOptions function. (#​2248)
    • Removed the deprecated package go.opentelemetry.io/otel/oteltest. (#​2234)
    • Removed the deprecated package go.opentelemetry.io/otel/bridge/opencensus/utils. (#​2233)
    • Removed deprecated functions, types, and methods from go.opentelemetry.io/otel/attribute package. Use the typed functions and methods added to the package instead. (#​2235)
      • The Key.Array method is removed.
      • The Array function is removed.
      • The Any function is removed.
      • The ArrayValue function is removed.
      • The AsArray function is removed.

    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • 8

    deps: update module k8s.io/component-helpers to v0.26.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | k8s.io/component-helpers | replace | minor | v0.25.5 -> v0.26.0 |


    Release Notes

    kubernetes/component-helpers

    v0.26.0

    Compare Source


    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • 9

    deps: update module github.com/onsi/ginkgo/v2 to v2.6.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/onsi/ginkgo/v2 | require | minor | v2.5.1 -> v2.6.1 |


    Release Notes

    onsi/ginkgo

    v2.6.1

    Compare Source

    2.6.1

    Features
    • Override formatter colors from envvars - this is a new feature but an alternative approach involving config files might be taken in the future (#​1095) [60240d1]
    Fixes
    • GinkgoRecover now supports ignoring panics that match a specific, hidden, interface [301f3e2]
    Maintenance

    v2.6.0

    Compare Source

    2.6.0

    Features
    • ReportBeforeSuite provides access to the suite report before the suite begins.
    • Add junit config option for omitting leafnodetype (#​1088) [956e6d2]
    • Add support to customize junit report config to omit spec labels (#​1087) [de44005]
    Fixes
    • Fix stack trace pruning so that it has a chance of working on windows [2165648]

    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • 10

    deps: update module github.com/onsi/gomega to v1.24.2

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/onsi/gomega | require | patch | v1.24.0 -> v1.24.2 |


    Release Notes

    onsi/gomega

    v1.24.2

    Compare Source

    1.24.2

    Fixes
    Maintenance

    v1.24.1

    Compare Source


    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • 11

    deps: update module k8s.io/kubernetes to v1.26.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | k8s.io/kubernetes | replace | minor | v1.25.5 -> v1.26.0 | | k8s.io/kubernetes | require | minor | v1.25.5 -> v1.26.0 |


    Release Notes

    kubernetes/kubernetes

    v1.26.0: Kubernetes v1.26.0

    Compare Source

    See [email protected]. Additional binary downloads are linked in the CHANGELOG.

    See the CHANGELOG for more details.


    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • 12

    deps: update jasonetco/create-an-issue action to v2.9.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | JasonEtco/create-an-issue | action | minor | v2.8.1 -> v2.9.1 |


    Release Notes

    JasonEtco/create-an-issue

    v2.9.1

    Compare Source

    Fixes a regression introduced in #​144, where fields that are valid according to GitHub (name and about) were getting flagged as invalid from the changes in #​144. See #​145/#​146 for the fix.

    v2.9.0

    Compare Source

    This release adds a new step to parsing the issue template, to validate the frontmatter in your template against a defined schema. That way, any missing or invalid fields (like a missing title) will be caught and get a proper error message.

    I'm not marking this as a breaking change because the expected schema hasn't changed, now it's just enforcing it. Apologies if this does break anyones templates, but that's a good thing as it'd be pointing out something invalid about it!

    v2.8.2

    Compare Source

    Fixes a bug where quotes in issue titles would cause the search for existing issues to return issues that were incorrectly considered a match.

    Also updates some CI versions, and minor adjustments to typings.


    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • 13

    deps: update jasonetco/create-an-issue action to v2.8.2

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | JasonEtco/create-an-issue | action | patch | v2.8.1 -> v2.8.2 |


    Release Notes

    JasonEtco/create-an-issue

    v2.8.2

    Compare Source

    Fixes a bug where quotes in issue titles would cause the search for existing issues to return issues that were incorrectly considered a match.

    Also updates some CI versions, and minor adjustments to typings.


    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • 14

    ci: fix renovate config

    This PR

    • fixes some issues that prevented renovate to update versions in our pipeline files
    • the issue were mainly bad regex match strings that didn't match how versions are defined in github actions
  • 15

    Add support for DataDog as Evaluation Provider

    Goal

    Support Datadog as KeptnEvaluationProvider.

    Technical Details

    In Keptn v1, we have integration for different observability providers. In particular, we have a Datadog integration. There should be also such support in the Keptn Lifecycle Toolkit. For this, the following is required:

    • Add an entry in the provider selector (code)
    • Introduce a new datadog.go file in the providers folder that contains the integration logic
    • Add unit tests
    • Update the KLT Docs

    Reference

    The Prometheus and Dynatrace integrations can be used as a reference.

  • 16

    chore(operator): fix linter issues

    Signed-off-by: odubajDT [email protected]

    Fixes: #485

    • introduce linter ignorers on places where it does not makes sense to refactor (reduces readability and possible changes options, increases complexity)
    • removes TaskStatus + EvaluationStatus and use ItemStatus instead of it (there is no reason to have 2 structs for basically the same data parameters -> DefinitionName, Name, Status) -> this is a first step for refactoring of Tasks and Evaluations, so they can be reconciled in the same way.
    • refactoring -> reducing complexity of functions according to linter errors
  • 17

    deps: update dependency kubernetes-sigs/controller-tools to v0.11.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Update | Change | |---|---|---| | kubernetes-sigs/controller-tools | minor | v0.10.0 -> v0.11.1 |


    Release Notes

    kubernetes-sigs/controller-tools

    v0.11.1

    Compare Source

    What's Changed

    Full Changelog: https://github.com/kubernetes-sigs/controller-tools/compare/v0.11.0...v0.11.1

    v0.11.0

    Compare Source

    What's Changed

    New Contributors

    Full Changelog: https://github.com/kubernetes-sigs/controller-tools/compare/v0.10.0...v0.11.0


    Configuration

    📅 Schedule: Branch creation - "after 10pm every weekday,before 5am every weekday,every weekend" in timezone Europe/Vienna, Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.