diff --git a/projects/kubernetes/.gitignore b/projects/kubernetes/.gitignore new file mode 100644 index 000000000..87935610d --- /dev/null +++ b/projects/kubernetes/.gitignore @@ -0,0 +1,4 @@ +image-cache/common/*.tar +image-cache/common/Dockerfile +image-cache/control-plane/*.tar +image-cache/control-plane/Dockerfile diff --git a/projects/kubernetes/Boxfile b/projects/kubernetes/Boxfile index 37abfaa4e..19d26de64 100644 --- a/projects/kubernetes/Boxfile +++ b/projects/kubernetes/Boxfile @@ -83,8 +83,7 @@ def create_kubelet_wrapper end def create_kubeadm_wrappers - #create_shell_wrapper 'env KUBE_KUBERNETES_DIR=/var/lib/kubeadm kubeadm init --skip-preflight-checks --kubernetes-version v1.6.1 --cert-dir /var/lib/kubeadm/pki', '/usr/bin/kubeadm-init.sh' - create_shell_wrapper "kubeadm init --skip-preflight-checks --kubernetes-version v1.6.1", '/usr/bin/kubeadm-init.sh' + create_shell_wrapper "kubeadm init --skip-preflight-checks --kubernetes-version #{@versions[:kubernetes]}", '/usr/bin/kubeadm-init.sh' end install_dependencies diff --git a/projects/kubernetes/Makefile b/projects/kubernetes/Makefile index 992fa0307..e19c48d15 100644 --- a/projects/kubernetes/Makefile +++ b/projects/kubernetes/Makefile @@ -8,10 +8,44 @@ build-container-images: Boxfile boxbuilder/box:master Boxfile push-container-images: build-container-image - docker push mobylinux/kubernetes:latest + docker image push mobylinux/kubernetes:latest + docker image push mobylinux/kubernetes:latest-image-cache-common + docker image push mobylinux/kubernetes:latest-image-cache-control-plane build-vm-images: ../../bin/moby build -name kube-master kube-master.yml clean: - rm -f kube-master-bzImage kube-master-cmdline kube-master-disk.img kube-master-initrd.img + rm -f -r \ + kube-master-bzImage kube-master-cmdline kube-master-disk.img kube-master-initrd.img \ + image-cache/common image-cache/control-plane + +COMMON_IMAGES := \ + kube-proxy-amd64:v1.6.1 \ + k8s-dns-sidecar-amd64:1.14.1 \ + k8s-dns-kube-dns-amd64:1.14.1 \ + k8s-dns-dnsmasq-nanny-amd64:1.14.1 \ + pause-amd64:3.0 + +CONTROL_PLANE_IMAGES := \ + kube-apiserver-amd64:v1.6.1 \ + kube-controller-manager-amd64:v1.6.1 \ + kube-scheduler-amd64:v1.6.1 \ + etcd-amd64:3.0.17 + +image-cache/%.tar: + mkdir -p $(dir $@) + DOCKER_CONTENT_TRUST=1 docker image pull gcr.io/google_containers/$(shell basename $@ .tar) + docker image save -o $@ gcr.io/google_containers/$(shell basename $@ .tar) + +cache-images: + for image in $(COMMON_IMAGES) ; \ + do $(MAKE) "image-cache/common/$${image}.tar" \ + ; done + cp image-cache/Dockerfile image-cache/common + docker image build -t mobylinux/kubernetes:latest-image-cache-common image-cache/common + for image in $(CONTROL_PLANE_IMAGES) ; \ + do $(MAKE) "image-cache/control-plane/$${image}.tar" \ + ; done + cp image-cache/Dockerfile image-cache/control-plane + docker image build -t mobylinux/kubernetes:latest-image-cache-control-plane image-cache/control-plane diff --git a/projects/kubernetes/README.md b/projects/kubernetes/README.md index 4aff31326..33b2e936c 100644 --- a/projects/kubernetes/README.md +++ b/projects/kubernetes/README.md @@ -11,7 +11,7 @@ make Boot Kubernetes master OS image using `hyperkit` on macOS: ``` -../../bin/moby run hyperkit -cpus 2 -mem 4096 -disk-size 2048 kube-master +./boot-master.sh ``` Manually initialise master with `kubeadm`: diff --git a/projects/kubernetes/boot-master.sh b/projects/kubernetes/boot-master.sh new file mode 100755 index 000000000..09b7fa866 --- /dev/null +++ b/projects/kubernetes/boot-master.sh @@ -0,0 +1,3 @@ +#!/bin/bash -eux +rm -f kube-master-disk.img +../../bin/moby run hyperkit -cpus 2 -mem 4096 -disk-size 2048 kube-master diff --git a/projects/kubernetes/image-cache/Dockerfile b/projects/kubernetes/image-cache/Dockerfile new file mode 100644 index 000000000..e5e1ecafc --- /dev/null +++ b/projects/kubernetes/image-cache/Dockerfile @@ -0,0 +1,6 @@ +FROM mobylinux/docker-ce:741bf21513328f674e0cdcaa55492b0b75974e08 + +ADD . /images + +ENTRYPOINT [ "/bin/sh", "-c" ] +CMD [ "for image in /images/*.tar ; do docker image load -i $image ; done" ] diff --git a/projects/kubernetes/kube-master.yml b/projects/kubernetes/kube-master.yml index 4992884cd..1d0e872a4 100644 --- a/projects/kubernetes/kube-master.yml +++ b/projects/kubernetes/kube-master.yml @@ -77,8 +77,16 @@ services: - /var:/var:rshared,rbind - /var/lib/kubeadm:/etc/kubernetes rootfsPropagation: shared + - name: kubernetes-image-cache-common + image: "mobylinux/kubernetes:latest-image-cache-common" + binds: + - /var/run:/var/run + - name: kubernetes-image-cache-control-plane + image: "mobylinux/kubernetes:latest-image-cache-control-plane" + binds: + - /var/run:/var/run - name: kubelet - image: "errordeveloper/mobykube:master" + image: "mobylinux/kubernetes:latest" capabilities: - all net: host