step-observe-controller

module
v0.0.0-...-d13c728 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2020 License: Apache-2.0

README

tekton-step-observer

Observer plugin to emit CloudEvents at step execution level for Tekton

Caution

The purpose of this controller is to explore/share  
more use cases to consume CloudEvents at step execution level.
The author does not assume any production/development environment nor pushing to the upstream.

Installation

tekton-step-observer requires TektonCD Pipeline on your Kubernetes cluster. Plus, you need a build tool ko.

For installation, after TektonCD Pipeline installed, run:

ko apply -f config

then ko starts build and deploy the resources to the cluster.

For uninstallation, run:

kubectl delete -f config

then all resources gets removed from the cluster. Note that this is a "plugin", hence no effect on TektonCD Pipelines.

Concept

This plugin creates a controller to watch TaskRun, then send CloudEvents to the read default-cloud-event-sink when it detects a change of state of each step.

Supported CloudEvents event type are:

tom24d.event.plugin.step.started.v1  
tom24d.event.plugin.step.failed.v1
tom24d.event.plugin.step.succeeded.v1
tom24d.event.plugin.step.skipped.v1

When it detects the state for any emission, it gathers its corresponding defined information such as v1beta1.Step, v1beta1.StepState, PodReference and log of the step.

The controller updates TaskRun resource to save its emission state for each event in metadata.annotation.

Although identity of each CloudEvent is always guaranteed in CloudEvent ID attribute,
sometimes duplication of event emission occurs due to known issue#8.


Appendix

tekton-step-observer uses knative/pkg for its infrastructure to compose a basis of kubernetes controller.
They provide several metrics such as reconciliation count, time, etc. For measuring any affection on reconciliation, the config/monitoring directory contains Prometheus Scrape config.

The example of CloudEvent is:

 ☁️  cloudevents.Event
 Validation: valid
 Context Attributes,
   specversion: 1.0
   type: tom24d.event.plugin.step.succeeded.v1
   source: github.com/tom24d/step-observe-controller
   id: 50df8d70-8c11-4cd4-8fdf-3aa4cb287408-unnamed-0-tom24d.event.plugin.step.succeeded.v1
   time: 2020-08-12T12:07:54Z
   datacontenttype: application/json
 Data,
   {
     "podRef": {
       "kind": "Pod",
       "namespace": "test-event-assertion-success-fail-skip-skip-in-memory-chan7f5q7",
       "name": "e2e-test-step-observed-run-pod-wrpkl",
       "apiVersion": "v1"
     },
     "log": "hello1\n",
     "step": {
       "name": "",
       "image": "busybox@sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649",
       "command": [
         "/bin/sh"
       ],
       "args": [
         "-c",
         "echo hello1"
       ],
       "resources": {}
     },
     "stepState": {
       "terminated": {
         "exitCode": 0,
         "reason": "Completed",
         "startedAt": "2020-08-12T12:07:54Z",
         "finishedAt": "2020-08-12T12:07:54Z",
         "containerID": "containerd://3548dcaf6287d647cbd775d9de6488e2024cbb8f436f71f78a1e4e8bab0eece5"
       },
       "name": "unnamed-0",
       "container": "step-unnamed-0",
       "imageID": "docker.io/library/busybox@sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649"
     }
   }

Initial idea come from JBoss Community proposal
This work is a part of Google Summer of Code 2020

Directories

Path Synopsis
cmd
pkg
Get access to client objects
Get access to client objects

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL