Setting up tekton pipelines on k8s
To install Tekton Pipelines on a Kubernetes cluster:
- Run one of the following commands depending on which version of Tekton Pipelines you want to install:
- Latest official release:
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
- Specific release:
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/previous/<version_number>/release.yaml
Replace <version_number> with the numbered version you want to install. For example, v0.28.2
- Monitor the installation:
kubectl get pods --namespace tekton-pipelines --watch
When all components show 1/1 under the READY column, the installation is complete. Hit Ctrl + C to stop monitoring.
After you can see the complete resource by running below command.
kubectl get all -n tekton-pipelines
The result looks like
Before starting trace testing, you need to setup the tracetest server on kubernetes.
For the tracetest server installation please follow the setting up tracetest document from intelops website learning center.
Creating Docker image for Tracetest CLI
In our Tekton task for Tracetest, we will create a custom Docker image that includes the Tracetest CLI, which we have installed beforehand.
You have the flexibility to either use the provided Dockerfile to set up your own Tracetest CLI image or utilize Intelops’ pre-built Tracetest image within your Tekton task.
Dockerfile
FROM cgr.dev/chainguard/wolfi-base as build
RUN apk update && apk add curl bash
RUN curl -L https://raw.githubusercontent.com/kubeshop/tracetest/main/install-cli.sh | bash
RUN chmod 755 /tmp/tracetest
FROM cgr.dev/chainguard/wolfi-base
COPY --from=build /tmp/tracetest /usr/bin/tracetest
ENTRYPOINT ["/bin/bash -l"]
Getting started with Tracetest
- We need Microservice with OTEL instrumented.
- Deploy the Microservice in K8s.
- Check the traces in data source like Grafana tempo or Jaeger.
- Define your tracetest definition file to test the microservice.
Here is an example definition file test.yaml which I deployed my NodeJS app into K8s.
type: Test
spec:
name: otempo-post-req
description: post req test
trigger:
type: http
httpRequest:
url: http://otempo-service.default.svc.cluster.local:8080/items
method: POST
headers:
- key: Content-Type
value: application/json
body: |2-
{
"name": "user-name",
"description": "to test the NodeJS app",
"price": 98
}
specs:
- selector: span[name = "POST /items"]
assertions:
- attr:tracetest.span.duration <= 500ms
- attr:http.status_code = 201
outputs:
- name: USER_TEST_ID
selector: span[name = "work testing post"]
value: attr:tracetest.response.body | json_path '$.id'
- Save your definition file in git repo.
- Use the below tekton task to test you Micoservice.
apiVersion: tekton.dev/v1beta1
kind: ClusterTask
metadata:
name: tracetest
spec:
params:
- name: file-name
type: string
workspaces:
- name: source
steps:
- name: tracetest
image: pradeepgoru/tracetest:latest
workingDir: $(workspaces.source.path)
script: |
sleep 20
pwd
ls -al
tracetest configure --endpoint http://tracetest.tracetest.svc.cluster.local:11633 --analytics=false
tracetest test run --definition $(params.file-name) --verbose -w
- We need a pipeline configured with git-clone and tracetest task. Here is my pipeline
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: tracetest
spec:
params:
- name: repo-url
type: string
description: The git repo URL to clone from.
- name: file-name
type: string
description: The definition file
workspaces:
- name: shared-data
description: |
This workspace contains the cloned repo files, so they can be read by the
next task.
- name: git-credentials
description: basic-auth
tasks:
- name: fetch-source
taskRef:
name: git-clone
kind: ClusterTask
workspaces:
- name: output
workspace: shared-data
- name: basic-auth
workspace: git-credentials
params:
- name: url
value: $(params.repo-url)
- name: tracetest
taskRef:
name: tracetest
kind: ClusterTask
runAfter:
- fetch-source
workspaces:
- name: source
workspace: shared-data
params:
- name: file-name
value: $(params.file-name)
Provide the necessary configurations to git-clone and then add the tracetest task in the pipeline.
Now we need configure a PipelineRun to trigger the pipeline.
Here is an example pipelinerun
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: tracetest-run
spec:
pipelineRef:
name: tracetest
podTemplate:
securityContext:
fsGroup: 65532
workspaces:
- name: shared-data
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
- name: git-credentials
secret:
secretName: basic-auth
params:
- name: repo-url
value: https://gitlab.com/intelops/definitions-files.git
- name: file-name
value: test.yaml
After run the pipeline you will find the tekton taskruns and pipelinerun succeeded and jobs in completed state.
The logs of tracetest task be like
Reference Links
Tekton Docs - Link Instrumentation - Link Tracetest Definition - Link Tracetest Github Examples - Link