diff --git a/setup-lb-ubuntu-alpha.sh b/setup-lb-ubuntu-alpha.sh new file mode 100755 index 0000000..f5c6dd2 --- /dev/null +++ b/setup-lb-ubuntu-alpha.sh @@ -0,0 +1,109 @@ +#!/bin/bash +# +# source https://github.com/sandervanvugt/cka/setup-lb.sh + +# script to set up load balancing on cluster nodes +# for use in CKA courses by Sander van Vugt +# version 0.5 +# currently only supporting CentOS 7.x +# run this AFTER running setup-docker.sh and setup-kubetools.sh + +## establish key based SSH with remote hosts +# obtain node information +echo this script requires three nodes: control1 control2 and control3 +echo enter the IP address for control1 +read CONTROL1_IP +export CONTROL1_IP=$CONTROL1_IP +echo enter the IP address for control2 +read CONTROL2_IP +export CONTROL2_IP=$CONTROL2_IP +echo enter the IP address for control3 +read CONTROL3_IP +export CONTROL3_IP=$CONTROL3_IP +echo ##### READ ALL OF THIS BEFORE CONTINUING ###### +echo this script requires you to run setup-docker.sh and setup-kubetools.sh first +echo this script is based on the NIC name ens33 +echo if your networkcard has a different name, edit keepalived.conf +echo before continuing and change "interface ens33" to match your config +echo . +echo this script will create a keepalived apiserver at 192.168.4.100 +echo if this IP address does not match your network configuration, +echo manually change the check_apiserver.sh file before continuing +echo press enter to continue or Ctrl-c to interrupt and apply modifications +read + +# performing check on critical files +for i in keepalived.conf check_apiserver.sh haproxy.cfg +do + if [ ! -f $i ] + then + echo $i should exist in the current directory && exit 2 + fi +done + +# create /etc/hosts for all nodes +sudo sh -c 'echo $CONTROL1_IP control1 >> /etc/hosts' +sudo sh -c 'echo $CONTROL2_IP control2 >> /etc/hosts' +sudo sh -c 'echo $CONTROL3_IP control3 >> /etc/hosts' + +cat /etc/hosts + +echo this is the main thing that goes wrong: if it does, manually edit /etc/hosts on all the nodes and run the rest of the script +read + +# generating and distributing SSH keys +ssh-keygen +ssh-copy-id control1 +ssh-copy-id control2 +ssh-copy-id control3 + +# install required software +sudo apt install haproxy keepalived -y +ssh control2 "sudo apt install haproxy keepalived -y" +ssh control3 "sudo apt install haproxy keepalived -y" + +scp /etc/hosts control2:/tmp && ssh -t control2 'sudo cp /tmp/hosts /etc/' +scp /etc/hosts control3:/tmp && ssh -t control3 'sudo cp /tmp/hosts /etc/' + +# create keepalived config +# change IP address to anything that works in your environment! +chmod +x check_apiserver.sh +cp check_apiserver.sh /etc/keepalived/ + + +scp check_apiserver.sh control2:/tmp && ssh -t control2 'sudo cp /tmp/check_apiserver.sh /etc/keepalived' +scp check_apiserver.sh control3:/tmp && ssh -t control3 'sudo cp /tmp/check_apiserver.sh /etc/keepalived' + +#### creating site specific keepalived.conf file +cp keepalived.conf keepalived-control2.conf +cp keepalived.conf keepalived-control3.conf + +sed -i 's/state MASTER/state SLAVE/' keepalived-control2.conf +sed -i 's/state MASTER/state SLAVE/' keepalived-control3.conf +sed -i 's/priority 255/priority 254/' keepalived-control2.conf +sed -i 's/priority 255/priority 253/' keepalived-control3.conf + +cp keepalived.conf /etc/keepalived/ +scp keepalived-control2.conf control2:/tmp && ssh -t control2 'sudo cp /tmp/keepalived-control2.conf /etc/keepalived/keepalived.conf' +scp keepalived-control3.conf control3:/tmp && ssh -t control3 'sudo cp /tmp/keepalived-control3.conf /etc/keepalived/keepalived.conf' + +### rewriting haproxy.cfg with site specific IP addresses +sed -i s/server\ control1\ 1.1.1.1\:6443\ check/server\ control1\ $CONTROL1_IP\:6443\ check/ haproxy.cfg +sed -i s/server\ control2\ 1.1.1.2\:6443\ check/server\ control2\ $CONTROL2_IP\:6443\ check/ haproxy.cfg +sed -i s/server\ control3\ 1.1.1.3\:6443\ check/server\ control3\ $CONTROL3_IP\:6443\ check/ haproxy.cfg + +# copy haproxy.cfg to destinations +cp haproxy.cfg /etc/haproxy/ +scp haproxy.cfg control2:/tmp && ssh -t control2 'sudo cp /tmp/haproxy.cfg /etc/haproxy/' +scp haproxy.cfg control3:/tmp && ssh -t control3 'sudo cp /tmp/haproxy.cfg /etc/haproxy/' + +# start and enable services +systemctl enable keepalived --now +systemctl enable haproxy --now +ssh control2 systemctl enable keepalived --now +ssh control2 systemctl enable haproxy --now +ssh control3 systemctl enable keepalived --now +ssh control3 systemctl enable haproxy --now + +echo setup is now done, please verify +echo the first node that started the services - normally control1 - should run the virtual IP address 192.168.29.100 diff --git a/setup-lb.sh b/setup-lb.sh old mode 100644 new mode 100755