Release Notes 0.10.0
Keptn 0.10.0 provides a native way for integrating your tooling by just calling their Webhooks. This is a great enabler for various delivery and operational use cases that can be implemented without writing custom code. Just two steps and your tool is integrated: (1) define the sequence task that works as a trigger (2) define the HTTP request endpoint and payload of the Webhook:
Key announcements:
đ Seamless integration of DevOps landscape using Webhooks: This release is a major step towards the seamless integration of DevOps tooling for your continuous delivery or operational use cases. Therefore, Keptn 0.10 ships a webhook-service with Keptn core that allows the call of external tools using HTTP. To customize this HTTP request, the Bridge provides the corresponding interface and the secret management has been extended in this regard.
â Create/Delete a service via Bridge: Next to the Webhook configuration, the Bridge allows creating and deleting a service.
đ Our new integrations page got a facelift a let's you explore and search available Keptn integrations. All powered by the ArtifactHub.
âšī¸ Keptn provides an internal Git repository for each Keptn project regardless of whether a Git upstream is configured. This internal Git repository will become deprecated in an upcoming Keptn release; more detail will follow. Consequently, it is recommended to set a Git upstream to your own, publically accessible Git repository today. Therefore, use the Keptn CLI or Bridge. If there are specific requirements to connect to an own repository, please reach out on Slack: keptn.slack.com
Keptn Enhancement Proposals
This release implements the KEPs: KEP 61 and parts of KEP 48, KEP 53, and KEP 54
Keptn Specification
Implemented Keptn spec version: 0.2.3
New Features
Keptn Core
-
configuration-service:
- Deprecated: GET default resources endpoints:
/project/{projectName}/service/{serviceName}/resource
#5443 - Make sure upstream changes are pulled when updating upstream creds #5224
- Implemented endpoints for deleting service and stage resources #5145
- Handle error and use dedicated HTTP error code when failing to update project due to wrong token #5438
- Fall back to previous git credentials when updating upstream fails #5171
- Fix updating upstream to uninitialized repo #5569
- Deprecated: GET default resources endpoints:
-
distributor:
- Ensure that the subscriptionId is passed to the event #5412
- Pass along subscriptionId to service implementation #5374
- Exclusive message processing for multiple distributors #5249
- Only interpret events with status=errored as error logs #5186
- Hardening of ce cache #5736
- Fixed: Leaking go routines in forwarder.go #5404
- Fixed: Fails when having no initial PubSub topic defined #5230
- Fixed: Potential timing issue in distributor unit tests #5538
- fixed: Send event once for each matching subscription #5681
-
helm-service:
-
jmeter-service:
-
lighthouse-service:
-
mongodb-datastore:
-
remediation-service:
- Adapt to recent changes in go SDK #5464
-
shipyard-controller:
- Allow to abort queued sequences #5472
- Reduce log noise for sequence watcher component #5458
- Remove log noise in sequence migrator #5096
- More robust handling of multiple
.started
/.finished
events for the same task at the same time #5440 - Adapted sequence state representation when sequence can not be started #5194
- Return proper error message in case project is not available #5231
- Return error if a sequence for an unavailable stage is triggered #5069
- Adapted log output when no queued sequence is found #5167
- Adapted HTTP status codes of GET /event endpoint #5134
- Avoid endless loop #5124
- Clean up list of open
.triggered
events when completing a sequence #5601 - Correctly handle time format in evaluation manager #5633
- Ensure list of open
.triggered
events is cleaned up when deleting project #5502 - Use timestamp of incoming events to queue sequences #5620
- Check for existence of stages in shipyard.yaml when creating a project #5774
- Fixed: Dependency incompatibilities #5127
- Fixed: Evaluation score should be computed based only on lighthouse events #5640
-
secret-service:
-
webhook-service:
- Introduced webhook-service in Keptn core #4938
- Additional curl command validation to increase security #5500
- Allow to disable sending the finished event in the webhook-service #5418
- Filter Webhooks based on received subscription ID #5392
- Allow to control if webhook-service is installed #5574
- Add required scope to secret created for webhook integration test #5594
- Allow to control if the webhook-service is installed #5556
Bridge
-
Enhancements:
- Initial integration tests #5360
- Make session cookie timeout configurable and set default value to 60 minutes #5455
- Align the way how sequence states are displayed #5376
- Evaluation board only updates if there are new evaluations #5396
- Create secret with scope selection #5388
- Set latest sequence depending on the latest event #5148
- Include time zone for
trigger evaluation
command #5398 - Handle incorrect remediation sequences #5383
- Remove HeatMap selection if deployment-sequence does not have an evaluation #4636
- Show a gray thick border when a running sequence is selected #5141
- Configure webhook-service in Bridge #4750
- Load sequence with more than 100 events correctly #5308
- Show proper error messages if not OAuth is configured and prevent login loop #5086
- Grouping sequence after pause #5275
- Show list of files and link to git repo per stage for a service #5193
- Set empty array when open remediations are not a sequence #5217
- Delete a service #4380
- Create a service #4500
- Show loading bar only on initial data fetch #4910 #5586
- Show loading indicator in environment screen until data is fetched #5417
- Show payload of last event in subscription configuration #5585
- Make all project tiles same height #5577
- Tooltips for heatmap #4523
- Dynamically set SLI button positions #5416
- Support also clone urls for creating the git repo link #5391
- Update webhook with right subscription property, fix stuck subscription update #5582
- Heatmap did not correctly change on stage change #5578
- Allow multiple webhooks with same subscription configuration #5267
- Add secrets to webhook configuration #4751
- Validate secret name length #5478
- Add ability to configure feature flags #5211
-
Refactoring:
-
Fixes:
- 'Show SLO' button disappeared after loading evaluation results #5393
- Project settings page styles#5444
- Task retrieval if shipyard does not contain any sequences #5409
- Shipyard file selection, if the same file was chosen again #5380
- Redirect to login page if OAuth is configured #5370
- Fixed missing update on sequence screen #5085
- Fixed error if sequence was not found #5172
- Project delete dialog was not closed #5091
- Polling of a project did not stop #5094
- Faded-out integrations were not excluded from unread-error-event check #5118
- Redirect to service or sequence did not work on dashboard #5126
- Project delete dialog was not closed #5091
- Faded-out integrations where not excluded from unread-error-event check #5118
- Fixed SLI compared value #5460
- Fixed missing view updates when sending an approval #5505
- Service incorrectly shows that there are open remediations #5688
- Catch error only in interceptor and show toast #5213
Platform Support / Installer
- Temporarily revert customization of repository string in chart #5414
- Add option for Ingress to control-plane Helm Chart Keptn installer #5066
- Use correct images in airgapped installation #5532
- Bump nginx image version to 1.21.3-alpine #5564
- Fix bug where OpenShift route service go-utils were not upgraded during auto upgrade
CLI
- Added zones to times format according to (ISO8601) #4788
- Check if kubectl context matches Keptn CLI context before applying upgrade #5250
- Skip version check on install #5046
- Remove the upgrade available message while upgrading Keptn #5276
- Configure automatic version check based on config #5290
- Option to continue install/upgrade if K8s version is higher than the supported one #5698
API
- Try to use X-real-ip and X-forwarded-for headers #5082
- Fixed broken go-sum in go-sdk module #5463
- Option to disable automatic event response in SDK #5453
Development Process / Testing
- Fixed paths in commit messages #5451
- Fixed integration tests #5390
- Added retry mechanism for creating projects in integration tests #5253
- Updated go-dependencies in integration tests #5205
- Add disclamer to avoid security vulnerabilities to be reported reported as bugs #5169
- Update Maintainers file #5314
Good to know / Known Limitations
- Aborting a pending deployment sequence in helm-service leads to failure until the aborted sequence finally finishes #5557
- The following characters/strings are forbidden in the WebHook payload:
$
,|
,;
,>
,$(
,&
,&&
, `,/var/run
Upgrade to 0.10.0
- The upgrade from 0.9.x to 0.10.0 is supported by the
keptn upgrade
command. Find the documentation here: Upgrade from Keptn 0.9.x to 0.10.0
CI Information
- BUILD 0.10.0 ON release-0.10.0
- DATETIME: 202110080759
- GIT_SHA: b517b95
- ACTION RUN: https://github.com/keptn/keptn/actions/runs/1319858993
Integration Tests
Integration Tests have finished.
Target Platform | Keptn Install | Keptn Auth | Airgapped Images | Linking Stages | Uniform Registration | Log Ingestion | Log Forwarding | Sequence States | Sequence Timeout | Sequence Control | Sequence Queue | Sequence Loop | QG Standalone | QG Backwards Compat. | Self Healing | Del-Assist | User-Man. Depl. | Cont Deliv | Cont Deliv (Remote Exec) | Manage secrets | Webhook integration |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kubernetes/GKE 1.19 | success | success | skipped | success | success | success | success | success | success | success | success | success | success | success | success | success | success | skipped | failure | success | failure |
kubernetes/GKE 1.21 | success | success | skipped | success | success | success | success | success | success | success | success | success | success | success | success | success | success | failure | skipped | success | failure |
kubernetes/k3d-on-GHA v4.4.6 | success | success | success | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped |
kubernetes/k3s-on-GHA v1.16.15+k3s1 | success | success | skipped | success | success | success | success | success | success | success | success | success | success | success | success | skipped | skipped | skipped | skipped | success | failure |
kubernetes/k3s-on-GHA v1.21.1+k3s1 | success | success | skipped | success | success | success | success | success | success | success | success | success | success | success | success | skipped | skipped | skipped | skipped | success | failure |
openshift/minishift-on-GHA 3.11 | success | success | skipped | success | skipped | success | success | success | success | success | success | success | skipped | skipped | success | skipped | skipped | skipped | skipped | success | failure |
Kubernetes Resource Data
Resource Limits
Resource Limits for kubernetes-GKE
Pod | Container | Memory (requested) | CPU (requested) | Memory (limit) | CPU (limit) | Images |
---|---|---|---|---|---|---|
api-gateway-nginx | api-gateway-nginx | 64Mi | 50m | 128Mi | 100m | docker.io/nginxinc/nginx-unprivileged:1.21.3-alpine |
api-service | api-service | 32Mi | 50m | 64Mi | 100m | docker.io/keptn/api:0.10.0 |
api-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
approval-service | approval-service | 32Mi | 25m | 128Mi | 100m | docker.io/keptn/approval-service:0.10.0 |
approval-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
bridge | bridge | 64Mi | 25m | 128Mi | 200m | docker.io/keptn/bridge2:0.10.0 |
configuration-service | configuration-service | 32Mi | 25m | 64Mi | 100m | docker.io/keptn/configuration-service:0.10.0 |
helm-service | helm-service | 128Mi | 50m | 512Mi | 1 | docker.io/keptn/helm-service:0.10.0 |
helm-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
jmeter-service | jmeter-service | 128Mi | 100m | - | - | docker.io/keptn/jmeter-service:0.10.0 |
jmeter-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
lighthouse-service | lighthouse-service | 128Mi | 50m | 1Gi | 200m | docker.io/keptn/lighthouse-service:0.10.0 |
lighthouse-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
mongodb | mongodb | 64Mi | 50m | 512Mi | 200m | docker.io/centos/mongodb-36-centos7:1 |
mongodb-datastore | mongodb-datastore | 32Mi | 50m | 512Mi | 300m | docker.io/keptn/mongodb-datastore:0.10.0 |
mongodb-datastore | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
remediation-service | remediation-service | 64Mi | 50m | 1Gi | 200m | docker.io/keptn/remediation-service:0.10.0 |
remediation-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
secret-service | secret-service | 32Mi | 25m | 64Mi | 200m | docker.io/keptn/secret-service:0.10.0 |
shipyard-controller | shipyard-controller | 32Mi | 50m | 128Mi | 100m | docker.io/keptn/shipyard-controller:0.10.0 |
shipyard-controller | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
statistics-service | statistics-service | 32Mi | 25m | 64Mi | 100m | docker.io/keptn/statistics-service:0.10.0 |
statistics-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
webhook-service | webhook-service | 32Mi | 25m | 64Mi | 100m | docker.io/keptn/webhook-service:0.10.0 |
webhook-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
Summary (whole cluster):
$ kubectl describe node | grep -A5 "Allocated"
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 933m (23%) 1800m (45%)
memory 794Mi (6%) 2618Mi (21%)
--
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 663m (16%) 4 (102%)
memory 1010341504 (7%) 4616Mi (37%)
--
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1181m (30%) 343m (8%)
memory 2739Mi (22%) 1341Mi (10%)
Please note: Depending on the setup, the above includes usage for Istio aswell as the Kubernetes control-plane
Name | Size |
---|---|
configuration-volume | 100Mi |
mongodata | 5Gi |
Resource Limits for openshift-minishift-on-GHA
Pod | Container | Memory (requested) | CPU (requested) | Memory (limit) | CPU (limit) | Images |
---|---|---|---|---|---|---|
api-gateway-nginx | api-gateway-nginx | 64Mi | 50m | 128Mi | 100m | docker.io/nginxinc/nginx-unprivileged:1.21.3-alpine |
api-service | api-service | 32Mi | 50m | 64Mi | 100m | docker.io/keptn/api:0.10.0 |
api-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
approval-service | approval-service | 32Mi | 25m | 128Mi | 100m | docker.io/keptn/approval-service:0.10.0 |
approval-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
bridge | bridge | 64Mi | 25m | 128Mi | 200m | docker.io/keptn/bridge2:0.10.0 |
configuration-service | configuration-service | 32Mi | 25m | 64Mi | 100m | docker.io/keptn/configuration-service:0.10.0 |
lighthouse-service | lighthouse-service | 128Mi | 50m | 1Gi | 200m | docker.io/keptn/lighthouse-service:0.10.0 |
lighthouse-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
mongodb | mongodb | 64Mi | 50m | 512Mi | 200m | docker.io/centos/mongodb-36-centos7:1 |
mongodb-datastore | mongodb-datastore | 32Mi | 50m | 512Mi | 300m | docker.io/keptn/mongodb-datastore:0.10.0 |
mongodb-datastore | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
remediation-service | remediation-service | 64Mi | 50m | 1Gi | 200m | docker.io/keptn/remediation-service:0.10.0 |
remediation-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
secret-service | secret-service | 32Mi | 25m | 64Mi | 200m | docker.io/keptn/secret-service:0.10.0 |
shipyard-controller | shipyard-controller | 32Mi | 50m | 128Mi | 100m | docker.io/keptn/shipyard-controller:0.10.0 |
shipyard-controller | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
statistics-service | statistics-service | 32Mi | 25m | 64Mi | 100m | docker.io/keptn/statistics-service:0.10.0 |
statistics-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
webhook-service | webhook-service | 32Mi | 25m | 64Mi | 100m | docker.io/keptn/webhook-service:0.10.0 |
webhook-service | distributor | 16Mi | 25m | 32Mi | 100m | docker.io/keptn/distributor:0.10.0 |
Summary (whole cluster):
$ kubectl describe node | grep -A5 "Allocated"
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1 (50%) 2800m (140%)
memory 1380Mi (20%) 4160Mi (60%)
Please note: Depending on the setup, the above includes usage for Istio aswell as the Kubernetes control-plane
Name | Size |
---|---|
configuration-volume | 100Mi |
mongodata | 5Gi |