- First, install GNU tar:
brew install --with-default-names gnu-tar
- Ensure at least 4GB RAM available to Docker for Mac
go get k8s.io/kubernetes && cd $GOPATH/src/k8s.io/kubernetes
(commit changes to branch)
In the Kubernetes repo:
bash build/run.sh make cross KUBE_FASTBUILD=true ARCH=amd64
Without the KUBE_FASTBUILD you will cross compile a matrix of platforms and waste 45mins of your time. Should take 10-15 minutes when compiling for linux/amd64.
ACS runs Kubernetes via a single container image called hyperkube, as opposed to individual binaries on the host VMs.
The following will put the compiled k8s binaries into a Docker image.
cd cluster/images/hyperkube/
make VERSION=arm-backoff-spike ARCH=amd64 REGISTRY=seanknox
# it downloads some base images, and creates your release image
hyperkube$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
seanknox/hyperkube-amd64 arm-backoff-spike 44c30ac8c8a2 17 minutes ago 608MB
$ make build VERSION=arm-backoff-spike ARCH=amd64 REGISTRY=seanknox
cp -r ./* /var/folders/w0/20ws9w_s5rzdym83kjq423g80000gp/T/hyperkubeXXXXXX.OoE9jbhP
mkdir -p /var/folders/w0/20ws9w_s5rzdym83kjq423g80000gp/T/hyperkubeXXXXXX.OoE9jbhP/cni-bin
cp ../../../_output/dockerized/bin/linux/amd64/hyperkube /var/folders/w0/20ws9w_s5rzdym83kjq423g80000gp/T/hyperkubeXXXXXX.OoE9jbhP
chmod a+rx /var/folders/w0/20ws9w_s5rzdym83kjq423g80000gp/T/hyperkubeXXXXXX.OoE9jbhP/hyperkube
cd /var/folders/w0/20ws9w_s5rzdym83kjq423g80000gp/T/hyperkubeXXXXXX.OoE9jbhP && sed -i.back "s|ARCH||g" Dockerfile
cd /var/folders/w0/20ws9w_s5rzdym83kjq423g80000gp/T/hyperkubeXXXXXX.OoE9jbhP && sed -i.back "s|BASEIMAGE|debian:jessie|g" Dockerfile
cd /var/folders/w0/20ws9w_s5rzdym83kjq423g80000gp/T/hyperkubeXXXXXX.OoE9jbhP && sed -i.back "s|CACHEBUST|B3B345E5-57E4-4A1E-954F-E9A80EAFC9DE|g" Dockerfile
# When building "normally" for amd64, remove the whole line, it has no part in the amd64 image
cd /var/folders/w0/20ws9w_s5rzdym83kjq423g80000gp/T/hyperkubeXXXXXX.OoE9jbhP && sed -i "" "/CROSS_BUILD_/d" Dockerfile
sed: can't read /CROSS_BUILD_/d: No such file or directory
make: *** [build] Error 2
...means you're using gnu-sed
on MacOS. You'll need to ensure the default MacOS bin /usr/bin/sed
is foremost in your $PATH
. I uninstalled it (homebrew uninstall gnu-sed
).
docker push seanknox/hyperkube-amd64
I think this line does not appear to do anything:
sed -i -e "s@${OLD_IMAGE}@${NEW_IMAGE}@g" /etc/systemd/system/kubelet.service
And this line we need in the master upgrade script:
sed -i -e "s@${OLD_IMAGE}@${NEW_IMAGE}@g" /etc/default/kubelet