mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-11-04 15:06:19 +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"
 |