From 91c4278c779736149f0bafb89b5913b6fd461b8c Mon Sep 17 00:00:00 2001 From: Ilya Dmitrichenko Date: Mon, 10 Apr 2017 06:24:59 +0100 Subject: [PATCH 1/2] Use new modular init containers, flatten kubelet image Signed-off-by: Ilya Dmitrichenko --- projects/kubernetes/Boxfile | 2 ++ projects/kubernetes/kube-master.yml | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/projects/kubernetes/Boxfile b/projects/kubernetes/Boxfile index 8b8468635..c4545cc95 100644 --- a/projects/kubernetes/Boxfile +++ b/projects/kubernetes/Boxfile @@ -83,6 +83,8 @@ install_dependencies create_kubelet_wrapper +flatten + env KUBECONFIG: "/etc/kubernetes/admin.conf" set_exec entrypoint: %w(tini -s --), cmd: %w(kubelet.sh) diff --git a/projects/kubernetes/kube-master.yml b/projects/kubernetes/kube-master.yml index 32df3aa0c..652e382a2 100644 --- a/projects/kubernetes/kube-master.yml +++ b/projects/kubernetes/kube-master.yml @@ -2,7 +2,10 @@ kernel: image: "mobylinux/kernel:4.9.x" cmdline: "console=ttyS0 console=tty0 page_poison=1" init: - - "mobylinux/init:c0007f0cdf1ef821a981fcc676e3f1c2dd9ab5b1" + - mobylinux/init:09a26d50c82fb32290513708d30e401cf7c6f916 + - mobylinux/runc:b0fb122e10dbb7e4e45115177a61a3f8d68c19a9 + - mobylinux/containerd:68bb523deea09da293d675cbf88474eced540b8c + - mobylinux/ca-certificates:eabc5a6e59f05aa91529d80e9a595b85b046f935 onboot: - name: sysctl image: "mobylinux/sysctl:2cf2f9d5b4d314ba1bfc22b2fe931924af666d8c" @@ -37,6 +40,14 @@ services: - CAP_NET_RAW net: host oomScoreAdj: -800 + - name: sshd + image: "mobylinux/sshd:160631d59fffc13d523ff7f09b3b49538d34b9cd" + capabilities: + - all + net: host + pid: host + binds: + - /root/.ssh:/root/.ssh - name: docker image: "mobylinux/docker-ce:f6505961df89ca6b5d024f1ac5a6b986359786d1" capabilities: @@ -69,6 +80,8 @@ services: - /var/log:/var/log #/var/log/containers - /etc/kubernetes:/etc/kubernetes files: + - path: root/.ssh/authorized_keys + contents: '# your ssh key goes here' - path: etc/kubernetes/ directory: true outputs: From 85b54d5717f13687e9d588724011e5617085162f Mon Sep 17 00:00:00 2001 From: Ilya Dmitrichenko Date: Mon, 10 Apr 2017 10:39:07 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Fix=20shared=20mounts=20=E2=80=93=C2=A0work?= =?UTF-8?q?ing=20single-node=20Kubernetes=20setup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ilya Dmitrichenko --- projects/kubernetes/Boxfile | 21 +++++++++++----- projects/kubernetes/Makefile | 5 +++- projects/kubernetes/README.md | 4 +-- projects/kubernetes/kube-master.yml | 38 ++++++++++++++++++++--------- 4 files changed, 47 insertions(+), 21 deletions(-) diff --git a/projects/kubernetes/Boxfile b/projects/kubernetes/Boxfile index c4545cc95..37abfaa4e 100644 --- a/projects/kubernetes/Boxfile +++ b/projects/kubernetes/Boxfile @@ -1,4 +1,4 @@ -image_name = "errordeveloper/mobykube" +@image_name = "mobylinux/kubernetes" @versions = { kubernetes: "v1.6.1", @@ -65,8 +65,8 @@ end def kubelet_cmd %w( /hyperkube kubelet - --kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true - --pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true + --kubeconfig=/var/lib/kubeadm/kubelet.conf --require-kubeconfig=true + --pod-manifest-path=/var/lib/kubeadm/manifests --allow-privileged=true --cluster-dns=10.96.0.10 --cluster-domain=cluster.local --cgroups-per-qos=false --enforce-node-allocatable="" ) @@ -74,14 +74,23 @@ def kubelet_cmd #--node-ip="192.168.65.2" end +def create_shell_wrapper script, path + run "echo \"#!/bin/sh\n#{script}\n\" > #{path} && chmod 0755 #{path}" +end + def create_kubelet_wrapper - kubelet_wrapper = "#!/bin/sh\nuntil #{kubelet_cmd.join(' ')} ; do sleep 1 ; done" - run "echo \"#{kubelet_wrapper}\" > /usr/bin/kubelet.sh && chmod 0755 /usr/bin/kubelet.sh" + create_shell_wrapper "until #{kubelet_cmd.join(' ')} ; do sleep 1 ; done", '/usr/bin/kubelet.sh' +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' end install_dependencies create_kubelet_wrapper +create_kubeadm_wrappers flatten @@ -89,4 +98,4 @@ env KUBECONFIG: "/etc/kubernetes/admin.conf" set_exec entrypoint: %w(tini -s --), cmd: %w(kubelet.sh) -tag "#{image_name}:master" +tag "#{@image_name}:latest" diff --git a/projects/kubernetes/Makefile b/projects/kubernetes/Makefile index 65f2fbd94..992fa0307 100644 --- a/projects/kubernetes/Makefile +++ b/projects/kubernetes/Makefile @@ -8,7 +8,10 @@ build-container-images: Boxfile boxbuilder/box:master Boxfile push-container-images: build-container-image - docker push errordeveloper/mobykube:master + docker push mobylinux/kubernetes:latest 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 diff --git a/projects/kubernetes/README.md b/projects/kubernetes/README.md index 883b4869e..4aff31326 100644 --- a/projects/kubernetes/README.md +++ b/projects/kubernetes/README.md @@ -11,12 +11,12 @@ make Boot Kubernetes master OS image using `hyperkit` on macOS: ``` -../../bin/moby run hyperkit -mem 4096 -cpus 2 kube-master +../../bin/moby run hyperkit -cpus 2 -mem 4096 -disk-size 2048 kube-master ``` Manually initialise master with `kubeadm`: ``` -runc exec kubelet kubeadm init --skip-preflight-checks +runc exec kubelet kubeadm-init.sh ``` Once `kubeadm` exits, try `runc exec kubelet kubectl get nodes`. diff --git a/projects/kubernetes/kube-master.yml b/projects/kubernetes/kube-master.yml index 652e382a2..4992884cd 100644 --- a/projects/kubernetes/kube-master.yml +++ b/projects/kubernetes/kube-master.yml @@ -2,9 +2,9 @@ kernel: image: "mobylinux/kernel:4.9.x" cmdline: "console=ttyS0 console=tty0 page_poison=1" init: - - mobylinux/init:09a26d50c82fb32290513708d30e401cf7c6f916 + - mobylinux/init:671bdce1ed0803daeb35e83e4bcd576bb449ea35 - mobylinux/runc:b0fb122e10dbb7e4e45115177a61a3f8d68c19a9 - - mobylinux/containerd:68bb523deea09da293d675cbf88474eced540b8c + - mobylinux/containerd:c7f6ecdcbcb615a53edee556ba03c7c873bc8488 - mobylinux/ca-certificates:eabc5a6e59f05aa91529d80e9a595b85b046f935 onboot: - name: sysctl @@ -15,6 +15,11 @@ onboot: capabilities: - CAP_SYS_ADMIN readonly: true + - name: binfmt + image: "mobylinux/binfmt:bdb754f25a5d851b4f5f8d185a43dfcbb3c22d01" + binds: + - /proc/sys/fs/binfmt_misc:/binfmt_misc + readonly: true - name: format image: "mobylinux/format:53748000acf515549d398e6ae68545c26c0f3a2e" binds: @@ -22,6 +27,15 @@ onboot: capabilities: - CAP_SYS_ADMIN - CAP_MKNOD + - name: mount + image: "mobylinux/mount:d2669e7c8ddda99fa0618a414d44261eba6e299a" + binds: + - /dev:/dev + - /var:/var:rshared,rbind + capabilities: + - CAP_SYS_ADMIN + rootfsPropagation: shared + command: ["/mount.sh", "/var/lib"] services: - name: rngd image: "mobylinux/rngd:3dad6dd43270fa632ac031e99d1947f20b22eec9@sha256:1c93c1db7196f6f71f8e300bc1d15f0376dd18e8891c8789d77c8ff19f3a9a92" @@ -49,7 +63,7 @@ services: binds: - /root/.ssh:/root/.ssh - name: docker - image: "mobylinux/docker-ce:f6505961df89ca6b5d024f1ac5a6b986359786d1" + image: "mobylinux/docker-ce:741bf21513328f674e0cdcaa55492b0b75974e08" capabilities: - all net: host @@ -60,9 +74,9 @@ services: binds: - /dev:/dev - /lib/modules:/lib/modules - - /var/run:/var/run - - /var/lib:/var/lib - - /etc/kubernetes:/etc/kubernetes + - /var:/var:rshared,rbind + - /var/lib/kubeadm:/etc/kubernetes + rootfsPropagation: shared - name: kubelet image: "errordeveloper/mobykube:master" capabilities: @@ -74,15 +88,15 @@ services: options: ["rw","nosuid","noexec","nodev","relatime"] binds: - /dev:/dev - - /var/run:/var/run - - /var/lib:/var/lib + - /var:/var:rshared,rbind + - /var/lib/kubeadm:/etc/kubernetes + #- /var/log:/var/log #/var/log/containers # TODO /{etc,opt}/cni & /var/lib/kubelet:rw,rshared - - /var/log:/var/log #/var/log/containers - - /etc/kubernetes:/etc/kubernetes + rootfsPropagation: shared files: - path: root/.ssh/authorized_keys - contents: '# your ssh key goes here' - - path: etc/kubernetes/ + contents: '# Your ssh key goes here' + - path: var/lib/kubeadm directory: true outputs: - format: kernel+initrd