@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"