Kubernetes évolue rapidement d'une plate-forme d'orchestration Docker à un système d'exploitation cloud à usage général. Grâce aux opérateurs , Kubernetes est capable de gérer initialement les concepts de haut niveau et les processus métier, ce qui signifie que vous ne gérez plus les blocs de modules de construction, les services et les déploiements, mais décrivez plutôt les choses que ces blocs de construction peuvent créer, par exemple. , serveurs Web, données de bases de données, déploiement continu, gestion des certificats, etc.
Lorsqu'il est déployé sur un cluster Kubernetes, Tekton Pipelines offre la possibilité de définir et d'exécuter des tâches de construction, des entrées et des sorties sous la forme de valeurs simples ou d'objets complexes tels que des images Docker, et de combiner ces ressources dans des pipelines. Ces nouvelles ressources Kubernetes et les contrôleurs qui les régissent aboutissent à une plate-forme CI / CD autonome hébergée sur un cluster Kubernetes.
Dans cet article, nous examinerons un pipeline de construction simple fonctionnant sur MicroK8S.
Préparation d'un cluster Kubernetes de test
Dans cet article, j'utilise MicroK8S pour créer un cluster Kubernetes. MicroK8S est utile ici car il propose une sélection d' add-ons officiels , dont l'un est le registre d'images Docker. Étant donné que notre pipeline crée une image Docker, nous devons l'héberger quelque part, et le complément de registre MicroK8S nous fournit cette fonctionnalité avec une seule commande:
microk8s.enable registry
Nous devons également activer la recherche DNS à partir du cluster MicroK8S. Cela se fait en activant le module complémentaire DNS:
microk8s.enable dns
Installation des pipelines Tekton
L'installation de Tekton Pipelines se fait avec une seule commande kubectl
(ou microk8s.kubectl
dans notre cas):
microk8s.kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
Nous pouvons désormais créer des ressources Tekton dans notre cluster Kubernetes.
La tâche "Hello World"
, . , echo
Hello World
, ubuntu
.
YAML helloworldtask.yml
:
apiVersion: tekton.dev/v1alpha1 kind: Task metadata: name: echo-hello-world spec: steps: - name: echo image: ubuntu command: - echo args: - "Hello World"
Kubernetes :
microk8s.kubectl apply -f helloworldtask.yml
, , - . , Tekton .
YAML helloworldtaskrun.yml
:
apiVersion: tekton.dev/v1alpha1 kind: TaskRun metadata: name: echo-hello-world-task-run spec: taskRef: name: echo-hello-world
Kubernetes :
microk8s.kubectl apply -f helloworldtaskrun.yml
Docker
hello world, Tekton, Docker. , RandomQuotes.
. .
, , — Git, . , git, URL- , :
apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: randomquotes-git spec: type: git params: - name: revision value: master - name: url value: https://github.com/OctopusSamples/RandomQuotes-Java.git
Docker, . MicroK8S, Docker http://registry.container-registry.svc.cluster.local:5000.
image
, Docker, registry.container-registry.svc.cluster.local:5000/randomquotes
:
apiVersion: tekton.dev/v1alpha1 kind: PipelineResource metadata: name: randomquotes-image spec: type: image params: - name: url value: registry.container-registry.svc.cluster.local:5000/randomquotes
Docker, Docker .
Docker Docker . Kubernetes Docker, : Docker Docker?
, , Docker CLI , - Docker. , umoci Docker, Kaniko Buildah Docker Docker Podman Docker.
Kaniko Tekton, Docker Docker, Kubernetes. YAML :
apiVersion: tekton.dev/v1alpha1 kind: Task metadata: name: build-docker-image-from-git-source spec: inputs: resources: - name: docker-source type: git params: - name: pathToDockerFile type: string description: The path to the dockerfile to build default: /workspace/docker-source/Dockerfile - name: pathToContext type: string description: The build context used by Kaniko (https://github.com/GoogleContainerTools/kaniko#kaniko-build-contexts) default: /workspace/docker-source outputs: resources: - name: builtImage type: image steps: - name: build-and-push image: gcr.io/kaniko-project/executor:v0.17.1 # specifying DOCKER_CONFIG is required to allow kaniko to detect docker credential env: - name: "DOCKER_CONFIG" value: "/tekton/home/.docker/" command: - /kaniko/executor args: - --dockerfile=$(inputs.params.pathToDockerFile) - --destination=$(outputs.resources.builtImage.url) - --context=$(inputs.params.pathToContext)
.
, , .
git
:
inputs: resources: - name: docker-source type: git
image
:
outputs: resources: - name: builtImage type: image
, , Docker:
spec: inputs: params: - name: pathToDockerFile type: string description: The path to the dockerfile to build default: /workspace/docker-source/Dockerfile - name: pathToContext type: string description: The build context used by Kaniko (https://github.com/GoogleContainerTools/kaniko#kaniko-build-contexts) default: /workspace/docker-source
, /workspace/docker-source
— , git
, docker-source
, .
, Docker. , gcr.io/kaniko-project/executor:v0.17.1
image, Kaniko:
spec: steps: - name: build-and-push image: gcr.io/kaniko-project/executor:v0.17.1 # specifying DOCKER_CONFIG is required to allow kaniko to detect docker credential env: - name: "DOCKER_CONFIG" value: "/tekton/home/.docker/" command: - /kaniko/executor args: - --dockerfile=$(inputs.params.pathToDockerFile) - --destination=$(outputs.resources.builtImage.url) - --context=$(inputs.params.pathToContext)
, . docker-source
randomquotes-git
, builtImage — randomquotes-image
.
:
apiVersion: tekton.dev/v1alpha1 kind: TaskRun metadata: name: build-docker-image-from-git-source-task-run spec: taskRef: name: build-docker-image-from-git-source inputs: resources: - name: docker-source resourceRef: name: randomquotes-git params: - name: pathToDockerFile value: Dockerfile - name: pathToContext value: /workspace/docker-source outputs: resources: - name: builtImage resourceRef: name: randomquotes-image
Tekton CLI , kubectl
, MicroK8S microk8s.kubectl
. kubectl
— , MicroK8S kubectl
:
sudo microk8s.kubectl config view --raw > $HOME/.kube/config
:
tkn taskrun logs build-docker-image-from-git-source-task-run

Tekton?
Docker, Tekton . Docker, .
Kubernetes . , , ?
, Tekton , . tkn
CLI , kubectl
, . kubectl create -f taskrun.yml
, .

, Tekton — . Jenkins X OpenShift Pipelines — , Tekton.
Kubernetes , , , , , . , Kubernetes CI , , Kubernetes.
, Jenkins X OpenShift Pipelines, Tekton . Tekton , , , , .