

Tekton, een krachtig en flexibel open-source framework, stelt ontwikkelaars in staat om CI/CD-systemen te bouwen, testen en implementeren, zowel in de cloud als op locatie. In dit artikel gaan we dieper in op wat Tekton is, de voordelen en hoe grote bedrijven zoals Google, Elastic en RedHat er gebruik van maken.
Wat is Tekton?
Tekton is een open-source framework ontworpen voor het ontwikkelen van Continuous Integration en Continuous Deployment (CI/CD) systemen. Het stelt ontwikkelaars in staat om naadloos samen te werken met zowel cloud providers als on-premise infrastructuren. Met Tekton kunnen ontwikkelaars pijplijnen bouwen, testen en implementeren en profiteren van een flexibele en uitbreidbare architectuur.
Voordelen van Tekton
Cloud-Native ecosysteem
Tekton maakt gebruik van Kubernetes clusters om bronnen en componenten te beheren. Hierdoor kan Tekton op verschillende cloud providers draaien en lokaal worden ingezet.
Kubernetes aangepaste bronnen
Alle middelen die nodig zijn om een pijplijn te bouwen zijn beschikbaar als Kubernetes Custom Resources. Dit betekent dat pijplijnen volledig kunnen worden beschreven in YAML-bestanden, waardoor GitOps-principes kunnen worden toegepast voor een geautomatiseerd en versiegestuurd bouwproces.
Uitbreidbaarheid
De kern van Tekton is eenvoudig uit te breiden met extra componenten, zoals Tekton Triggers of Dashboards. Deze componenten bevinden zich niet direct in de kern, waardoor deze compact blijft en minimale resources gebruikt.
Eenvoudig onderhoud
Dankzij Tekton's modulaire ontwerp kan de kern onafhankelijk worden geüpgraded zonder dat dit invloed heeft op builds. De scheiding van de core en uitbreidingen maakt onderhoud veel eenvoudiger.
Schaalbaarheid
Als Cloud-Native oplossing kan Tekton eenvoudig worden geschaald voor hoge beschikbaarheid, waardoor het geschikt is voor een verscheidenheid aan projecten en omgevingen.
Tekton Vrienden: Grote bedrijven omarmen Tekton

Verschillende toonaangevende IT-bedrijven hebben Tekton geadopteerd en dragen actief bij aan de ontwikkeling ervan via een GitHub repository. Enkele opmerkelijke bedrijven zijn:
- Google: De initiatiefnemer van het Tekton project en een actieve ontwikkelaar.
- Elastic: De hele Elastic stack wordt gebouwd en uitgebracht met behulp van het Tekton ecosysteem.
- Red Hat: Zorgt voor een naadloze werking van het Tekton ecosysteem op OpenShift en levert toegewijde bijdragen aan het Tekton project.
Tekton ecosysteem: Componenten en functionaliteiten
Het Tekton ecosysteem bestaat uit verschillende componenten die collectief of individueel kunnen worden ingezet. Hieronder volgt een uitleg van een aantal belangrijke componenten.
1. Tekton Pijplijnen

Tekton Pipelines maakt gebruik van Kubernetes Custom Resources om bouwprocessen te definiëren. Volgens het 'pipeline-as-code' principe kunnen ontwikkelaars pipelines beschrijven in YAML-bestanden en versiebeheer toepassen met GitOps.
Door elke resource op te slaan in Git kan worden gewerkt met versies van verschillende Pipeline-resources. Door het GitOps-principe toe te passen, wordt de bron bovendien automatisch ingezet op het cluster, waardoor je er zeker van bent dat je altijd de juiste en nieuwste versie hebt, zonder dat je handmatig met de Tekton-bronnen hoeft om te gaan.
Een Pipeline is een subset van taken die in een specifieke volgorde worden uitgevoerd.
Laten we een voorbeeld nemen van een Pipeline voor het bouwen van een Docker image:
- Taak 1: Kloon Git repository
- Taak 2: Scannen op kwetsbaarheden
- Taak 3: Docker-bestand lezen en image bouwen
- Taak 4: Docker container images naar een register pushen (https://acagroup.be/en/blog/navigating-the-cloud-native-landscape-with-harbor-registry/)
Laten we dit nu visualiseren.
- Elke uitvoering van een pijplijn wordt een PipelineRun genoemd.
- Elke uitvoering van een taak wordt een TaskRun genoemd.

In de pijplijn definiëren we de taken. Deze taken zijn ook individuele Tekton Custom Resources in Kubernetes. Wanneer de pijplijn wordt uitgevoerd, raadpleegt Tekton de gedefinieerde bron en gebruikt deze om de taken uit te voeren.
Taken zijn heel flexibel. Je kunt een taak herhaaldelijk hergebruiken binnen een pijplijn en zelfs tussen verschillende pijplijnen. Taken kunnen worden aangepast of vanaf nul worden geschreven zonder dat het nodig is om afzonderlijk plugins of extra bronnen te installeren. Een taak kan een eenvoudige container image zijn die wordt uitgevoerd met specifieke parameters.
Door versiebeheer toe te passen op taken is het eenvoudig om voor elk specifiek doel een andere versie van de taak te gebruiken. Dit elimineert de noodzaak om alle pijplijnen te upgraden wanneer een taak wordt bijgewerkt.
Wat heeft een ontwikkelaar hieraan?
- Aanpasbaarheid: Alle Tekton hulpmiddelen zijn aanpasbaar, waardoor ontwikkelaars zeer gedetailleerde pijplijnen en taken kunnen schrijven.
- Herbruikbaarheid: Pijplijnen en/of taken kunnen herhaaldelijk worden ingezet, zowel binnen dezelfde pijplijn als tussen verschillende pijplijnen.
- Uitbreidbaarheid: Tekton biedt een catalogus van vooraf geconfigureerde, veelgebruikte taken. De middelen in deze catalogus kunnen worden gedownload en aangepast aan de specifieke behoeften van uw project.
Voorbeeld: Een Docker Container Image Pipeline
Laten we als voorbeeld een pijplijn maken die een Docker container image bouwt en naar een Docker container register pusht.
Eerst bereiden we onze Tekton-taken voor, zodat we ze in onze Tekton-pijplijn kunnen definiëren.
Welke stappen zijn nodig om een Docker container image te bouwen?
- Git kloon: Om onze broncode op te halen.
- Git Versie: Om een versie voor onze container te definiëren.
- Trivy Scanning: Om in eerste instantie te controleren of onze image CVE's bevat.
- Kaniko Builder: Een tool om een Docker image te bouwen van een Dockerfile en het naar het register te pushen.
- Pipeline starten: Met Tekton PipelineRun kunnen we onze parameters definiëren, zoals branch_name, repository_url en repository_name.
- Uitrollen: De middelen achtereenvolgens inzetten om te testen: Taken, Pipeline en PipelineRun.
U kunt de bijbehorende YAML-bestanden voor elk van deze taken vinden op de Tekton Hub.
Taken
Git kloon
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: git-clone
labels:
app.kubernetes.io/version: "0.9"
annotations:
tekton.dev/pipelines.minVersion: "0.38.0"
tekton.dev/categories: Git
tekton.dev/tags: git
tekton.dev/displayName: "git clone"
tekton.dev/platforms: "linux/amd64,linux/s390x,linux/ppc64le,linux/arm64"
spec:
description: >-
These Tasks are Git tasks to work with repositories used by other tasks
in your Pipeline.
The git-clone Task will clone a repo from the provided url into the
output Workspace. By default the repo will be cloned into the root of
your Workspace. You can clone into a subdirectory by setting this Task's
subdirectory param. This Task also supports sparse checkouts. To perform
a sparse checkout, pass a list of comma separated directory patterns to
this Task's sparseCheckoutDirectories param.
workspaces:
- name: output
description: The git repo will be cloned onto the volume backing this Workspace.
- name: ssh-directory
optional: true
description: |
A .ssh directory with private key, known_hosts, config, etc. Copied to
the user's home before git commands are executed. Used to authenticate
with the git remote when performing the clone. Binding a Secret to this
Workspace is strongly recommended over other volume types.
- name: basic-auth
optional: true
description: |
A Workspace containing a .gitconfig and .git-credentials file. These
will be copied to the user's home before any git commands are run. Any
other files in this Workspace are ignored. It is strongly recommended
to use ssh-directory over basic-auth whenever possible and to bind a
Secret to this Workspace over other volume types.
- name: ssl-ca-directory
optional: true
description: |
A workspace containing CA certificates, this will be used by Git to
verify the peer with when fetching or pushing over HTTPS.
params:
- name: url
description: Repository URL to clone from.
type: string
- name: revision
description: Revision to checkout. (branch, tag, sha, ref, etc...)
type: string
default: ""
- name: refspec
description: Refspec to fetch before checking out revision.
default: ""
- name: submodules
description: Initialize and fetch git submodules.
type: string
default: "true"
- name: depth
description: Perform a shallow clone, fetching only the most recent N commits.
type: string
default: "1"
- name: sslVerify
description: Set the `http.sslVerify` global git config. Setting this to `false` is not advised unless you are sure that you trust your git remote.
type: string
default: "true"
- name: crtFileName
description: file name of mounted crt using ssl-ca-directory workspace. default value is ca-bundle.crt.
type: string
default: "ca-bundle.crt"
- name: subdirectory
description: Subdirectory inside the `output` Workspace to clone the repo into.
type: string
default: ""
- name: sparseCheckoutDirectories
description: Define the directory patterns to match or exclude when performing a sparse checkout.
type: string
default: ""
- name: deleteExisting
description: Clean out the contents of the destination directory if it already exists before cloning.
type: string
default: "true"
- name: httpProxy
description: HTTP proxy server for non-SSL requests.
type: string
default: ""
- name: httpsProxy
description: HTTPS proxy server for SSL requests.
type: string
default: ""
- name: noProxy
description: Opt out of proxying HTTP/HTTPS requests.
type: string
default: ""
- name: verbose
description: Log the commands that are executed during `git-clone`'s operation.
type: string
default: "true"
- name: gitInitImage
description: The image providing the git-init binary that this Task runs.
type: string
default: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.40.2"
- name: userHome
description: |
Absolute path to the user's home directory.
type: string
default: "/home/git"
results:
- name: commit
description: The precise commit SHA that was fetched by this Task.
- name: url
description: The precise URL that was fetched by this Task.
- name: committer-date
description: The epoch timestamp of the commit that was fetched by this Task.
steps:
- name: clone
image: "$(params.gitInitImage)"
env:
- name: HOME
value: "$(params.userHome)"
- name: PARAM_URL
value: $(params.url)
- name: PARAM_REVISION
value: $(params.revision)
- name: PARAM_REFSPEC
value: $(params.refspec)
- name: PARAM_SUBMODULES
value: $(params.submodules)
- name: PARAM_DEPTH
value: $(params.depth)
- name: PARAM_SSL_VERIFY
value: $(params.sslVerify)
- name: PARAM_CRT_FILENAME
value: $(params.crtFileName)
- name: PARAM_SUBDIRECTORY
value: $(params.subdirectory)
- name: PARAM_DELETE_EXISTING
value: $(params.deleteExisting)
- name: PARAM_HTTP_PROXY
value: $(params.httpProxy)
- name: PARAM_HTTPS_PROXY
value: $(params.httpsProxy)
- name: PARAM_NO_PROXY
value: $(params.noProxy)
- name: PARAM_VERBOSE
value: $(params.verbose)
- name: PARAM_SPARSE_CHECKOUT_DIRECTORIES
value: $(params.sparseCheckoutDirectories)
- name: PARAM_USER_HOME
value: $(params.userHome)
- name: WORKSPACE_OUTPUT_PATH
value: $(workspaces.output.path)
- name: WORKSPACE_SSH_DIRECTORY_BOUND
value: $(workspaces.ssh-directory.bound)
- name: WORKSPACE_SSH_DIRECTORY_PATH
value: $(workspaces.ssh-directory.path)
- name: WORKSPACE_BASIC_AUTH_DIRECTORY_BOUND
value: $(workspaces.basic-auth.bound)
- name: WORKSPACE_BASIC_AUTH_DIRECTORY_PATH
value: $(workspaces.basic-auth.path)
- name: WORKSPACE_SSL_CA_DIRECTORY_BOUND
value: $(workspaces.ssl-ca-directory.bound)
- name: WORKSPACE_SSL_CA_DIRECTORY_PATH
value: $(workspaces.ssl-ca-directory.path)
securityContext:
runAsNonRoot: true
runAsUser: 65532
script: |
#!/usr/bin/env sh
set -eu
if [ "${PARAM_VERBOSE}" = "true" ] ; then
set -x
fi
if [ "${WORKSPACE_BASIC_AUTH_DIRECTORY_BOUND}" = "true" ] ; then
cp "${WORKSPACE_BASIC_AUTH_DIRECTORY_PATH}/.git-credentials" "${PARAM_USER_HOME}/.git-credentials"
cp "${WORKSPACE_BASIC_AUTH_DIRECTORY_PATH}/.gitconfig" "${PARAM_USER_HOME}/.gitconfig"
chmod 400 "${PARAM_USER_HOME}/.git-credentials"
chmod 400 "${PARAM_USER_HOME}/.gitconfig"
fi
if [ "${WORKSPACE_SSH_DIRECTORY_BOUND}" = "true" ] ; then
cp -R "${WORKSPACE_SSH_DIRECTORY_PATH}" "${PARAM_USER_HOME}"/.ssh
chmod 700 "${PARAM_USER_HOME}"/.ssh
chmod -R 400 "${PARAM_USER_HOME}"/.ssh/*
fi
if [ "${WORKSPACE_SSL_CA_DIRECTORY_BOUND}" = "true" ] ; then
export GIT_SSL_CAPATH="${WORKSPACE_SSL_CA_DIRECTORY_PATH}"
if [ "${PARAM_CRT_FILENAME}" != "" ] ; then
export GIT_SSL_CAINFO="${WORKSPACE_SSL_CA_DIRECTORY_PATH}/${PARAM_CRT_FILENAME}"
fi
fi
CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}/${PARAM_SUBDIRECTORY}"
cleandir() {
# Delete any existing contents of the repo directory if it exists.
#
# We don't just "rm -rf ${CHECKOUT_DIR}" because ${CHECKOUT_DIR} might be "/"
# or the root of a mounted volume.
if [ -d "${CHECKOUT_DIR}" ] ; then
# Delete non-hidden files and directories
rm -rf "${CHECKOUT_DIR:?}"/*
# Delete files and directories starting with . but excluding ..
rm -rf "${CHECKOUT_DIR}"/.[!.]*
# Delete files and directories starting with .. plus any other character
rm -rf "${CHECKOUT_DIR}"/..?*
fi
}
if [ "${PARAM_DELETE_EXISTING}" = "true" ] ; then
cleandir || true
fi
test -z "${PARAM_HTTP_PROXY}" || export HTTP_PROXY="${PARAM_HTTP_PROXY}"
test -z "${PARAM_HTTPS_PROXY}" || export HTTPS_PROXY="${PARAM_HTTPS_PROXY}"
test -z "${PARAM_NO_PROXY}" || export NO_PROXY="${PARAM_NO_PROXY}"
git config --global --add safe.directory "${WORKSPACE_OUTPUT_PATH}"
/ko-app/git-init \
-url="${PARAM_URL}" \
-revision="${PARAM_REVISION}" \
-refspec="${PARAM_REFSPEC}" \
-path="${CHECKOUT_DIR}" \
-sslVerify="${PARAM_SSL_VERIFY}" \
-submodules="${PARAM_SUBMODULES}" \
-depth="${PARAM_DEPTH}" \
-sparseCheckoutDirectories="${PARAM_SPARSE_CHECKOUT_DIRECTORIES}"
cd "${CHECKOUT_DIR}"
RESULT_SHA="$(git rev-parse HEAD)"
EXIT_CODE="$?"
if [ "${EXIT_CODE}" != 0 ] ; then
exit "${EXIT_CODE}"
fi
RESULT_COMMITTER_DATE="$(git log -1 --pretty=%ct)"
printf "%s" "${RESULT_COMMITTER_DATE}" > "$(results.committer-date.path)"
printf "%s" "${RESULT_SHA}" > "$(results.commit.path)"
printf "%s" "${PARAM_URL}" > "$(results.url.path)"
Git versiebeheer
---
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: git-version
labels:
app.kubernetes.io/version: "0.1"
annotations:
tekton.dev/pipelines.minVersion: "0.12.0"
tekton.dev/displayName: "git version"
tekton.dev/categories: Git
tekton.dev/tags: git
tekton.dev/platforms: "linux/amd64"
spec:
description: >-
This task can be used to create a version from git history
params:
- description: branch to checkout to create a version for e.g. "develop"
name: branch
type: string
results:
- description: The calculated git version you could use for git tagging e.g. "0.1.0-tektonize.1-188"
name: gitVersion
- description: A normalized version for use in container images e.g. "0.1.0-tektonize.1-188"
name: packageVersion
steps:
- image: mcr.microsoft.com/dotnet/sdk:3.1-focal@sha256:1d31e2582f69920c3a6ea9498bb7da285baffbca7ea84d90d9e5b545604cc92d
name: set-git-version
workingDir: $(workspaces.source.path)
securityContext:
runAsUser: 0
env:
- name: PARAM_BRANCH
value: $(params.branch)
script: |
#!/usr/bin/env bash
export PATH="$PATH:/tekton/home/.dotnet/tools"
dotnet tool install GitVersion.Tool --version 5.5.0 --tool-path "/tekton/home/.dotnet/tools"
git checkout "${PARAM_BRANCH}"
export GITVERSION=$(dotnet gitversion /showvariable FullSemVer)
echo -n "${GITVERSION}" | tee $(results.gitVersion.path)
# normalize a bit because
# image tags can only contain `abcdefghijklmnopqrstuvwxyz0123456789_-.ABCDEFGHIJKLMNOPQRSTUVWXYZ`
export PACKAGEVERSION=$(echo -n $GITVERSION | sed 's/[^-._0-9A-Za-z]/-/g')
echo -n "${PACKAGEVERSION}" | tee $(results.packageVersion.path)
workspaces:
- name: source
description: A workspace that contains the fetched git repository to create a version for.
Trivy Scanner
---
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: trivy-scanner
labels:
app.kubernetes.io/version: "0.2"
annotations:
tekton.dev/pipelines.minVersion: "0.12.1"
tekton.dev/categories: Security
tekton.dev/tags: CLI, trivy
tekton.dev/displayName: "trivy scanner"
tekton.dev/platforms: "linux/amd64,linux/arm64,linux/ppc64le,linux/390x"
spec:
description: >-
Trivy is a simple and comprehensive scanner for
vulnerabilities in container images,file systems
,and Git repositories, as well as for configuration issues.
This task can be used to scan for vulnenrabilities on the source code
in stand alone mode.
workspaces:
- name: manifest-dir
params:
- name: ARGS
description: The Arguments to be passed to Trivy command.
type: array
- name: TRIVY_IMAGE
default: docker.io/aquasec/trivy@sha256:944a044451791617cc0ed2ee4d1942a4f66b790d527fcd0575a6b399ccbc05a1 # 0.43.1
description: Trivy scanner image to be used
- name: IMAGE_PATH
description: Image or Path to be scanned by trivy.
type: string
- name: AIR_GAPPED_ENABLED
default: "false"
description: a flag enabling Air-Gapped mode
type: string
steps:
- name: trivy-scan
image: $(params.TRIVY_IMAGE)
workingDir: $(workspaces.manifest-dir.path)
script: |
#!/usr/bin/env sh
cmd="trivy $* "
if [ "$(params.AIR_GAPPED_ENABLED)" = "true" ]; then
echo "Air-Gapped mode enabled"
TRIVY_TEMP_DIR=$(mktemp -d)
trivy --cache-dir "$TRIVY_TEMP_DIR" image --download-db-only
tar -cf ./db.tar.gz -C "$TRIVY_TEMP_DIR/db" metadata.json trivy.db
rm -rf "$TRIVY_TEMP_DIR"
mkdir -p "$HOME"/.cache/trivy/db
tar xvf ./db.tar.gz -C "$HOME"/.cache/trivy/db
cmd="${cmd}--skip-update "
fi
cmd="${cmd}$(params.IMAGE_PATH)"
echo "Running trivy task with command below"
echo "$cmd"
eval "$cmd"
args:
- "$(params.ARGS)"
Kaniko bouwer
---
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: trivy-scanner
labels:
app.kubernetes.io/version: "0.2"
annotations:
tekton.dev/pipelines.minVersion: "0.12.1"
tekton.dev/categories: Security
tekton.dev/tags: CLI, trivy
tekton.dev/displayName: "trivy scanner"
tekton.dev/platforms: "linux/amd64,linux/arm64,linux/ppc64le,linux/390x"
spec:
description: >-
Trivy is a simple and comprehensive scanner for
vulnerabilities in container images,file systems
,and Git repositories, as well as for configuration issues.
This task can be used to scan for vulnenrabilities on the source code
in stand alone mode.
workspaces:
- name: manifest-dir
params:
- name: ARGS
description: The Arguments to be passed to Trivy command.
type: array
- name: TRIVY_IMAGE
default: docker.io/aquasec/trivy@sha256:944a044451791617cc0ed2ee4d1942a4f66b790d527fcd0575a6b399ccbc05a1 # 0.43.1
description: Trivy scanner image to be used
- name: IMAGE_PATH
description: Image or Path to be scanned by trivy.
type: string
- name: AIR_GAPPED_ENABLED
default: "false"
description: a flag enabling Air-Gapped mode
type: string
steps:
- name: trivy-scan
image: $(params.TRIVY_IMAGE)
workingDir: $(workspaces.manifest-dir.path)
script: |
#!/usr/bin/env sh
cmd="trivy $* "
if [ "$(params.AIR_GAPPED_ENABLED)" = "true" ]; then
echo "Air-Gapped mode enabled"
TRIVY_TEMP_DIR=$(mktemp -d)
trivy --cache-dir "$TRIVY_TEMP_DIR" image --download-db-only
tar -cf ./db.tar.gz -C "$TRIVY_TEMP_DIR/db" metadata.json trivy.db
rm -rf "$TRIVY_TEMP_DIR"
mkdir -p "$HOME"/.cache/trivy/db
tar xvf ./db.tar.gz -C "$HOME"/.cache/trivy/db
cmd="${cmd}--skip-update "
fi
cmd="${cmd}$(params.IMAGE_PATH)"
echo "Running trivy task with command below"
echo "$cmd"
eval "$cmd"
args:
- "$(params.ARGS)"
Kaniko Builder
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: kaniko
labels:
app.kubernetes.io/version: "0.6"
annotations:
tekton.dev/pipelines.minVersion: "0.17.0"
tekton.dev/categories: Image Build
tekton.dev/tags: image-build
tekton.dev/displayName: "Build and upload container image using Kaniko"
tekton.dev/platforms: "linux/amd64,linux/arm64,linux/ppc64le"
spec:
description: >-
This Task builds a simple Dockerfile with kaniko and pushes to a registry.
This Task stores the image name and digest as results, allowing Tekton Chains to pick up
that an image was built & sign it.
params:
- name: IMAGE
description: Name (reference) of the image to build.
- name: DOCKERFILE
description: Path to the Dockerfile to build.
default: ./Dockerfile
- name: CONTEXT
description: The build context used by Kaniko.
default: ./
- name: EXTRA_ARGS
type: array
default: []
- name: BUILDER_IMAGE
description: The image on which builds will run (default is v1.5.1)
default: gcr.io/kaniko-project/executor:v1.5.1@sha256:c6166717f7fe0b7da44908c986137ecfeab21f31ec3992f6e128fff8a94be8a5
workspaces:
- name: source
description: Holds the context and Dockerfile
- name: dockerconfig
description: Includes a docker `config.json`
optional: true
mountPath: /kaniko/.docker
results:
- name: IMAGE_DIGEST
description: Digest of the image just built.
- name: IMAGE_URL
description: URL of the image just built.
steps:
- name: build-and-push
workingDir: $(workspaces.source.path)
image: $(params.BUILDER_IMAGE)
args:
- $(params.EXTRA_ARGS)
- --dockerfile=$(params.DOCKERFILE)
- --context=$(workspaces.source.path)/$(params.CONTEXT) # The user does not need to care the workspace and the source.
- --destination=$(params.IMAGE)
- --digest-file=$(results.IMAGE_DIGEST.path)
# kaniko assumes it is running as root, which means this example fails on platforms
# that default to run containers as random uid (like OpenShift). Adding this securityContext
# makes it explicit that it needs to run as root.
securityContext:
runAsUser: 0
- name: write-url
image: docker.io/library/bash:5.1.4@sha256:c523c636b722339f41b6a431b44588ab2f762c5de5ec3bd7964420ff982fb1d9
script: |
set -e
image="$(params.IMAGE)"
echo -n "${image}" | tee "$(results.IMAGE_URL.path)"
Nu we onze taken hebben voorbereid, kunnen we onze aangepaste Tekton Pipeline schrijven.
Tekton Pipeline wordt van boven naar beneden opgebouwd.
Tekton-pipeline
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: custom-docker-image
namespace: tekton-pipelines
spec:
params:
- name: branch_name
description: The git branch
- name: repository_url
description: The git repository url
- name: repository_name
description: The git repository name
tasks:
- name: clonegit
taskRef:
name: git-clone
params:
- name: url
value: $(params.repository_url)
- name: revision
value: $(params.branch_name)
- name: deleteExisting
value: true
- name: depth
value: "0"
workspaces:
- name: output
workspace: source-workspace
- name: gitversion
taskRef:
name: git-version
runAfter:
- clonegit
params:
- name: branch
value: "$(params.branch_name)"
workspaces:
- name: source
workspace: source-workspace
- name: trivyscanner
taskRef:
name: trivy-scanner
runAfter:
- gitversion
params:
- name: IMAGE_PATH
value: "."
- name: ARGS
value: [ ]
workspaces:
- name: source
workspace: source-workspace
- name: kanikobuilder
taskRef:
name: kaniko
runAfter:
- trivyscanner
params:
- name: IMAGE
value: "<your-custom-registry>/$(params.repository_name):$(tasks.gitversion.results.packageVersion)"
- name: DOCKERFILE
value: "Dockerfile"
workspaces:
- name: source
workspace: source-workspace
- name: dockerconfig
workspace: docker-credentials
workspaces:
- name: source-workspace
- name: docker-credentials
PipelineRun
Nu we een complete Tekton Pipeline hebben, kunnen we onze pipeline starten.
Hiervoor hebben we Tekton PipelineRun nodig. Hier gaan we onze parameters definiëren zoals:
- tak_naam
- archief_url
- archiefnaam
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: custom-docker-image
namespace: tekton-pipelines
spec:
serviceAccountName: tekton-pipelines-build-bot
pipelineRef:
name: custom-docker-image
params:
- name: branch_name
value: "develop"
- name: repository_url
value: "<repository-branch>"
- name: repository_name
value: "<repository-name>"
workspaces:
- name: source-workspace
subPath: source
persistentVolumeClaim:
claimName: custom-docker-image-source
- name: docker-credentials
subPath: source
persistentVolumeClaim:
claimName: custom-docker-image-docker-credentials
pipelineSpec:
tasks:
- name: clonegit
taskRef:
name: git-clone]
- name: gitversion
taskRef:
name: git-version
- name: trivyscanner
taskRef:
name: gitversion
- name: kanikobuilder
taskRef:
name: kaniko
Implementeer de middelen om te testen in volgorde: Taken, Pipeline en PipelineRun.
2. Tekton Triggers: Pipelines starten met gebeurtenissen

Triggers zorgen ervoor dat Tekton Pipelines kunnen worden gestart door een gebeurtenis, zoals een commit naar een repository die vervolgens een webhook naar je Trigger Listener stuurt.
Er zijn verschillende opties om je pipeline te activeren vanuit een gebeurtenis.
Als we het bovenstaande diagram verder uitwerken en Tekton Triggers toevoegen, ziet het er als volgt uit:

Stappen:
- Git stuurt een payload via een webhook naar de EventListener.
- De EventListener leest de inkomende webhook en payload, en controleert of het voor hem bedoeld is.
- Als de EventListener vaststelt dat het voor hem bedoeld is, plaatst hij de geconfigureerde waarden uit de payload in een variabele. Dit gebeurt via TriggerBinding.
- De EventListener maakt vervolgens een TriggerTemplate met de waarden uit TriggerBinding.
- TriggerTemplate initieert vervolgens een PipelineRun en voert de gedefinieerde taken uit.
Voorbeeld
EventListener
Eerst maken we onze EventListener aan op basis van een CEL-expressie.
apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
name: custom-docker-build-listener
namespace: tekton-pipelines
spec:
serviceAccountName: tekton-triggers-build-bot
triggers:
- name: git-custom-docker-build-listener
interceptors:
- cel:
filter: (body.repository.workspace.slug.matches('<WORKSPACE>') && body.push.changes[0].new.name.matches('<branch-name>') && body.repository.name.matches('<repository-name>'))
template:
- ref: git-custom-docker-build-listener
bindings:
- ref: git-custom-docker-build-listener
In onze EventListener hebben we triggers geconfigureerd die:
- zal kijken naar de WORKSPACE naam
- naar de BRANCH naam zal kijken
- zal kijken naar de REPOSITORY naam
Als deze velden correct zijn, zal hij een sjabloon voorbereiden.
We gaan ook een TriggerTemplate en TriggerBinding voorbereiden om parameters te gebruiken tijdens de trigger.
TriggerBinding
In de TriggerBinding extraheren we de Trigger Body en laden we de variabelen met de bodywaarden die zijn verzonden vanuit Webhook.
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
name: custom-docker-build-listener
namespace: tekton-pipelines
spec:
params:
- name: branch_name
value: $(body.pullrequest.destination.branch.name)
- name: repository_url
value: $(body.repository.links.html.href)
- name: repository_name
value: $(body.repository.name)
TriggerTemplate
Nu we de variabelen in de TriggerBinding hebben, kunnen we onze Pipeline starten vanuit TriggerTemplate met onze variabelen die uit Trigger komen.
We kunnen hiervoor de notatie ${tt.xx} gebruiken.
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerTemplate
metadata:
name: custom-docker-build-listener
namespace: tekton-pipelines
spec:
params:
- name: branch_name
description: The git branch name
- name: repository_url
description: The git repository url
- name: repository_name
description: The git repository name
resourcetemplates:
- apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
generateName: $(tt.params.repository_name)-
labels:
tekton.dev/pipeline: tekton-pipeline
spec:
serviceAccountName: tekton-pipelines-build-bot
pipelineRef:
name: custom-docker-build-listener
params:
- name: branch_name
value: $(tt.params.branch_name)
- name: repository_url
value: $(tt.params.repository_url)
- name: repository_name
value: $(tt.params.repository_name)
workspaces:
- name: source-workspace
subPath: source
persistentVolumeClaim:
claimName: custom-docker-image-source
- name: docker-credentials
subPath: source
persistentVolumeClaim:
claimName: custom-docker-image-docker-credentials
pipelineSpec:
tasks:
- name: clonegit
taskRef:
name: git-clone]
- name: gitversion
taskRef:
name: git-version
- name: trivyscanner
taskRef:
name: gitversion
- name: kanikobuilder
taskRef:
name: kaniko
Implementeer de bronnen om te testen: TriggerTemplate, TriggerBinding, EventListener.
3. Tekton Dashboard: Gestroomlijnd beheer en monitoring
Het observeren en beheren van Tekton middelen binnen een Kubernetes omgeving is niet altijd eenvoudig, zeker als je bedenkt dat ontwikkelaars vaak beperkte toegangsrechten hebben in de Kubernetes omgeving.
Om deze reden wordt het gebruik van Tekton Dashboards aanbevolen. Tekton Dashboard dient als uitbreiding op het Tekton ecosysteem en biedt een gebruiksvriendelijke webinterface voor het beheren en monitoren van Tekton resources in Kubernetes omgevingen. Het faciliteert ontwikkelaars bij het volgen van pijplijnen, het monitoren van real-time logs en het verifiëren van taakstatussen. Hierdoor kunnen ontwikkelaars snel de redenen voor bouwfouten en hun specifieke locaties identificeren.

4. Tekton Hub: Uitgebreide bibliotheek van pijplijnen en taken
Tekton biedt een uitgebreide reeks pijplijnen en taken die direct beschikbaar zijn. Hoewel ontwikkelaars pijplijnen of taken vanaf nul kunnen schrijven, hebben ze ook de optie om taken en pijplijnen van de Tekton Hub over te nemen. De middelen die van de Hub worden overgenomen, kunnen naar behoefte worden aangepast.
Dit biedt ontwikkelaars flexibiliteit, zodat ze zich niet strikt hoeven te houden aan vooraf gedefinieerde middelen en in plaats daarvan hun middelen volledig kunnen herschrijven op basis van hun voorkeuren.
Enkele belangrijke taken die beschikbaar zijn via de Hub zijn:
- Git-Clone
- Werkruimte schoner
- Maven
- Jib-Maven
- BuildPacks
- Kaniko/Docker
Meer taken zijn beschikbaar op https://hub.tekton.dev/.
Aan de slag met Tekton
Voor ontwikkelaars die Tekton willen gaan gebruiken biedt de officiële Tekton-documentatie gedetailleerde informatie over installatie en configuratie.
Samenvattend biedt Tekton een krachtige, flexibele en schaalbare oplossing voor CI/CD processen. Met zijn CloudNative kenmerken, uitbreidbaarheid en ondersteuning van grote bedrijven heeft Tekton zich gevestigd als een betrouwbaar framework voor ontwikkelaars.
Wilt u de voordelen van Tekton in de praktijk ervaren en ontdekken hoe ACA Group innovatieve oplossingen kan bieden voor uw IT-uitdagingen?
Neemgerust contact op met onze experts voor persoonlijk advies en een naadloze implementatie.

What others have also read


In de complexe wereld van moderne softwareontwikkeling worden bedrijven geconfronteerd met de uitdaging om verschillende applicaties die door verschillende teams worden ontwikkeld en beheerd, naadloos te integreren. De Service Mesh is van onschatbare waarde bij het overwinnen van deze uitdaging. In dit blogartikel verdiepen we ons in Istio Service Mesh en onderzoeken we waarom investeren in een Service Mesh zoals Istio een slimme zet is." Wat is Service Mesh? Een Service Mesh is een softwarelaag die verantwoordelijk is voor alle communicatie tussen applicaties, in deze context services genoemd. Het introduceert nieuwe functionaliteiten om de interactie tussen services te beheren, zoals monitoring, logging, tracing en verkeerscontrole. Een service mesh werkt onafhankelijk van de code van elke individuele service, waardoor het over netwerkgrenzen heen kan werken en kan samenwerken met verschillende beheersystemen. Dankzij een service mesh kunnen ontwikkelaars zich richten op het bouwen van toepassingsfuncties zonder zich zorgen te maken over de complexiteit van de onderliggende communicatie-infrastructuur. Istio Service Mesh in de praktijk Denk aan het beheren van een groot cluster waarop meerdere applicaties draaien die ontwikkeld en onderhouden worden door verschillende teams, elk met verschillende afhankelijkheden zoals ElasticSearch of Kafka. Na verloop van tijd resulteert dit in een complex ecosysteem van applicaties en containers, overzien door verschillende teams. De omgeving wordt zo ingewikkeld dat het voor beheerders steeds moeilijker wordt om het overzicht te bewaren. Dit leidt tot een reeks pertinente vragen: Hoe ziet de architectuur eruit? Welke applicaties interageren met elkaar? Hoe wordt het verkeer beheerd? Bovendien zijn er specifieke uitdagingen die voor elke afzonderlijke applicatie moeten worden aangepakt: Het afhandelen van aanmeldingsprocessen Implementeren van robuuste beveiligingsmaatregelen Netwerkverkeer beheren dat naar de applicatie wordt geleid ... Een Service Mesh, zoals Istio, biedt een oplossing voor deze uitdagingen. Istio fungeert als een proxy tussen de verschillende applicaties (services) in het cluster, waarbij elk verzoek door een component van Istio gaat. Hoe werkt Istio Service Mesh? Istio introduceert een sidecar proxy voor elke service in het microservices ecosysteem. Deze sidecar proxy beheert al het inkomende en uitgaande verkeer voor de dienst. Daarnaast voegt Istio componenten toe die het inkomende en uitgaande verkeer van het cluster afhandelen. Istio's control plane maakt het mogelijk om beleidsregels te definiëren voor verkeersbeheer, beveiliging en monitoring, die vervolgens worden toegepast op de toegevoegde componenten. Voor een beter begrip van de functionaliteit van Istio Service Mesh, zie ons blogartikel "Istio Service Mesh installeren: A Comprehensive Step-by-Step Guide" , een gedetailleerde, stapsgewijze uitleg over de installatie en het gebruik van Istio. Waarom Istio Service Mesh? Verkeersbeheer: Istio maakt gedetailleerd verkeersbeheer mogelijk, waardoor ontwikkelaars eenvoudig verkeer tussen verschillende versies van hun services kunnen routeren, verdelen en controleren. Beveiliging: Istio biedt een robuuste beveiligingslaag met functies zoals verkeersversleuteling met behulp van eigen certificaten, Role-Based Access Control (RBAC) en mogelijkheden voor het implementeren van authenticatie- en autorisatiebeleid. Waarneembaarheid: Door middel van ingebouwde instrumentatie biedt Istio diepgaande observeerbaarheid met tools voor monitoring, logging en gedistribueerde tracering. Hierdoor kunnen IT-teams de prestaties van services analyseren en snel problemen opsporen. Vereenvoudigde communicatie: Istio neemt de complexiteit van servicecommunicatie weg van applicatieontwikkelaars, zodat zij zich kunnen richten op het bouwen van applicatiefuncties. Is Istio geschikt voor uw opstelling? Hoewel de voordelen duidelijk zijn, is het essentieel om te overwegen of de extra complexiteit van Istio past bij jouw specifieke opstelling. Ten eerste is er een sidecar container nodig voor elke ingezette service, wat kan leiden tot ongewenste geheugen- en CPU overhead. Daarnaast kan het zijn dat je team niet beschikt over de specialistische kennis die nodig is voor Istio. Als je overweegt om Istio Service Mesh te gaan gebruiken, vraag dan begeleiding aan specialisten met expertise. Vraag onze experts gerust om hulp. Meer informatie over Istio Istio Service Mesh is een technologische game-changer voor IT-professionals die streven naar geavanceerde controle, beveiliging en observeerbaarheid in hun microservices-architectuur. Istio vereenvoudigt en beveiligt de communicatie tussen services, waardoor IT-teams zich kunnen richten op het bouwen van betrouwbare en schaalbare applicaties. Snel antwoord nodig op al uw vragen over Istio Service Mesh? Neem contact op met onze experts
Lees verder

Bent u dit jaar niet op KubeCon geweest? Lees dan mee voor onze hoogtepunten van de KubeCon / CloudNativeCon-conferentie van dit jaar door het Cloud Native-team van ACA Group! Wat is KubeCon / CloudNativeCon? KubeCon (Kubernetes Conference) / CloudNativeCon , jaarlijks georganiseerd op EMAE door de Cloud Native Computing Foundation (CNCF), is een vlaggenschipconferentie die adopters en technologen van toonaangevende open source en cloud native gemeenschappen op één locatie samenbrengt. Dit jaar kwamen ongeveer 5.000 fysieke en 10.000 virtuele deelnemers opdagen voor de conferentie. CNCF is de open source, leverancier-neutrale hub van cloud native computing, die projecten zoals Kubernetes en Prometheus host om cloud native universeel en duurzaam te maken. Er waren meer dan 300 sessies van partners, industrieleiders, gebruikers en leveranciers over onderwerpen als CI/CD, GitOps, Kubernetes, machine learning, observeerbaarheid, netwerken, prestaties, service mesh en beveiliging. Het is duidelijk dat er altijd iets interessants te horen is op KubeCon, ongeacht je interessegebied of expertiseniveau! Het is duidelijk dat het Cloud Native ecosysteem is uitgegroeid tot een volwassen, trendsettende en revolutionaire game-changer in de industrie. Alles staat in het teken van de Kubernetes-trend en een enorme hoeveelheid organisaties die cloud native producten ondersteunen, gebruiken en hun bedrijf hebben laten groeien door ze te bouwen of te gebruiken in bedrijfskritische oplossingen. De belangrijkste thema's van 2022 Wat ons opviel tijdens KubeCon dit jaar waren de volgende hoofdthema's: De eerste was toenemende volwassenheid en stabilisatie van Kubernetes en bijbehorende producten voor monitoring, CI/CD, GitOps, operators, costing en service meshes, plus bug fixing en kleine verbeteringen. De tweede is een meer uitgebreide focus op beveiliging . Het veiliger maken van pods, het voorkomen van pod trampoline breakouts, end-to-end encryptie en het maken van volledige analyses van bedreigingen voor een complete k8s bedrijfsinfrastructuur. De derde is duurzaamheid en een groeiend bewustzijn dat systemen waarop k8s en de apps erop draaien veel energie verbruiken terwijl 60 tot 80% van de CPU ongebruikt blijft. Zelfs talen kunnen energie(on)efficiënt zijn. Java is een van de meest energie-efficiënte talen, terwijl Python dat blijkbaar veel minder is door de aard van de interpreter/compiler. Bedrijven moeten allemaal plannen maken en werken aan het verminderen van de energievoetafdruk in zowel applicaties als infrastructuur. Autoscaling zal hierbij een belangrijke rol spelen. Hoogtepunten van de sessies Duurzaamheid Datacenters verbruiken wereldwijd 8% van alle opgewekte elektriciteit. We moeten dus nadenken over het effectieve gebruik van onze infrastructuur en inactieve tijd vermijden (gemiddeld is het CPU-gebruik slechts tussen 20 en 40%) als servers draaien, laat ze dan werken met zoveel mogelijk werklasten resources afsluiten wanneer ze niet nodig zijn door het toepassen van autoscaling benaderingen de coderingstechnologie die gebruikt wordt in je software, sommige programmeertalen gebruiken minder CPU. CICD / GitOps GitOps automatiseert infrastructuur updates met behulp van een Git workflow met continue integratie (CI) en continue levering (CI/CD). Wanneer nieuwe code wordt samengevoegd, voert de CI/CD pijplijn de verandering door in de omgeving. Flux is hier een goed voorbeeld van. Flux biedt GitOps voor zowel apps als infrastructuur. Het ondersteunt GitRepository, HelmRepository en Bucket CRD als de enige bron van waarheid. Met A/B- of Canary-implementaties is het eenvoudig om nieuwe functies te implementeren zonder dat dit gevolgen heeft voor alle gebruikers. Als de implementatie mislukt, kan deze eenvoudig worden teruggedraaid. Bekijk het schema van KubeCon voor meer informatie! Kubernetes Hoewel Kubernetes 1.24 een paar weken voor de start van het evenement werd uitgebracht, waren er niet veel gesprekken gericht op de kern van Kubernetes. De meeste gesprekken waren gericht op het uitbreiden van Kubernetes (met behulp van API's, controllers, operators, ...) of best practices rond beveiliging, CI/CD, monitoring ... voor wat er ook draait binnen het Kubernetes-cluster. Als je geïnteresseerd bent in de nieuwe functies die Kubernetes 1.24 te bieden heeft, kun je de officiële website bekijken . Waarneembaarheid Inzicht krijgen in hoe je applicatie draait in je cluster is cruciaal, maar niet altijd even praktisch. Dit is waar eBPF om de hoek komt kijken, dat wordt gebruikt door tools zoals Pixie om gegevens te verzamelen zonder codewijzigingen. Bekijk het schema van KubeCon voor meer informatie! FinOps Nu steeds meer mensen Kubernetes gebruiken, zijn er veel workloads gemigreerd. Al deze containers hebben een voetafdruk. Geheugen, CPU, opslag, ... moeten worden toegewezen, en ze hebben allemaal een kostprijs. Kostenbeheer was een terugkerend onderwerp tijdens de gesprekken. Het gebruik van autoscaling (capaciteit toevoegen maar ook verwijderen) om de benodigde resources aan te passen en het identificeren van ongebruikte resources maken deel uit van deze nieuwe beweging. Nieuwe diensten zoals 'kubecost' worden steeds populairder. Prestaties Een van de meest voorkomende problemen in een cluster is niet genoeg ruimte of resources hebben. Met behulp van een Vertical Pod Autoscaler (VPA) kan dit tot het verleden behoren. Een VPA analyseert en slaat geheugen- en CPU-metriek/gegevens op om zich automatisch aan te passen aan de juiste CPU- en geheugenlimieten. De voordelen van deze aanpak laten je geld besparen, verspilling voorkomen, de onderliggende hardware optimaal dimensioneren, resources op worker nodes afstemmen en de plaatsing van pods in een Kubernetes cluster optimaliseren. Bekijk het schema van KubeCon voor meer informatie! Servicemesh We weten allemaal dat het heel belangrijk is om te weten welke applicatie data deelt met andere applicaties in je cluster. Service mesh biedt verkeerscontrole binnen uw cluster(s). Je kunt elk verzoek dat wordt verzonden of ontvangen van een applicatie naar andere applicaties blokkeren of toestaan. Het biedt ook Metrics, Specs, Split, ... informatie om de gegevensstroom te begrijpen. In de lezing Service Mesh op schaal: Hoe Xbox Cloud Gaming 22k Pods beveiligt met Linkerd , legt Chris uit waarom ze voor Linkerd hebben gekozen en wat de voordelen zijn van een service mesh. Bekijk het schema van KubeCon voor meer informatie! Beveiliging Trampoline pods, klinkt leuk, toch? Tijdens een lezing van twee beveiligingsonderzoekers van Palo Alto Networks leerden we dat ze niet zo leuk zijn. Kort gezegd zijn dit pods die gebruikt kunnen worden om cluster admin privileges te krijgen. Om meer te leren over het concept en hoe ermee om te gaan, raden we je aan om de slides op de KubeCon schedule pagina te bekijken! Lachlan Evenson van Microsoft gaf een duidelijke uitleg over Pod Security in zijn The Hitchhiker's Guide to Pod Security talk. Pod Security is een ingebouwde toelatingscontroleur die Pod-specificaties evalueert aan de hand van een vooraf gedefinieerde set Pod Security-standaarden en bepaalt of de pod moet worden toegelaten of geweigerd. - Lachlan Evenson , Programmamanager bij Microsoft . Pod Security vervangt PodSecurityPolicy vanaf Kubernetes 1.23. Dus als je PodSecurityPolicy gebruikt, is dit misschien een goed moment om Pod Security en het migratiepad verder te onderzoeken. In versie 1.25 wordt de ondersteuning voor PodSecurityPolicy verwijderd. Als je PodSecurityPolicy of Pod Security niet gebruikt, is het zeker tijd om het verder te onderzoeken! Een ander terugkerend thema van deze KubeCon 2022 waren operators. Operators maken het mogelijk om de Kubernetes API uit te breiden met operationele kennis. Dit wordt bereikt door Kubernetes-controllers te combineren met bekeken objecten die de gewenste toestand beschrijven. Ze introduceren Custom Resource Definitions, custom controllers, Kubernetes of cloud resources en logging en metrics, wat het leven makkelijker maakt voor zowel Dev als Ops. Tijdens een lezing van Kevin Ward van ControlPlane leerden we echter dat er ook risico's aan verbonden zijn. Bovendien, en dat is nog belangrijker, vertelde hij ook hoe we die risico's kunnen identificeren met tools zoals BadRobot en een operator thread matrix . Bekijk de KubeCon roosterpagina voor meer informatie! Planning Telemetry Aware Scheduling helpt u om uw workloads te plannen op basis van de statistieken van uw worker nodes. U kunt bijvoorbeeld een regel instellen om geen nieuwe werklasten te plannen op worker nodes met meer dan 90% gebruikt geheugen. Het cluster zal hier rekening mee houden bij het plannen van een pod. Een andere leuke functie van deze tool is dat het ook pods opnieuw kan inplannen om ervoor te zorgen dat uw regels in lijn blijven. Bekijk de KubeCon planningspagina voor meer informatie! Cluster autoscaling Een geweldige manier voor stateless workloads om kosteneffectief te schalen is het gebruik van AWS EC2 Spot, wat reserve VM-capaciteit is die met korting beschikbaar is. Om Spot-instanties effectief te gebruiken in een K8S cluster, moet je aws-node-termination-handler gebruiken. Op deze manier kun je je werklasten van een worker node verplaatsen wanneer Spot besluit deze terug te vorderen. Een ander goed hulpmiddel is Karpenter , een hulpmiddel om Spot-instanties precies op tijd te leveren voor je cluster. Met deze twee tools kun je je stateless workloads kosteneffectief hosten! Bekijk de KubeCon schedule pagina voor meer informatie! Event-gedreven autoscaling Het gebruik van de Horizontal Pod Autoscaler (HPA) is een geweldige manier om pods te schalen op basis van statistieken zoals CPU-gebruik, geheugengebruik en meer. In plaats van te schalen op basis van statistieken, kan Kubernetes Event Driven Autoscaling (KEDA) schalen op basis van gebeurtenissen (Apache Kafka, RabbitMQ, AWS SQS, ...) en het kan zelfs schalen tot 0 in tegenstelling tot HPA. Bekijk het schema van KubeCon voor meer informatie! Wrap-up We hebben dit jaar genoten van de conferentie. We vertrokken met een geïnspireerd gevoel dat we ongetwijfeld zullen vertalen naar interne projecten, nieuwe klantprojecten zullen aanvragen en waar van toepassing zullen bespreken met bestaande klanten. Niet alleen dat, maar we zullen ook onze collega's informeren en een afterglow sessie organiseren voor de geïnteresseerden thuis in België. Als je ons blogartikel leuk vond, stuur ons dan gerust een berichtje. We zijn altijd blij als de inhoud die we publiceren ook voor jou waardevol of interessant is. Als je denkt dat we jou of je bedrijf kunnen helpen bij de adoptie van Cloud Native, stuur me dan een berichtje op peter.jans@aca-it.be. Als laatste willen we Mona bedanken voor de logistiek, Stijn en Ronny voor deze kans en de rest van het team dat achterbleef om de systemen van onze gewaardeerde klanten in de gaten te houden.
Lees verder

Op 7 en 8 december 2023 namen verschillende ACA-leden deel aan CloudBrew 2023 , een inspirerende tweedaagse conferentie over Microsoft Azure. In het decor van de voormalige Lamot brouwerij kregen bezoekers de kans om zich te verdiepen in de nieuwste cloudontwikkelingen en hun netwerk uit te breiden. Met verschillende tracks en boeiende sprekers bood CloudBrew een schat aan informatie. De intieme setting stelde deelnemers in staat om direct contact te leggen met zowel lokale als internationale experts. In dit artikel lichten we graag enkele van de meest inspirerende lezingen van deze tweedaagse cloudbijeenkomst uit: Azure-architectuur: Verstandig kiezen Rik Hepworth , Chief Consulting Officer bij Black Marble en Microsoft Azure MVP/RD, gebruikte een klantvoorbeeld waarbij .NET ontwikkelaars verantwoordelijk waren voor het beheer van de Azure infrastructuur. Hij betrok het publiek in een interactieve discussie om de beste technologieën te kiezen. Hij benadrukte verder het belang van een gebalanceerde aanpak, waarbij nieuwe kennis wordt gecombineerd met bestaande oplossingen voor effectief beheer en ontwikkeling van de architectuur. Van gesloten platform naar landingszone met Azure Policy David de Hoop , Special Agent bij Team Rockstars IT, vertelde over de Azure Enterprise Scale Architecture, een template van Microsoft die bedrijven ondersteunt bij het opzetten van een schaalbare, veilige en beheersbare cloud-infrastructuur. De template biedt richtlijnen voor het ontwerpen van een cloudinfrastructuur die kan worden aangepast aan de behoeften van een bedrijf. Een cruciaal aspect van deze architectuur is de landingszone, een omgeving die zich houdt aan ontwerpprincipes en alle applicatieportfolio's ondersteunt. Het maakt gebruik van abonnementen om applicatie- en platformbronnen te isoleren en te schalen. Azure Policy biedt een reeks richtlijnen om Azure-infrastructuur open te stellen voor een onderneming zonder in te boeten aan beveiliging of beheer. Dit geeft engineers meer vrijheid in hun Azure-omgeving, terwijl beveiligingsfuncties automatisch worden afgedwongen op tenantniveau en zelfs applicatiespecifieke instellingen. Dit zorgt voor een evenwichtige aanpak om zowel flexibiliteit als beveiliging te garanderen, zonder dat er aparte tools of technologieën nodig zijn. De grootste Azure fouten van België waarvan ik wil dat jij ervan leert! Tijdens deze sessie presenteerde Toon Vanhoutte , Azure Solution Architect en Microsoft Azure MVP, de meest voorkomende fouten en menselijke vergissingen, gebaseerd op de ervaringen van meer dan 100 Azure engineers. Aan de hand van waardevolle praktijkvoorbeelden illustreerde hij niet alleen de fouten zelf, maar bood hij ook duidelijke oplossingen en preventieve maatregelen om soortgelijke incidenten in de toekomst te voorkomen. Zijn waardevolle inzichten hielpen zowel beginnende als ervaren Azure engineers hun kennis aan te scherpen en hun implementaties te optimaliseren. Kritieke ICS SCADA-infrastructuur beschermen met Microsoft Defender Deze presentatie van Microsoft MVP/RD, Maarten Goet , richtte zich op het gebruik van Microsoft Defender voor ICS SCADA infrastructuur in de energiesector. De spreker deelde inzichten over het belang van cyberbeveiliging in deze kritieke sector en illustreerde dit met een demo waarin de kwetsbaarheden van dergelijke systemen werden gedemonstreerd. Hij benadrukte de noodzaak van proactieve beveiligingsmaatregelen en benadrukte Microsoft Defender als een krachtige tool voor het beschermen van ICS SCADA-systemen. Azure Digital Twin gebruiken in productie Steven De Lausnay , Specialist Lead Data Architecture en IoT Architect, introduceerde Azure Digital Twin als een geavanceerde technologie om digitale replica's te maken van fysieke omgevingen. Door inzicht te geven in het proces achter Azure Digital Twin, liet hij zien hoe organisaties in productieomgevingen gebruik kunnen maken van deze technologie. Hij benadrukte de waarde van Azure Digital Twin voor het modelleren, monitoren en optimaliseren van complexe systemen. Deze technologie kan een cruciale rol spelen bij het verbeteren van de operationele efficiëntie en het nemen van datagestuurde beslissingen in verschillende industriële toepassingen. Azure Platform aanbevelingen omzetten in goud Magnus Mårtensson , CEO van Loftysoft en Microsoft Azure MVP/RD, had de eer om CloudBrew 2023 af te sluiten met een boeiende samenvatting van de hoogtepunten. Met zijn onderhoudende presentatie bood hij waardevolle reflectie op de verschillende thema's die tijdens het evenement waren besproken. Het was een perfecte afsluiting van een zeer succesvolle conferentie en gaf iedere deelnemer zin om de opgedane inzichten direct in de praktijk te brengen. We kijken nu al uit naar CloudBrew 2024! 🚀
Lees verderWant to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

