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.
| Platform | Profile | Installed Component |
|---|---|---|
| Kubernetes, OpenShift | lite | Pipeline |
| Kubernetes, OpenShift | basic | Pipeline, Trigger, Chains |
| Kubernetes | all | Pipeline, Trigger, Chains, Dashboard |
| OpenShift | all | Pipeline, 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