Kubernetes está evolucionando rápidamente de una plataforma de orquestación de Docker a un sistema operativo en la nube de uso general. Gracias a los operadores , Kubernetes es capaz de gestionar inicialmente los conceptos y procesos empresariales de alto nivel, lo que significa que ya no gestiona los bloques de construcción, los servicios y las implementaciones, sino que describe las cosas que estos bloques de construcción pueden crear, por ejemplo. , servidores web, datos de bases de datos, implementación continua, administración de certificados y más.
Cuando se implementa en un clúster de Kubernetes, Tekton Pipelines brinda la capacidad de definir y ejecutar tareas de compilación, entradas y salidas en forma de valores simples u objetos complejos como imágenes de Docker, y combinar esos recursos en tuberías. Estos nuevos recursos de Kubernetes y los controladores que los gobiernan dan como resultado una plataforma de CI / CD independiente alojada en un clúster de Kubernetes.
En esta publicación, veremos una canalización de compilación simple que se ejecuta en MicroK8S.
Preparar un clúster de Kubernetes de prueba
En esta publicación, estoy usando MicroK8S para crear un clúster de Kubernetes. MicroK8S es útil aquí porque ofrece una selección de complementos oficiales , uno de los cuales es el registro de imágenes de Docker. Dado que nuestra canalización crea una imagen de Docker, debemos alojarla en algún lugar, y el complemento de registro MicroK8S nos proporciona esta funcionalidad con un solo comando:
microk8s.enable registry
También necesitamos habilitar la búsqueda de DNS desde el clúster MicroK8S. Esto se hace habilitando el complemento DNS:
microk8s.enable dns
Instalación de Tekton Pipelines
La instalación de Tekton Pipelines se realiza con un comando kubectl
(o microk8s.kubectl
en nuestro caso):
microk8s.kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
Ahora podemos crear recursos de Tekton en nuestro clúster de Kubernetes.
La tarea "Hola mundo"
, . , 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 , , , , .