mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-09-30 03:44:02 +00:00
78 lines
2.6 KiB
Ruby
78 lines
2.6 KiB
Ruby
import 'common.rb'
|
|
|
|
from "alpine:edge"
|
|
|
|
def install_node_dependencies
|
|
kube_release_artefacts = "https://dl.k8s.io/#{@versions[:kubernetes]}/bin/linux/amd64"
|
|
cni_release_artefacts = "https://dl.k8s.io/network-plugins/cni-amd64-#{@versions[:cni]}.tar.gz"
|
|
weave_launcher = "https://cloud.weave.works/k8s/v1.6/net?v=#{@versions[:weave]}"
|
|
|
|
download_files = [
|
|
'/etc/weave.yaml' => {
|
|
url: weave_launcher,
|
|
mode: '0644',
|
|
},
|
|
'/tmp/cni.tgz' => {
|
|
url: cni_release_artefacts,
|
|
mode: '0644',
|
|
},
|
|
'/usr/bin/kubelet' => {
|
|
url: "#{kube_release_artefacts}/kubelet",
|
|
mode: '0755',
|
|
},
|
|
'/usr/bin/kubeadm' => {
|
|
url: "#{kube_release_artefacts}/kubeadm",
|
|
mode: '0755',
|
|
},
|
|
'/usr/bin/kubectl' => {
|
|
url: "#{kube_release_artefacts}/kubectl",
|
|
mode: '0755',
|
|
},
|
|
]
|
|
|
|
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
|
|
|
|
run "mkdir -p /opt/cni/bin /etc/cni/net.d && tar xzf /tmp/cni.tgz -C /opt/cni && rm -f /tmp/cni.tgz"
|
|
end
|
|
|
|
def kubelet_cmd
|
|
%w(
|
|
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
|
|
)
|
|
end
|
|
|
|
kubelet_dependencies = %w(libc6-compat util-linux iproute2 iptables ebtables ethtool socat curl)
|
|
install_packages kubelet_dependencies
|
|
install_node_dependencies
|
|
|
|
# Exploit shared mounts, give CNI paths back to the host
|
|
mount_cni_dirs = [
|
|
mount_bind("/opt/cni", "/rootfs/opt/cni"),
|
|
mount_bind("/etc/cni", "/rootfs/etc/cni"),
|
|
]
|
|
|
|
# At the moment we trigger `kubeadm init` manually on the master, then start nodes which expect `kubeadm join` args in metadata volume
|
|
wait_for_node_metadata_or_sleep_until_master_init = "[ ! -e /dev/sr0 ] && sleep 1 || (mount -o ro /dev/sr0 /mnt && kubeadm join --skip-preflight-checks \\\$(cat /mnt/config))"
|
|
|
|
create_shell_wrapper "#{mount_cni_dirs.join(' && ')} && until #{kubelet_cmd.join(' ')} ; do #{wait_for_node_metadata_or_sleep_until_master_init} ; done", '/usr/bin/kubelet.sh'
|
|
|
|
create_shell_wrapper "kubeadm init --skip-preflight-checks --kubernetes-version #{@versions[:kubernetes]} && kubectl create -n kube-system -f /etc/weave.yaml", '/usr/bin/kubeadm-init.sh'
|
|
|
|
flatten
|
|
|
|
env KUBECONFIG: "/etc/kubernetes/admin.conf"
|
|
|
|
set_exec entrypoint: %w(kubelet.sh)
|
|
|
|
tag "#{@image_name}:latest"
|