Keptn - Kubernetes
Keptn Tasks running on a Kubernetes cluster can be triggered for workloads and applications that are deployed outside of Kubernetes. For example, Keptn could trigger load and performance tests for an application that is deployed on a virtual machine.
To do this:
- Install Keptn on a Kubernetes cluster
- Create a KeptnTaskDefinition
- Create and apply a KeptnTask
- Re-run the KeptnTask
Install Keptn on a Kubernetes cluster
You must set up a Kubernetes cluster and
install
Keptn on it,
but this can be a very lightweight, single-node KinD cluster; see
Create local Kubernetes cluster.
Keptn only triggers on-demand KeptnTask resources
so resource utilization is minimal.
Create a KeptnTaskDefinition
When you have Keptn installed, create a
YAML file that defines what you want to execute
as a KeptnTaskDefinition resource.
See
Deployment tasks
and the
KeptnTaskDefinition
reference page for more information.
For example, you might create a test-task-definition.yaml file
with the following content:
apiVersion: lifecycle.keptn.sh/v1alpha3
kind: KeptnTaskDefinition
metadata:
name: helloworldtask
spec:
retries: 0
timeout: 30s
container:
name: cowsay
image: rancher/cowsay:latest
args:
- 'hello world'
This example uses the container-runtime runner,
but you can instead use the deno-runtime or python-runtime runner.
See
Runners and containers
for more information.
Create and apply a KeptnTask
You must manually create the
KeptnTask resource.
In the standard operating mode, when Keptn is managing workloads,
the creation of the KeptnTask resource is automatic.
Moreover, each time you want to execute a KeptnTask,
you must manually create a new (and uniquely named) KeptnTask resource.
The KeptnTask resource references the KeptnTaskDefinition
that you created above
in the spec.taskDefinition field.
For example, you might create a test-task.yaml file
with the following content:
apiVersion: lifecycle.keptn.sh/v1alpha3
kind: KeptnTask
metadata:
name: runhelloworld1
spec:
taskDefinition: helloworldtask
context:
appName: "my-app"
appVersion: "1.0.0"
objectType: ""
taskType: ""
workloadName: "my-workload"
workloadVersion: "1.0.0"
You can then apply this YAML file with the following command:
kubectl apply -f test-task.yaml -n my-keptn-annotated-namespace
Applying this file causes Keptn to create a Job and a Pod
and run the executables defined
in the associated KeptnTaskDefinition resource.
Use the following commands to show the current status of the jobs:
kubectl get keptntasks -n my-keptn-annotated-namespace
kubectl get pods -n my-keptn-annotated-namespace
Re-run the KeptnTask
For subsequent KeptnTask runs,
the KeptnTask name and version fields must be unique,
so copy the KeptnTask yaml file you have and update the
metadata.name field.
A standard practice is to just increment the value of the suffix field.
For example, you could create a test-task-2.yaml file
with the metadata.name field set to runhelloworld2:
apiVersion: lifecycle.keptn.sh/v1alpha3
kind: KeptnTask
metadata:
name: runhelloworld2
spec:
taskDefinition: helloworldtask
context:
appName: "my-app"
appVersion: "1.0.1"
objectType: ""
taskType: ""
workloadName: "my-workload"
workloadVersion: "1.0.1"
You can then apply this file with the following command:
kubectl apply -f test-task-2.yaml -n my-keptn-annotated-namespace