Keptn Lifecycle Toolkit
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:
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 KeptnTaskDefinition
s. 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.
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
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
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.
Step 1: Install KLC
Step 2: Label System under diagnosis namespace (eg.
otel-demo
)Step 3: Create post deploy task
Step 4: Label Deployment
Step 5: Modify SUD replicas in deployment
chore: upgrade examples and tests to v1alpha2
This PR
Part of #471
feat: use scarf.sh registry for all container images
This PR
THIS IS A BREAKING CHANGE
Part of #195
Research: Testing
Goal
Research how we can test the controller and which type of tests we should use.
Acceptance Criteria
DoD
Developer.md
References
deps: update module github.com/stretchr/testify to v1.8.1
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.
This PR has been generated by Mend Renovate. View repository job log here.
deps: update opentelemetry-go monorepo to v1 (major)
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.0Compare Source
Added
WithView
Option
is added to thego.opentelemetry.io/otel/sdk/metric
package. This option is used to configure the view(s) aMeterProvider
will use for allReader
s that are registered with it. (#3387)WithoutScopeInfo()
option added to that package.(#3273, #3357)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
View
type and relatedNewView
function to create a view according to the OpenTelemetry specification are added togo.opentelemetry.io/otel/sdk/metric
. These additions are replacements for theView
type andNew
function fromgo.opentelemetry.io/otel/sdk/metric/view
. (#3459)Instrument
andInstrumentKind
type are added togo.opentelemetry.io/otel/sdk/metric
. These additions are replacements for theInstrument
andInstrumentKind
types fromgo.opentelemetry.io/otel/sdk/metric/view
. (#3459)Stream
type is added togo.opentelemetry.io/otel/sdk/metric
to define a metric data stream a view will produce. (#3459)AssertHasAttributes
allows instrument authors to test that datapoints returned have appropriate attributes. (#3487)Changed
"go.opentelemetry.io/otel/sdk/metric".WithReader
option no longer accepts views to associate with theReader
. Instead, views are now registered directly with theMeterProvider
via the newWithView
option. The views registered with theMeterProvider
apply to allReader
s. (#3387)Temporality(view.InstrumentKind) metricdata.Temporality
andAggregation(view.InstrumentKind) aggregation.Aggregation
methods are added to the"go.opentelemetry.io/otel/sdk/metric".Exporter
interface. (#3260)Temporality(view.InstrumentKind) metricdata.Temporality
andAggregation(view.InstrumentKind) aggregation.Aggregation
methods are added to the"go.opentelemetry.io/otel/exporters/otlp/otlpmetric".Client
interface. (#3260)WithTemporalitySelector
andWithAggregationSelector
ReaderOption
s have been changed toManualReaderOption
s in thego.opentelemetry.io/otel/sdk/metric
package. (#3260)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
go.opentelemetry.io/otel/exporters/prometheus
exporter fixes duplicated_total
suffixes. (#3369)Reader
s. (#3387)go.opentelemetry.io/otel/bridge/opencensus
) are defined as monotonic sums, instead of non-monotonic. (#3389)Counter
andUpDownCounter
) from the metric SDK now produce delta sums when configured with delta temporality. (#3398)Status
codes in thego.opentelemetry.io/otel/exporters/zipkin
exporter are now exported as all upper case values. (#3340)Aggregation
s fromgo.opentelemetry.io/otel/sdk/metric
with no data are not exported. (#3394, #3436)go.opentelemetry.io/otel/exporters/otlp
exporters. (#3438, #3432)go.opentelemetry.io/otel/exporters/otlp/otlpmetric
exporters. (#3162, #3440)attribute.Value.As[Type]Slice()
. (#3489)Removed
go.opentelemetry.io/otel/exporters/otlp/otlpmetric.Client
interface is removed. (#3486)go.opentelemetry.io/otel/exporters/otlp/otlpmetric.New
function is removed. Use theotlpmetric[http|grpc].New
directly. (#3486)Deprecated
go.opentelemetry.io/otel/sdk/metric/view
package is deprecated. UseInstrument
,InstrumentKind
,View
, andNewView
ingo.opentelemetry.io/otel/sdk/metric
instead. (#3476)v1.11.1
: /v0.33.0Compare Source
Added
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 theWithRegisterer
option. (#3239)WithAggregationSelector
option to thego.opentelemetry.io/otel/exporters/prometheus
package to change the defaultAggregationSelector
used. (#3341)go.opentelemetry.io/otel/exporters/prometheus
converts theResource
associated with metric exports into atarget_info
metric. (#3285)Changed
"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
OTEL_RESOURCE_ATTRIBUTES
environment variable are decoded. (#2963)baggage.NewMember
function decodes thevalue
parameter instead of directly using it. This fixes the implementation to be compliant with the W3C specification. (#3226)attribute
package are now comparable based on their value, not instance. (#3108 #3252)Shutdown
andForceFlush
methods of the"go.opentelemetry.io/otel/sdk/trace".TraceProvider
no longer return an error when no processor is registered. (#3268)go.opentelemetry.io/otel/exporters/prometheus
cumulatively sums histogram buckets. (#3281)go.opentelemetry.io/otel/exporters/otlpmetric
exporters. (#3284, #3293)Counter
andUpDownCounter
) are interpreted as exact, not incremental, sum values by the metric SDK. (#3350, #3278)UpDownCounters
are now correctly output as Prometheus gauges in thego.opentelemetry.io/otel/exporters/prometheus
exporter. (#3358)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 thereader is not registered
warning currently emitted on startup. (#3291 #3342)go.opentelemetry.io/otel/exporters/prometheus
exporter now correctly adds_total
suffixes to counter metrics. (#3360)go.opentelemetry.io/otel/exporters/prometheus
exporter now adds a unit suffix to metric names. This can be disabled using theWithoutUnits()
option added to that package. (#3352)v1.11.0
: /v0.32.3Compare Source
Retracts the
v0.32.2
version ofgo.opentelemetry.io/otel/exporters/otlpmetric/otlpmetricgrpc
andgo.opentelemetry.io/otel/exporters/otlpmetric/otlpmetrichttp
given they include unresolvable dependencies.Added
go.opentelemetry.io/otel/exporters/otlptrace/otlptracegrpc
andgo.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)golang.org/x/sys/unix
fromv0.0.0-20210423185535-09eb48e85fd7
tov0.0.0-20220919091848-fb04ddd9f9c8
. This addresses GO-2022-0493. (#3235)v1.10.0
Compare Source
Added
Changed
SpanKind
in OpenTracing bridge (go.opentelemetry.io/otel/bridge/opentracing
). (#3096)context
will no longer cause a panic. (#3110)v1.9.0
: /v0.0.3Compare Source
Added
go.opentelemetry.io/otel/schema/v1.1
package. (#2999)go.opentelemetry.io/otel/semconv/v1.11.0
package. The package contains semantic conventions from thev1.11.0
version of the OpenTelemetry specification. (#3009)go.opentelemetry.io/otel/semconv/v1.12.0
package. The package contains semantic conventions from thev1.12.0
version of the OpenTelemetry specification. (#3010)http.method
attribute to HTTP server metric from allgo.opentelemetry.io/otel/semconv/*
packages. (#3018)Fixed
go.opentelemetry.io/otel/bridge/opentracing
package. (#3029)v1.8.0
: /v0.31.0Compare Source
1.8.0/0.31.0 - 2022-07-08
Added
opentracing.TextMap
format in theInject
andExtract
methods of the"go.opentelemetry.io/otel/bridge/opentracing".BridgeTracer
type. (#2911)Changed
crosslink
make target has been updated to use thego.opentelemetry.io/build-tools/crosslink
package. (#2886)go.opentelemetry.io/otel/sdk/instrumentation
package renameLibrary
toScope
and aliasLibrary
asScope
(#2976)nonrecording
tometric
package. (#2866)Removed
Deprecated
Library
struct in thego.opentelemetry.io/otel/sdk/instrumentation
package is deprecated. Use the equivalentScope
struct instead. (#2977)ReadOnlySpan.InstrumentationLibrary
method from thego.opentelemetry.io/otel/sdk/trace
package is deprecated. Use the equivalentReadOnlySpan.InstrumentationScope
method instead. (#2977)v1.7.0
: /v0.30.0Compare Source
Added
go.opentelemetry.io/otel/semconv/v1.8.0
package. The package contains semantic conventions from thev1.8.0
version of the OpenTelemetry specification. (#2763)go.opentelemetry.io/otel/semconv/v1.9.0
package. The package contains semantic conventions from thev1.9.0
version of the OpenTelemetry specification. (#2792)go.opentelemetry.io/otel/semconv/v1.10.0
package. The package contains semantic conventions from thev1.10.0
version of the OpenTelemetry specification. (#2842)Fixed
testing
package in non-tests builds of thego.opentelemetry.io/otel
package. (#2786)Changed
WithLabelEncoder
option from thego.opentelemetry.io/otel/exporters/stdout/stdoutmetric
package is renamed toWithAttributeEncoder
. (#2790)LabelFilterSelector
interface fromgo.opentelemetry.io/otel/sdk/metric/processor/reducer
is renamed toAttributeFilterSelector
. The method included in the renamed interface also changed fromLabelFilterFor
toAttributeFilterFor
. (#2790)Metadata.Labels
method from thego.opentelemetry.io/otel/sdk/metric/export
package is renamed toMetadata.Attributes
. Consequentially, theRecord
type from the same package also has had the embedded method renamed. (#2790)Deprecated
Iterator.Label
method in thego.opentelemetry.io/otel/attribute
package is deprecated. Use the equivalentIterator.Attribute
method instead. (#2790)Iterator.IndexedLabel
method in thego.opentelemetry.io/otel/attribute
package is deprecated. Use the equivalentIterator.IndexedAttribute
method instead. (#2790)MergeIterator.Label
method in thego.opentelemetry.io/otel/attribute
package is deprecated. Use the equivalentMergeIterator.Attribute
method instead. (#2790)Removed
Batch
type from thego.opentelemetry.io/otel/sdk/metric/metrictest
package. (#2864)Measurement
type from thego.opentelemetry.io/otel/sdk/metric/metrictest
package. (#2864)v1.6.3
Compare Source
Fixed
MeterProvider
,TracerProvider
, andTextMapPropagator
types to be set. (#2772, #2773)v1.6.2
Compare Source
1.6.2 - 2022-04-06
Changed
go.opentelemetry.io/proto/otlp
ingo.opentelemetry.io/otel/exporters/otlp/otlptrace
fromv0.12.1
tov0.15.0
. This replaces the use of the now deprecatedInstrumentationLibrary
andInstrumentationLibrarySpans
types and fields in the proto library with the equivalentInstrumentationScope
andScopeSpans
. (#2748)v1.6.1
Compare Source
Fixed
go.opentelemetry.io/otel/schema/*
packages now use the correct schema URL for theirSchemaURL
constant. Instead of using"https://opentelemetry.io/schemas/v<version>"
they now use the correct URL without av
prefix,"https://opentelemetry.io/schemas/<version>"
. (#2743, #2744)Security
go.opentelemetry.io/proto/otlp
fromv0.12.0
tov0.12.1
. This includes an indirect upgrade ofgithub.com/grpc-ecosystem/grpc-gateway
which resolves a vulnerability fromgopkg.in/yaml.v2
in versionv2.2.3
. (#2724, #2728)v1.6.0
: /v0.28.0Compare 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
sdk/metric/aggregator/exponential/mapping
for other OpenTelemetry projects to take dependencies on. (#2502)OTEL_TRACES_SAMPLER
andOTEL_TRACES_SAMPLER_ARG
environment variables. (#2305, #2517)metric/global
for obtaining and setting the globalMeterProvider
. (#2660)Changed
The metrics API has been significantly changed to match the revised OpenTelemetry specification. High-level changes include:
InstrumentProvider
s. TheseInstrumentProvider
s are managed with aMeter
.Meter
.Be sure to check out the metric module documentation for more information on how to use the revised API. (#2587, #2660)
Fixed
v1.5.0
Compare Source
Added
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.gc
runtime name togo
(#2560)AttributeValueLengthLimit
field is added to the"go.opentelemetry.io/otel/sdk/trace".SpanLimits
type to configure this limit for aTracerProvider
. The default limit for this resource is "unlimited". (#2637)WithRawSpanLimits
option togo.opentelemetry.io/otel/sdk/trace
. This option replaces theWithSpanLimits
option. Zero or negative values will not be changed to the default value likeWithSpanLimits
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 usingNewSpanLimits
and updated accordingly. (#2637)Changed
Member
when capacity is reached. (#2592)oltptrace
exporter. (#2601)otlpmetric
andotlptrace
configuration. (#2639)sdk/trace.BatchSpanProcessor
to reflect the count is cumulative. (#2640)envconfig
package for OTLP exporters. (#2608)http.Request.Host
is empty, fall back to useURL.Host
when populatinghttp.host
in thesemconv
packages. (#2661)Fixed
4318
instead of4317
for theotlpmetrichttp
andotlptracehttp
client. (#2614, #2625)Deprecated
"go.opentelemetry.io/otel/sdk/trace".WithSpanLimits
. UseWithRawSpanLimits
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
BatchSpanProcessor
. (#2615)v1.4.0
: /v0.27.0Compare Source
Added
OTEL_EXPORTER_ZIPKIN_ENDPOINT
environment variable to specify zipkin collector endpoint. (#2490)TracerProvider
s, andTracer
s for debugging. To enable use a logger with Verbosity (V level)>=1
. (#2500)OTEL_BSP_SCHEDULE_DELAY
OTEL_BSP_EXPORT_TIMEOUT
OTEL_BSP_MAX_QUEUE_SIZE
.OTEL_BSP_MAX_EXPORT_BATCH_SIZE
Changed
Resource
attributes in theTags
field. (#2589)Deprecated
go.opentelemetry.io/otel/sdk/export/metric
. Use thego.opentelemetry.io/otel/sdk/metric
module instead. (#2382)"go.opentelemetry.io/otel/sdk/metric".AtomicFieldOffsets
. (#2445)Fixed
otlpmetric.Client
interface'sUploadMetrics
method to accept a singleResourceMetrics
instead of a slice of them. (#2491)+inf
bucket. (#2419, #2493)NewMember
and not also when adding it to the baggage itself. (#2522)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
go.opentelemetry.io/proto/otlp
fromv0.11.0
tov0.12.0
. This version removes a number of deprecated methods. (#2546)Metric.GetIntGauge()
Metric.GetIntHistogram()
Metric.GetIntSum()
v1.3.0
: /v0.26.0Compare Source
⚠️ Notice ⚠️
We have updated the project minimum supported Go version to 1.16
Added
WithRetry
Option
and theRetryConfig
type to thego.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp
package to specify retry behavior consistently. (#2425)SpanStatusFromHTTPStatusCodeAndSpanKind
to allsemconv
packages to return a span status code similar toSpanStatusFromHTTPStatusCode
, but exclude4XX
HTTP errors as span errors if the span is of server kind. (#2296)Changed
"go.opentelemetry.io/otel/exporter/otel/otlptrace/otlptracegrpc".Client
now uses the underlying gRPCClientConn
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)"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetricgrpc".Client
now uses the underlying gRPCClientConn
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)"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetricgrpc".RetrySettings
type is renamed toRetryConfig
. (#2425)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 andWithInsecure
is not specified. (#2432)resource.Default
to be evaluated the first time it is called, rather than on import. This allows the caller the option to updateOTEL_RESOURCE_ATTRIBUTES
first, such as withos.Setenv
. (#2371)Fixed
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 anOTEL_EXPORTER_OTLP_<signal>_ENDPOINT
environment variable is now used without modification of the path. WhenOTEL_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)go.opentelemetry.io/otel/exporter/jaeger
correctly sets theotel.status_code
value to be a string ofERROR
orOK
instead of an integer code. (#2439, #2440)Deprecated
"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp".WithMaxAttempts
Option
, use the newWithRetry
Option
instead. (#2425)"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp".WithBackoff
Option
, use the newWithRetry
Option
instead. (#2425)Removed
v1.2.0
: /v0.25.0Compare Source
Changed
export.ExportKind
,export.ExportKindSelector
types have been renamed toaggregation.Temporality
andaggregation.TemporalitySelector
respectively to keep in line with current specification and protocol along with built-in selectors (e.g.,aggregation.CumulativeTemporalitySelector
, ...). (#2274)Exporter
interface now requires aTemporalitySelector
method instead of anExportKindSelector
. (#2274)metric/sdkapi
package has been created to relocate the API-to-SDK interface:metric
tometric/sdkapi
:Descriptor
,MeterImpl
,InstrumentImpl
,SyncImpl
,BoundSyncImpl
,AsyncImpl
,AsyncRunner
,AsyncSingleRunner
, andAsyncBatchRunner
Observation
,Measurement
.sdkapi.NewNoopAsyncInstrument()
andsdkapi.NewNoopSyncInstrument()
are provided instead. (#2271)BatchSpanProcessor
to export all queued spans whenForceFlush
is called. (#2080, #2335)Added
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc".WithGRPCConn
option so the exporter can reuse an existing gRPC connection. (#2002)schema
module to help parse Schema Files in OTEP 0152 format. (#2267)MapCarrier
to thego.opentelemetry.io/otel/propagation
package to hold propagated coss-cutting concerns as amap[string]string
held in memory. (#2334)v1.1.0
Compare Source
Added
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc".WithGRPCConn
option so the exporter can reuse an existing gRPC connection. (#2002)go.opentelemetry.io/otel/semconv/v1.7.0
package. The package contains semantic conventions from thev1.7.0
version of the OpenTelemetry specification. (#2320)go.opentelemetry.io/otel/semconv/v1.6.1
package. The package contains semantic conventions from thev1.6.1
version of the OpenTelemetry specification. (#2321)go.opentelemetry.io/otel/semconv/v1.5.0
package. The package contains semantic conventions from thev1.5.0
version of the OpenTelemetry specification. (#2322)semconv/v1.4.0
package note the following name changes:K8SReplicasetUIDKey
->K8SReplicaSetUIDKey
K8SReplicasetNameKey
->K8SReplicaSetNameKey
K8SStatefulsetUIDKey
->K8SStatefulSetUIDKey
k8SStatefulsetNameKey
->K8SStatefulSetNameKey
K8SDaemonsetUIDKey
->K8SDaemonSetUIDKey
K8SDaemonsetNameKey
->K8SDaemonSetNameKey
Changed
Fixed
"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 theX-Forwarded-For
header. (#2282, #2284)"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)v1.0.1
: /Metrics v0.24.0Compare Source
1.0.1 - 2021-10-01
Fixed
Metrics 0.24.0 - 2021-10-01
Changed
Export()
function takes a new two-level reader interface for iterating over results one instrumentation library at a time. (#2197)"go.opentelemetry.io/otel/sdk/export/metric".CheckpointSet
is renamedReader
."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
Fixed
Removed
"go.opentelemetry.io/otel/exporters/zipkin".WithSDKOptions
function. (#2248)go.opentelemetry.io/otel/oteltest
. (#2234)go.opentelemetry.io/otel/bridge/opencensus/utils
. (#2233)go.opentelemetry.io/otel/attribute
package. Use the typed functions and methods added to the package instead. (#2235)Key.Array
method is removed.Array
function is removed.Any
function is removed.ArrayValue
function is removed.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.
This PR has been generated by Mend Renovate. View repository job log here.
deps: update module k8s.io/component-helpers to v0.26.0
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.
This PR has been generated by Mend Renovate. View repository job log here.
deps: update module github.com/onsi/ginkgo/v2 to v2.6.1
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
60240d1
]Fixes
301f3e2
]Maintenance
3643823
]f9f856e
]0d7087e
]v2.6.0
Compare Source
2.6.0
Features
ReportBeforeSuite
provides access to the suite report before the suite begins.956e6d2
]de44005
]Fixes
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.
This PR has been generated by Mend Renovate. View repository job log here.
deps: update module github.com/onsi/gomega to v1.24.2
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
78f1660
]3187c1f
]808d192
]Maintenance
6ebc0bf
]258cfc8
]e6c3eb9
]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.
This PR has been generated by Mend Renovate. View repository job log here.
deps: update module k8s.io/kubernetes to v1.26.0
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.0Compare 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.
This PR has been generated by Mend Renovate. View repository job log here.
deps: update jasonetco/create-an-issue action to v2.9.1
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
andabout
) 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.
This PR has been generated by Mend Renovate. View repository job log here.
deps: update jasonetco/create-an-issue action to v2.8.2
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.
This PR has been generated by Mend Renovate. View repository job log here.
ci: fix renovate config
This PR
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:
datadog.go
file in theproviders
folder that contains the integration logicReference
The Prometheus and Dynatrace integrations can be used as a reference.
chore(operator): fix linter issues
Signed-off-by: odubajDT [email protected]
Fixes: #485
TaskStatus
+EvaluationStatus
and useItemStatus
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.deps: update dependency kubernetes-sigs/controller-tools to v0.11.1
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.
This PR has been generated by Mend Renovate. View repository job log here.