Files
linuxkit/projects/kubernetes/Boxfile
Ilya Dmitrichenko 52ba02b9c8 Basic multi-node support
Signed-off-by: Ilya Dmitrichenko <errordeveloper@gmail.com>
2017-04-11 15:42:57 +01:00

95 lines
2.7 KiB
Plaintext

@image_name = "mobylinux/kubernetes"
@versions = {
kubernetes: "v1.6.1",
weave: "v1.9.4",
tini: "v0.14.0",
}
from "gcr.io/google_containers/hyperkube-amd64:#{@versions[:kubernetes]}"
def install_packages pkgs
cmds = [
%(apt-get update -q),
%(apt-get upgrade -qy),
%(apt-get install -qy #{pkgs}),
]
cmds.each { |cmd| run cmd }
end
def install_dependencies
prepare = [
'curl --silent "https://packages.cloud.google.com/apt/doc/apt-key.gpg" | apt-key add -',
'echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list',
]
dependencies = %(curl apt-transport-https)
official_packages = %(kubernetes-cni)
kube_release_artefacts = "https://dl.k8s.io/#{@versions[:kubernetes]}/bin/linux/amd64"
weave_launcher = "https://cloud.weave.works/k8s/v1.6/net.yaml?v=#{@versions[:weave]}"
download_files = [
"/etc/weave.yaml" => {
url: weave_launcher,
mode: '0644',
},
"/usr/bin/kubeadm" => {
url: "#{kube_release_artefacts}/kubeadm",
mode: '0755',
},
"/usr/bin/tini" => {
url: "https://github.com/krallin/tini/releases/download/#{@versions[:tini]}/tini",
mode: '0755',
},
]
install_packages dependencies
prepare.each { |cmd| run cmd }
install_packages official_packages
download_files.each do |file|
file.each do |dest,info|
run %(curl --output "#{dest}" --fail --silent --location "#{info[:url]}")
run %(chmod "#{info[:mode]}" "#{dest}")
end
end
end
def kubelet_cmd
%w(
/hyperkube kubelet
--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=""
)
#--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin
#--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
install_dependencies
# At the moment we trigger `kubeadm init` manually on the master, then start nodes which expect `kubeadm join` args in metadata volume
create_shell_wrapper "until #{kubelet_cmd.join(' ')} ; do [ ! -e /dev/sr0 ] && sleep 1 || (mount -o ro /dev/sr0 /mnt && kubeadm join --skip-preflight-checks \\\$(cat /mnt/config)) ; done", '/usr/bin/kubelet.sh'
create_shell_wrapper "kubeadm init --skip-preflight-checks --kubernetes-version #{@versions[:kubernetes]}", '/usr/bin/kubeadm-init.sh'
flatten
env KUBECONFIG: "/etc/kubernetes/admin.conf"
set_exec entrypoint: %w(tini -s --), cmd: %w(kubelet.sh)
tag "#{@image_name}:latest"