Skip to content

zoobab/kubebuild

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

noswpatv3 Build Docker containers inside Kubernetes cluster

Warning

The GitRepo feature of Kubernetes has been deprecated:

https://kubernetes.io/docs/concepts/storage/volumes/#gitrepo

So I am working on a replacement, stay tuned...

Requirements

  1. The GIT repo you are cloning should have a /Dockerfile
  2. You should be able to launch privileged containers inside your Kubernetes cluster
  3. You should have kubectl, sed, bash available in your $PATH.

Usage

$ ./kubebuild.sh http://github.com/zoobab/versaloon.git

Example

$ ./kubebuild.sh https://github.com/zoobab/versaloon.git
[1/4] Templating (with repo named 'versaloon')...OK
[2/4] Launching in kubernetes...
pod "kubebuild" created
[3/4] Waiting for pod, current status ContainerCreating
[3/4] Waiting for pod, current status ContainerCreating
[3/4] Waiting for pod, current status ContainerCreating
[4/4] Tail the log...
Launching docker...OK
REPONAME is defined as versaloon, trying to build it...
Sending build context to Docker daemon  23.44MB
Step 1/16 : FROM ubuntu:14.04
14.04: Pulling from library/ubuntu
c954d15f947c: Pulling fs layer
c3688624ef2b: Pulling fs layer
848fe4263b3b: Pulling fs layer
23b4459d3b04: Pulling fs layer
36ab3b56c8f1: Pulling fs layer
23b4459d3b04: Waiting
36ab3b56c8f1: Waiting
848fe4263b3b: Verifying Checksum
848fe4263b3b: Download complete
c3688624ef2b: Verifying Checksum
c3688624ef2b: Download complete
23b4459d3b04: Verifying Checksum
23b4459d3b04: Download complete
36ab3b56c8f1: Verifying Checksum
36ab3b56c8f1: Download complete
c954d15f947c: Verifying Checksum
c954d15f947c: Download complete
c954d15f947c: Pull complete
c3688624ef2b: Pull complete
848fe4263b3b: Pull complete
23b4459d3b04: Pull complete
36ab3b56c8f1: Pull complete
Digest: sha256:e1c8bff470c771c6e86d3166607e2c74e6986b05bf339784a9cab70e0e03c7c3
Status: Downloaded newer image for ubuntu:14.04
 ---> dc4491992653
Step 2/16 : MAINTAINER Benjamin Henrion <zoobab@gmail.com>
[...]

Add more logs here...

Todo

  • add a logging argument
  • add a status at the end of the build
  • add a timeout to kill the pod in case the build takes too much time
  • add an argument to specify the amount of resources you want to allocate to the build
  • specify a registry to push to (as argument or a config file)
  • specify which commithash or branch to build
  • check if kubectl is working (cluster-info might be enough)
  • problem: gitRepo in kubernetes seems to hang forever if the repo is not existing
  • problem: wait for the pod to be up and in a running state with a timeout
  • run the final image on the cluster
  • document how to run it in OpenShift cluster, which disables non-root containers by default
  • git clone locally and push the repo with some transport (kubectl equivalent for scp) to the cluster
  • use a job instead of a pod
  • use the official docker:dind image instead of the zoobab/dind one

Openshift

Openshift disables non-root containers by default:

$ ./kubebuild.sh https://github.com/zoobab/versaloon.git
[1/4] Templating (with repo named 'versaloon')...OK
[2/4] Launching pod 'kubebuild-7588' in kubernetes...
Error from server (Forbidden): error when creating "/tmp/kubebuild.yaml": pods "kubebuild-7588" is forbidden: unable to validate against any security context constraint: [spec.volumes[0]: Invalid value: "gitRepo": gitRepo volumes are not allowed to be used spec.containers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed]

Links

About

Build docker containers inside your kubernetes cluster

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages