Build and Push Container Images in Kubernetes with Argo Workflows

argo workflows build push Kubernetes

2 min read | by Jordi Prats

Building container images directly in Kubernetes offers a streamlined and efficient way to manage your containerized applications. Tools like Kaniko allow you to build container images inside Kubernetes Pods. In this post, instead of using other frameworks like Tekton or Shipwright, we'll define our custom pipeline directly with Argo Workflows.

First, we'll create a secret to authenticate with the Docker registry using a Kubernetes secret with the dockerconfigjson. We can do this by setting all the credentials in the secret:

kubectl create secret docker-registry dockerhub-registry \  --docker-server=$REGISTRY_SERVER \  --docker-username=$REGISTRY_USER \  --docker-password=$REGISTRY_PASS \  --docker-email=$REGISTRY_EMAIL 

Or directly import our config.json file:

kubectl create secret generic dockerhub-registry \  --from-file=.dockerconfigjson=~/.docker/personal-config.json \  --type=kubernetes.io/dockerconfigjson 

With this secret (assuming public access to the repository), we can build and push the container image using the following Argo Workflow and Kaniko. To do so the workflow will look very similar of what a Pod definition running kaniko would look like:

apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata:  generateName: build-and-push-image- spec:  entrypoint: kaniko-build  volumes:  - name: kaniko-secret  secret:  secretName: dockerhub-registry  items:  - key: .dockerconfigjson  path: config.json  templates:  - name: kaniko-build  container:  image: gcr.io/kaniko-project/executor:latest  args:  - --dockerfile=Dockerfile  - --context=git://github.com/jordiprats/django-ampa.git#refs/heads/main  - --destination=jordiprats/ampa:kaniko  volumeMounts:  - name: kaniko-secret  mountPath: "/kaniko/.docker" 

We can now create the workflow and check its status:

$ kubectl create -f kaniko-workflow.yaml ; kubectl get workflow -w workflow.argoproj.io/build-and-push-image-gvfs4 created NAME STATUS AGE MESSAGE build-and-push-image-gvfs4 Running 0s build-and-push-image-gvfs4 Running 10s build-and-push-image-gvfs4 Succeeded 60s 

Posted on 24/10/2024