Skip to content

Instantly share code, notes, and snippets.

@snelis
Last active June 21, 2017 12:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snelis/a536a95b858f3b4ece40f3ac53ff1ebe to your computer and use it in GitHub Desktop.
Save snelis/a536a95b858f3b4ece40f3ac53ff1ebe to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
: ${IP?Missing desired ip to configure}
: ${HOSTNAME?Missing desired hostname to configure}
: ${ROLE?Missing desired role to configure (master,node)}
: ${NVIDIA?Missing nvidia flag (true,false)}
: ${INGRESS?Missing ingress flag (true,false)}
# Common functions to use in different files
cat > ~/functions.sh << \EOT
#!/usr/bin/env bash
set -e
function install_aur() {
for pkg in $@;
do
mkdir -p ~/packages/$pkg
cd ~/packages/$pkg
if [ ! -d ".git" ]; then
git clone https://aur.archlinux.org/$pkg.git .
fi
makepkg -sric --noconfirm
done;
}
function change_ip() {
CURRENT_IP=`cat /etc/netctl/main_network | grep 'Address=' | cut -d "'" -f2 | cut -d/ -f1`
sudo sed -i -e "s/$CURRENT_IP/$1/g" /etc/netctl/main_network
}
EOT
# Write the script to do the nvidia install
cat > ~/install_nvidia.sh << \EOT
#!/usr/bin/env bash
source ~/functions.sh
sudo pacman -Syu --noconfirm nvidia cuda
install_aur nvidia-docker
sudo systemctl enable nvidia-docker --now
# Trigger the volume with the drivers
nvidia-docker run --rm weriotoss/alpine
EOT
# Source
source ~/functions.sh
# Make the IP static
change_ip $IP
sudo hostnamectl set-hostname $HOSTNAME
# Make the IP static
sudo netctl restart main_network
sudo systemctl restart sshd
# install base tools
sudo pacman -Syu --noconfirm sudo base-devel htop git docker
# install docker
sudo usermod -a -G docker $USER
newgrp docker
#Install go 1.7
mkdir -p ~/packages/go
cd ~/packages/go
curl -L https://archive.archlinux.org/packages/g/go/go-2%3A1.7.5-1-x86_64.pkg.tar.xz -O
sudo pacman -U go-2%3A1.7.5-1-x86_64.pkg.tar.xz
# install kubernetes
install_aur kubernetes cni
sudo mkdir -p /etc/systemd/system/kubelet.service.d/
sudo bash -c "cat > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf" << \EOT
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.we-riot.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
Environment="KUBELET_EXTRA_ARGS=--feature-gates=Accelerators=true"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CGROUP_ARGS $KUBELET_EXTRA_ARGS
EOT
sudo systemctl enable docker
sudo systemctl enable kubelet
sudo kubeadm reset
if [ $NVIDIA ]; then
sh ~/install_nvidia.sh
fi
if [ $ROLE = "master" ]; then
(sleep 5; sudo systemctl start kubelet) &
sudo kubeadm init
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
fi
if [ $ROLE = "node" ]; then
sudo kubeadm join --token=2cb382.c5bae9b829dbc8d8 192.168.70.3:6443
sudo systemctl start kubelet
fi
if [ $INGRESS ]; then
sed -E \
's/(KUBELET_EXTRA_ARGS=.*)\"/\1 --register-with-taints=dedicated=ingress:NoSchedule\"/g' \
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment