Last active
February 23, 2017 05:22
-
-
Save gabe-ochoa/52715d78c49136293db816bd8a6a589a to your computer and use it in GitHub Desktop.
Bootstrap k8s clusters on RPi
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Usage | |
# Kubernetes master node | |
# sudo k8s_pi_bootstrap.sh master | |
# | |
# Kubernetes worker node | |
# sudo k8s_pi_bootstrap.sh worker cluster_token master_ip | |
download_kubeadm () { | |
is_kubeadm_installed | |
if [[ $? == 0 ]]; then | |
echo 'Kubeadm already installed' | |
else | |
echo 'Downloading kubeadm' | |
# trust the kubernetes APT key and add the official APT Kubernetes repository | |
curl -s 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 | |
apt-get update && apt-get install -y kubeadm | |
fi | |
} | |
is_kubeadm_installed () { | |
kubeadm version | |
} | |
kubeadmin () { | |
if [[ $(is_kubeadm_installed) == 0 ]]; then | |
echo 'Kubeadm already installed' | |
else | |
apt-get update && apt-get install -y kubeadm | |
fi | |
} | |
initialize_master_node () { | |
echo 'Initalizing master node' | |
# 10.244.0.0/16 | |
# Default pod CIDR 10.244.0.0/16 | |
if [[ -z "$1" ]]; then | |
CIDR="10.244.0.0/16" | |
else | |
CIDR=$1 | |
fi | |
echo "Pod CIDR $CIDR" | |
kubeadm init \ | |
--pod-network-cidr $CIDR \ | |
--api-external-dns-names=kube-pi.builtbyexp.com \ | |
--use-kubernetes-version 'v1.5.1' | |
set_up_flannel_network | |
} | |
set_up_flannel_network () { | |
curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | sed "s/amd64/arm/g" | kubectl create -f - | |
} | |
deploy_k8s_dashboard () { | |
# Downloading and installing k8s dashboard | |
echo 'Installing k8s dashboard' | |
curl -sSL https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml | sed "s/amd64/arm/g" | kubectl create -f - | |
# create NodePort service for dashboard | |
echo 'Creating NodePort k8s service for dashboard' | |
kubectl -n kube-system get service kubernetes-dashboard -o template --template="{{ (index .spec.ports 0).nodePort }}" | xargs echo | |
} | |
initialize_worker_node () { | |
echo 'Initalizing worker with:' | |
echo "Token: $1" | |
echo "Master IP: $2" | |
kubeadm join --token=$1 $2 | |
} | |
reset_node () { | |
# reseting node and cleaning up | |
echo 'Reseting node and cleaning up' | |
kubeadm reset | |
etcdctl rm --recursive registry | |
rm -rf /var/lib/cni | |
rm -rf /run/flannel | |
rm -rf /etc/cni on master and nodes | |
ifconfig cni0 down | |
brctl delbr cni0 | |
} | |
# start | |
download_kubeadm | |
if [[ $1 == 'master' ]]; then | |
initialize_master_node | |
elif [[ $1 == 'worker' ]]; then | |
initialize_worker_node $2 $3 | |
elif [[ $1 == 'reset' ]]; then | |
reset_node | |
else | |
echo "Options are 'master' or 'worker' " | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment