diff --git a/projects/kubernetes/.gitignore b/projects/kubernetes/.gitignore index 6af0a22b7..8c1442c10 100644 --- a/projects/kubernetes/.gitignore +++ b/projects/kubernetes/.gitignore @@ -2,5 +2,4 @@ image-cache/common/*.tar image-cache/common/Dockerfile image-cache/control-plane/*.tar image-cache/control-plane/Dockerfile -weave.yaml -network.yaml +kube-weave.yaml diff --git a/projects/kubernetes/Makefile b/projects/kubernetes/Makefile index b0b5b4f29..52042d299 100644 --- a/projects/kubernetes/Makefile +++ b/projects/kubernetes/Makefile @@ -1,8 +1,14 @@ KUBE_RUNTIME ?= docker -KUBE_NETWORK ?= weave-v2.0.5 +KUBE_NETWORK ?= weave -INIT_YAML ?= -INIT_YAML += network.yaml +KUBE_NETWORK_WEAVE ?= v2.0.5 + +ifeq ($(shell uname -s),"Darwin") +KUBE_FORMATS ?= iso-efi +endif +KUBE_FORMATS ?= iso-bios + +KUBE_FORMAT_ARGS := $(patsubst %,-format %,$(KUBE_FORMATS)) all: build-container-images build-vm-images @@ -18,21 +24,19 @@ push-container-images: build-vm-images: kube-master.iso kube-node.iso -# NB cannot use $^ because $(INIT_YAML) is not for consumption by "moby build" -kube-master.iso: kube.yml $(KUBE_RUNTIME).yml $(KUBE_RUNTIME)-master.yml $(INIT_YAML) - moby build -name kube-master -format iso-efi -format iso-bios kube.yml $(KUBE_RUNTIME).yml $(KUBE_RUNTIME)-master.yml +kube-master.iso: kube.yml $(KUBE_RUNTIME).yml $(KUBE_RUNTIME)-master.yml $(KUBE_NETWORK).yml + moby build -name kube-master $(KUBE_FORMAT_ARGS) $^ -kube-node.iso: kube.yml $(KUBE_RUNTIME).yml - moby build -name kube-node -format iso-efi -format iso-bios $^ +kube-node.iso: kube.yml $(KUBE_RUNTIME).yml $(KUBE_NETWORK).yml + moby build -name kube-node $(KUBE_FORMAT_ARGS) $^ -network.yaml: $(KUBE_NETWORK).yaml - ln -nf $< $@ +weave.yml: kube-weave.yaml -weave-%.yaml: - curl -L -o $@ https://cloud.weave.works/k8s/v1.8/net?v=$* +kube-weave.yaml: + curl -L -o $@ https://cloud.weave.works/k8s/v1.8/net?v=$(KUBE_NETWORK_WEAVE) clean: rm -f -r \ kube-*-kernel kube-*-cmdline kube-*-state kube-*-initrd.img *.iso \ - weave-*.yaml network.yaml + kube-weave.yaml $(MAKE) -C image-cache clean diff --git a/projects/kubernetes/bridge.yml b/projects/kubernetes/bridge.yml new file mode 100644 index 000000000..9f9c66aae --- /dev/null +++ b/projects/kubernetes/bridge.yml @@ -0,0 +1,8 @@ +onboot: + - name: bridge + image: busybox:latest + command: ["/bin/sh", "-c", "set -ex; echo '{\"cniVersion\":\"0.3.1\",\"name\":\"default\",\"plugins\":[{\"type\":\"bridge\",\"bridge\":\"cni0\",\"isDefaultGateway\":true,\"ipMasq\":false,\"hairpinMode\":true,\"ipam\":{\"type\":\"host-local\",\"subnet\":\"10.1.0.0/16\",\"gateway\":\"10.1.0.1\"},\"dns\":{\"nameservers\":[\"10.1.0.1\"]}},{\"type\":\"portmap\",\"capabilities\":{\"portMappings\":true},\"snat\":true}]}' > /var/lib/cni/etc/net.d/10-default.conflist; echo '{\"cniVersion\":\"0.2.0\",\"type\":\"loopback\"}' > /var/lib/cni/etc/net.d/99-loopback.conf"] + runtime: + mkdir: ["/var/lib/cni/etc/net.d"] + binds: + - /var/lib:/var/lib diff --git a/projects/kubernetes/cri-containerd.yml b/projects/kubernetes/cri-containerd.yml index 448dc763c..26f04c75f 100644 --- a/projects/kubernetes/cri-containerd.yml +++ b/projects/kubernetes/cri-containerd.yml @@ -1,6 +1,6 @@ services: - name: cri-containerd - image: linuxkitprojects/cri-containerd:7059f247c4135c75722047a2ce2fe6119a0e1681 + image: linuxkitprojects/cri-containerd:72863deaa81a749fe8ff72bd69f863bab719aa06 files: - path: /etc/kubelet.sh.conf contents: | diff --git a/projects/kubernetes/cri-containerd/Dockerfile b/projects/kubernetes/cri-containerd/Dockerfile index 12d02b7e0..9c71512f4 100644 --- a/projects/kubernetes/cri-containerd/Dockerfile +++ b/projects/kubernetes/cri-containerd/Dockerfile @@ -16,7 +16,7 @@ ENV GOPATH=/go PATH=$PATH:/go/bin ENV CRI_CONTAINERD_URL https://github.com/kubernetes-incubator/cri-containerd.git #ENV CRI_CONTAINERD_BRANCH pull/NNN/head -ENV CRI_CONTAINERD_COMMIT v1.0.0-alpha.1 +ENV CRI_CONTAINERD_COMMIT ac8b0979fa634703e0a8d03df03eb51774fcff3d RUN mkdir -p $GOPATH/src/github.com/kubernetes-incubator && \ cd $GOPATH/src/github.com/kubernetes-incubator && \ git clone $CRI_CONTAINERD_URL cri-containerd diff --git a/projects/kubernetes/kube.yml b/projects/kubernetes/kube.yml index c8ee4edf5..3cc61ca20 100644 --- a/projects/kubernetes/kube.yml +++ b/projects/kubernetes/kube.yml @@ -36,7 +36,7 @@ services: - name: sshd image: linuxkit/sshd:b7f21ef1b13300a994e35eac3644e4f84f0ada8a - name: kubelet - image: linuxkitprojects/kubernetes:4d8ef8789cc04cb0e8cf42dc3f34e03ec70daf3d + image: linuxkitprojects/kubernetes:a2693a182f9038d6ac5f7309f4678a9ad11d39ca files: - path: etc/linuxkit.yml metadata: yaml @@ -47,8 +47,8 @@ files: PRETTY_NAME="LinuxKit Kubernetes Project" - path: /usr/libexec/kubernetes/kubelet-plugins symlink: "/var/lib/kubelet-plugins" - - path: /etc/kubeadm/kube-system.init/50-network.yaml - source: network.yaml + - path: /etc/kubeadm/ + directory: true - path: /etc/sysctl.d/01-kubernetes.conf contents: 'net.ipv4.ip_forward = 1' - path: /opt/cni diff --git a/projects/kubernetes/kubernetes/kubeadm-init.sh b/projects/kubernetes/kubernetes/kubeadm-init.sh index 87feee6f6..61530c671 100755 --- a/projects/kubernetes/kubernetes/kubeadm-init.sh +++ b/projects/kubernetes/kubernetes/kubeadm-init.sh @@ -11,9 +11,19 @@ else kubeadm init --skip-preflight-checks --kubernetes-version @KUBERNETES_VERSION@ $@ fi for i in /etc/kubeadm/kube-system.init/*.yaml ; do + n=$(basename "$i") if [ -e "$i" ] ; then - echo "Applying "$(basename "$i") - kubectl create -n kube-system -f "$i" + if [ ! -s "$i" ] ; then # ignore zero sized files + echo "Ignoring zero size file $n" + continue + fi + echo "Applying $n" + if ! kubectl create -n kube-system -f "$i" ; then + touch /var/lib/kubeadm/.kubeadm-init.sh-kube-system.init-failed + touch /var/lib/kubeadm/.kubeadm-init.sh-kube-system.init-"$n"-failed + echo "Failed to apply $n" + continue + fi fi done if [ -f /var/config/kubeadm/untaint-master ] ; then diff --git a/projects/kubernetes/weave.yml b/projects/kubernetes/weave.yml new file mode 100644 index 000000000..c410bf747 --- /dev/null +++ b/projects/kubernetes/weave.yml @@ -0,0 +1,3 @@ +files: + - path: /etc/kubeadm/kube-system.init/50-weave.yaml + source: weave-sa.yaml