Kubernetes entwickelt sich schnell von einer Docker-Orchestrierungsplattform zu einem universellen Cloud-Betriebssystem. Dank der Betreiber kann Kubernetes zunächst die übergeordneten Konzepte und Geschäftsprozesse verwalten. Dies bedeutet, dass Sie nicht mehr die Bausteine, Dienste und Bereitstellungen verwalten, sondern beispielsweise beschreiben, was diese Bausteine erstellen können , Webserver, Datenbankdaten, kontinuierliche Bereitstellung, Zertifikatverwaltung und mehr.
Bei der Bereitstellung in einem Kubernetes-Cluster bietet Tekton Pipelines die Möglichkeit, Build-Aufgaben, Ein- und Ausgaben in Form einfacher Werte oder komplexer Objekte wie Docker-Images zu definieren und auszuführen und diese Ressourcen zu Pipelines zu kombinieren. Diese neuen Kubernetes-Ressourcen und die sie steuernden Controller führen zu einer eigenständigen CI / CD-Plattform, die auf einem Kubernetes-Cluster gehostet wird.
In diesem Beitrag werfen wir einen Blick auf eine einfache Build-Pipeline, die auf MicroK8S ausgeführt wird.
Vorbereiten eines Test-Kubernetes-Clusters
In diesem Beitrag verwende ich MicroK8S , um einen Kubernetes-Cluster zu erstellen. MicroK8S ist hier nützlich, da es eine Auswahl offizieller Add-Ons bietet, darunter die Docker-Image-Registrierung. Da unsere Pipeline ein Docker-Image erstellt, müssen wir es irgendwo hosten, und das MicroK8S-Registrierungs-Add-In bietet uns diese Funktionalität mit einem einzigen Befehl:
microk8s.enable registry
Wir müssen auch die DNS-Suche vom MicroK8S-Cluster aktivieren. Dies erfolgt durch Aktivieren des DNS-Add-Ons:
microk8s.enable dns
Installieren von Tekton-Pipelines
Die Installation von Tekton Pipelines erfolgt mit einem Befehl kubectl
(oder microk8s.kubectl
in unserem Fall):
microk8s.kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
Wir können jetzt Tekton-Ressourcen in unserem Kubernetes-Cluster erstellen.
Die Aufgabe "Hallo Welt"
, . , 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 , , , , .