Pular para o conteúdo principal

Instalação

Obviamente precisamos de um cluster kubernetes. Para estudos use o kind para montar seu cluster local. Confira a versão do kubernetes necessária para a última versão do tekton, pois atualizações das APIs do kubernetes tem impacto.

Apesar de não obrigatório o metric server é importante estar instalado para situações de alta disponibilidade. Acostume-se a sempre usá-lo no cluster. Sem ele não temos o vertical e horizontal autoscaling.

Apesar de existirem helm charts prontos para a instalação é recomendável o uso de operator.

Para estudos podemos utilizar a instalação dos manifestos com o comando abaixo.

kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

Mas é bom ir direto aprender no modo produtivo utilizando o Tekton Operator que torna mais fácil o update futuro e mudanças de configuração caso necessário.

# Install Operator Lifecycle Manager (OLM), a tool to help manage the Operators running on your cluster.
curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.28.0/install.sh | bash -s v0.28.0
# Install the operator by running the following command:
kubectl create -f https://operatorhub.io/install/tektoncd-operator.yaml
# After install, watch your operator come up using next command
kubectl get csv -n operators
NAME DISPLAY VERSION REPLACES PHASE
tektoncd-operator.v0.70.0 Tektoncd Operator 0.70.0 tektoncd-operator.v0.69.1 Pending

Conferindo o que temos no manifesto do tekton podemos editar e desativar ou ativar algumas coisas no futuro.

O profile dirá quais ferramentas serão instaladas. Se alterar o profile automaticamente o operator irá parar alguns recursos. Dê uma conferida na documentação do operator.

PlatformProfileInstalled Component
Kubernetes, OpenShiftlitePipeline
Kubernetes, OpenShiftbasicPipeline, Trigger, Chains
KubernetesallPipeline, Trigger, Chains, Dashboard
OpenShiftallPipeline, Trigger, Chains, Pipelines as Code, Addons
kubectl get -n olm tektonconfigs.operator.tekton.dev config -o yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
creationTimestamp: "2024-07-31T02:36:13Z"
finalizers:
- tektonconfigs.operator.tekton.dev
generation: 1
labels:
operator.tekton.dev/release-version: v0.70.0
name: config
resourceVersion: "1826693"
uid: 5704dc6d-d8b5-4e13-84fe-e65c035a94a2
spec:
addon: {}
chain:
disabled: false
options:
disabled: false
config: {}
dashboard:
options:
disabled: false
readonly: false
hub:
options:
disabled: false
pipeline:
await-sidecar-readiness: true
coschedule: workspaces
disable-creds-init: false
enable-api-fields: beta
enable-bundles-resolver: true
enable-cel-in-whenexpression: false
enable-cluster-resolver: true
enable-custom-tasks: true
enable-git-resolver: true
enable-hub-resolver: true
enable-param-enum: false
enable-provenance-in-status: true
enable-step-actions: false
enable-tekton-oci-bundles: false
enforce-nonfalsifiability: none
keep-pod-on-cancel: false
max-result-size: 4096
metrics.count.enable-reason: false
metrics.pipelinerun.duration-type: histogram
metrics.pipelinerun.level: pipeline
metrics.taskrun.duration-type: histogram
metrics.taskrun.level: task
options:
disabled: false
performance:
disable-ha: false
require-git-ssh-secret-known-hosts: false
results-from: termination-message
running-in-environment-with-injected-sidecars: true
send-cloudevents-for-runs: false
set-security-context: false
trusted-resources-verification-no-match-policy: ignore
platforms:
openshift: {}
profile: all # Este profile ativa todos os recursos
pruner:
disabled: false
keep: 100
resources:
- pipelinerun
schedule: 0 8 * * *
targetNamespace: tekton-pipelines
trigger:
enable-api-fields: stable
options:
disabled: false
status:
annotations:
operator.tekton.dev/post-upgrade-version: v0.70.0
operator.tekton.dev/pre-upgrade-version: v0.70.0
conditions:
- lastTransitionTime: "2024-07-31T02:37:30Z"
status: "True"
type: ComponentsReady
- lastTransitionTime: "2024-07-31T02:37:41Z"
status: "True"
type: PostInstall
- lastTransitionTime: "2024-07-31T02:37:42Z"
status: "True"
type: PostUpgrade
- lastTransitionTime: "2024-07-31T02:36:24Z"
status: "True"
type: PreInstall
- lastTransitionTime: "2024-07-31T02:36:24Z"
status: "True"
type: PreUpgrade
- lastTransitionTime: "2024-07-31T02:37:42Z"
status: "True"
type: Ready
version: v0.70.0

Ainda para um cenário produtivo não é o suficiente é necessário alguns ajustes finos. Fica como débito técnico.

Para conferir o que temos rodando.

kubectl get all -n tekton-pipelines  
NAME READY STATUS RESTARTS AGE
pod/tekton-chains-controller-5f4d8dd895-6hj9l 1/1 Running 0 8h
pod/tekton-dashboard-746bfff8c8-7znvh 1/1 Running 0 8h
pod/tekton-events-controller-685c4485-bgmbp 1/1 Running 0 8h
pod/tekton-operator-proxy-webhook-74cfb9798b-rmhtn 1/1 Running 0 8h
pod/tekton-pipelines-controller-d54db996-6h7fp 1/1 Running 0 8h
pod/tekton-pipelines-remote-resolvers-76b7cbd867-97fc5 1/1 Running 0 8h
pod/tekton-pipelines-webhook-74dffc947-kb77v 1/1 Running 0 8h
pod/tekton-triggers-controller-5479774488-pvhjc 1/1 Running 0 8h
pod/tekton-triggers-core-interceptors-c4c7c98f5-wdx28 1/1 Running 0 8h
pod/tekton-triggers-webhook-55c87584c9-n7dxm 1/1 Running 0 8h

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tekton-chains-metrics ClusterIP 10.97.25.22 <none> 9090/TCP 8h
service/tekton-dashboard ClusterIP 10.100.96.146 <none> 9097/TCP 8h
service/tekton-events-controller ClusterIP 10.105.115.210 <none> 9090/TCP,8008/TCP,8080/TCP 8h
service/tekton-operator-proxy-webhook ClusterIP 10.102.16.99 <none> 443/TCP 8h
service/tekton-pipelines-controller ClusterIP 10.96.179.193 <none> 9090/TCP,8008/TCP,8080/TCP 8h
service/tekton-pipelines-remote-resolvers ClusterIP 10.104.95.223 <none> 9090/TCP,8008/TCP,8080/TCP 8h
service/tekton-pipelines-webhook ClusterIP 10.106.146.247 <none> 9090/TCP,8008/TCP,443/TCP,8080/TCP 8h
service/tekton-triggers-controller ClusterIP 10.110.79.44 <none> 9000/TCP 8h
service/tekton-triggers-core-interceptors ClusterIP 10.96.76.242 <none> 8443/TCP 8h
service/tekton-triggers-webhook ClusterIP 10.109.205.230 <none> 443/TCP 8h

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/tekton-chains-controller 1/1 1 1 8h
deployment.apps/tekton-dashboard 1/1 1 1 8h
deployment.apps/tekton-events-controller 1/1 1 1 8h
deployment.apps/tekton-operator-proxy-webhook 1/1 1 1 8h
deployment.apps/tekton-pipelines-controller 1/1 1 1 8h
deployment.apps/tekton-pipelines-remote-resolvers 1/1 1 1 8h
deployment.apps/tekton-pipelines-webhook 1/1 1 1 8h
deployment.apps/tekton-triggers-controller 1/1 1 1 8h
deployment.apps/tekton-triggers-core-interceptors 1/1 1 1 8h
deployment.apps/tekton-triggers-webhook 1/1 1 1 8h

NAME DESIRED CURRENT READY AGE
replicaset.apps/tekton-chains-controller-5f4d8dd895 1 1 1 8h
replicaset.apps/tekton-dashboard-746bfff8c8 1 1 1 8h
replicaset.apps/tekton-events-controller-685c4485 1 1 1 8h
replicaset.apps/tekton-operator-proxy-webhook-74cfb9798b 1 1 1 8h
replicaset.apps/tekton-pipelines-controller-d54db996 1 1 1 8h
replicaset.apps/tekton-pipelines-remote-resolvers-76b7cbd867 1 1 1 8h
replicaset.apps/tekton-pipelines-webhook-74dffc947 1 1 1 8h
replicaset.apps/tekton-triggers-controller-5479774488 1 1 1 8h
replicaset.apps/tekton-triggers-core-interceptors-c4c7c98f5 1 1 1 8h
replicaset.apps/tekton-triggers-webhook-55c87584c9 1 1 1 8h

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/tekton-operator-proxy-webhook Deployment/tekton-operator-proxy-webhook cpu: <unknown>/85% 1 5 1 8h
horizontalpodautoscaler.autoscaling/tekton-pipelines-webhook Deployment/tekton-pipelines-webhook cpu: <unknown>/100% 1 5 1 8h

NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/tekton-resource-pruner-4tcs6 0 8 * * * <none> False 0 3h6m 8h

Tekton Cli

Para instalar o tekton cli é só fazer o download e instalar no sistema usando o dpkg ou algum instalador de pacote da sua distribuição.

sudo dpkg -i seuarquivo.deb

Se quiser o completion no seu terminal só adicionar no seu bashrc ou zshrc

echo "source <(tkn completion bash)" >> ~/.bashrc
echo "source <(tkn completion zsh)" >> ~/.zshrc

tkn

bundle -- Manage Tekton Bundles
chain -- Manage Chains
clustertriggerbinding -- Manage ClusterTriggerBindings
completion -- Prints shell completion scripts
customrun -- Manage CustomRuns
eventlistener -- Manage EventListeners
help -- Help about any command
hub -- Interact with tekton hub
pipeline -- Manage pipelines
pipelinerun -- Manage PipelineRuns
task -- Manage Tasks
taskrun -- Manage TaskRuns
triggerbinding -- Manage TriggerBindings
triggertemplate -- Manage TriggerTemplates
version -- Prints version information