Skip to content

Instantly share code, notes, and snippets.

@gabe-ochoa
Last active February 23, 2017 05:22
Show Gist options
  • Save gabe-ochoa/52715d78c49136293db816bd8a6a589a to your computer and use it in GitHub Desktop.
Save gabe-ochoa/52715d78c49136293db816bd8a6a589a to your computer and use it in GitHub Desktop.
Bootstrap k8s clusters on RPi
#!/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