Kubernetes berkembang pesat dari platform orkestrasi Docker menjadi sistem operasi cloud tujuan umum. Berkat operator , Kubernetes pada awalnya dapat mengelola konsep dan proses bisnis tingkat tinggi, yang berarti bahwa Anda tidak lagi mengelola blok modul penyusun, layanan, dan penerapan, tetapi mendeskripsikan hal-hal yang dapat dibuat oleh blok penyusun ini, misalnya , server web, data basis data, penerapan berkelanjutan, manajemen sertifikat, dan banyak lagi.
Saat di-deploy ke cluster Kubernetes, Tekton Pipelines memberikan kemampuan untuk menentukan dan menjalankan tugas build, input dan output dalam bentuk nilai sederhana atau objek kompleks seperti gambar Docker, dan menggabungkan resource tersebut ke dalam pipeline. Resource Kubernetes baru ini dan pengontrol yang mengaturnya menghasilkan platform CI / CD mandiri yang dihosting di cluster Kubernetes.
Dalam posting ini, kita akan melihat pipeline build sederhana yang berjalan di MicroK8S.
Mempersiapkan cluster Kubernetes pengujian
Dalam posting ini, saya menggunakan MicroK8S untuk membuat cluster Kubernetes. MicroK8S berguna di sini karena menawarkan pilihan add-on resmi , salah satunya adalah registry image Docker. Karena pipeline kita membangun image Docker, kita perlu menyimpannya di suatu tempat, dan add-in registry MicroK8S memberi kita fungsionalitas ini dengan satu perintah:
microk8s.enable registry
Kami juga perlu mengaktifkan pencarian DNS dari cluster MicroK8S. Ini dilakukan dengan mengaktifkan add-on DNS:
microk8s.enable dns
Memasang Tekton Pipelines
Instalasi Tekton Pipelines dilakukan dengan satu perintah kubectl
(atau microk8s.kubectl
dalam kasus kami):
microk8s.kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
Kami sekarang dapat membuat sumber daya Tekton di cluster Kubernetes kami.
Tugas "Halo Dunia"
, . , 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 , , , , .