mirror of https://github.com/k3s-io/k3s
252 lines
7.1 KiB
Bash
Executable File
252 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2015 Google Inc. All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# simple use the sed to replace some ip settings on user's demand
|
|
# Run as root only
|
|
|
|
# author @WIZARD-CXY @resouer
|
|
|
|
set -e
|
|
|
|
#clean all init/init.d/configs
|
|
function do_backup_clean() {
|
|
#backup all config files
|
|
init_files=`ls init_conf`
|
|
for i in $init_files
|
|
do
|
|
if [ -f /etc/init/$i ]
|
|
then
|
|
mv /etc/init/${i} /etc/init/${i}.bak
|
|
fi
|
|
done
|
|
initd_files=`ls initd_scripts`
|
|
for i in $initd_files
|
|
do
|
|
if [ -f /etc/init.d/$i ]
|
|
then
|
|
mv /etc/init.d/${i} /etc/init.d/${i}.bak
|
|
fi
|
|
done
|
|
default_files=`ls default_scripts`
|
|
for i in $default_files
|
|
do
|
|
if [ -e /etc/default/$i ]
|
|
then
|
|
mv /etc/default/${i} /etc/default/${i}.bak
|
|
fi
|
|
done
|
|
# clean work dir
|
|
if [ ! -d ./work ]
|
|
then
|
|
mkdir work
|
|
fi
|
|
cp -rf default_scripts init_conf initd_scripts work
|
|
}
|
|
|
|
function cpMaster(){
|
|
# copy /etc/init files
|
|
cp work/init_conf/etcd.conf /etc/init/
|
|
cp work/init_conf/kube-apiserver.conf /etc/init/
|
|
cp work/init_conf/kube-controller-manager.conf /etc/init/
|
|
cp work/init_conf/kube-scheduler.conf /etc/init/
|
|
|
|
# copy /etc/initd/ files
|
|
cp work/initd_scripts/etcd /etc/init.d/
|
|
cp work/initd_scripts/kube-apiserver /etc/init.d/
|
|
cp work/initd_scripts/kube-controller-manager /etc/init.d/
|
|
cp work/initd_scripts/kube-scheduler /etc/init.d/
|
|
|
|
# copy default configs
|
|
cp work/default_scripts/etcd /etc/default/
|
|
cp work/default_scripts/kube-apiserver /etc/default/
|
|
cp work/default_scripts/kube-scheduler /etc/default/
|
|
cp work/default_scripts/kube-controller-manager /etc/default/
|
|
}
|
|
|
|
function cpMinion(){
|
|
# copy /etc/init files
|
|
cp work/init_conf/etcd.conf /etc/init/etcd.conf
|
|
cp work/init_conf/kubelet.conf /etc/init/kubelet.conf
|
|
cp work/init_conf/flanneld.conf /etc/init/flanneld.conf
|
|
cp work/init_conf/kube-proxy.conf /etc/init/
|
|
|
|
# copy /etc/initd/ files
|
|
cp work/initd_scripts/etcd /etc/init.d/
|
|
cp work/initd_scripts/flanneld /etc/init.d/
|
|
cp work/initd_scripts/kubelet /etc/init.d/
|
|
cp work/initd_scripts/kube-proxy /etc/init.d/
|
|
|
|
# copy default configs
|
|
cp work/default_scripts/etcd /etc/default/
|
|
cp work/default_scripts/flanneld /etc/default/
|
|
cp work/default_scripts/kube-proxy /etc/default
|
|
cp work/default_scripts/kubelet /etc/default/
|
|
}
|
|
|
|
# check if input IP in machine list
|
|
function inList(){
|
|
if [ "$#" -eq 1 ]; then
|
|
echo -e "\e[0;31mERROR\e[0m: "$1" is not in your machine list."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# set values in ETCD_OPTS
|
|
function configEtcd(){
|
|
echo ETCD_OPTS=\"-name $1 -initial-advertise-peer-urls http://$2:2380 -listen-peer-urls http://$2:2380 -initial-cluster-token etcd-cluster-1 -initial-cluster $3 -initial-cluster-state new\" > work/default_scripts/etcd
|
|
}
|
|
|
|
# check root
|
|
if [ "$(id -u)" != "0" ]; then
|
|
echo >&2 "Please run as root"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Welcome to use this script to configure k8s setup"
|
|
|
|
echo
|
|
|
|
PATH=$PATH:/opt/bin
|
|
|
|
# use ubuntu
|
|
if ! $(grep Ubuntu /etc/lsb-release > /dev/null 2>&1)
|
|
then
|
|
echo "warning: not detecting a ubuntu system"
|
|
exit 1
|
|
fi
|
|
|
|
# check etcd
|
|
if ! $(which etcd > /dev/null)
|
|
then
|
|
echo "warning: etcd binary is not found in the PATH: $PATH"
|
|
exit 1
|
|
fi
|
|
|
|
# check kube commands
|
|
if ! $(which kube-apiserver > /dev/null) && ! $(which kubelet > /dev/null)
|
|
then
|
|
echo "warning: kube binaries are not found in the $PATH"
|
|
exit 1
|
|
fi
|
|
|
|
# detect the etcd version, we support only etcd 2.0.
|
|
etcdVersion=$(/opt/bin/etcd --version | awk '{print $3}')
|
|
|
|
if [ "$etcdVersion" != "2.0.0" ]; then
|
|
echo "We only support 2.0.0 version of etcd"
|
|
exit 1
|
|
fi
|
|
|
|
do_backup_clean
|
|
|
|
# use an array to record name and ip
|
|
declare -A mm
|
|
ii=1
|
|
# we use static etcd configuration
|
|
# see https://github.com/coreos/etcd/blob/master/Documentation/clustering.md#static
|
|
echo "Please enter all your cluster node ips, MASTER node comes first"
|
|
read -p "And separated with blank space like \"<ip_1> <ip_2> <ip_3>\": " etcdIPs
|
|
|
|
for i in $etcdIPs
|
|
do
|
|
name="infra"$ii
|
|
item="$name=http://$i:2380"
|
|
if [ "$ii" == 1 ]; then
|
|
cluster=$item
|
|
#record the masterIP for later use.
|
|
masterIP=$i
|
|
else
|
|
cluster="$cluster,$item"
|
|
if [ "$ii" -gt 2 ]; then
|
|
minionIPs="$minionIPs,$i"
|
|
else
|
|
minionIPs="$i"
|
|
fi
|
|
fi
|
|
mm[$i]=$name
|
|
let ii++
|
|
done
|
|
|
|
# input node IPs
|
|
while true; do
|
|
echo "This machine acts as"
|
|
echo -e " both MASTER and MINION: \033[1m1\033[0m"
|
|
echo -e " only MASTER: \033[1m2\033[0m"
|
|
echo -e " only MINION: \033[1m3\033[0m"
|
|
read -p "Please choose a role > " option
|
|
echo
|
|
|
|
case $option in
|
|
[1] )
|
|
# as both master and minion
|
|
read -p "IP address of this machine > " myIP
|
|
echo
|
|
etcdName=${mm[$myIP]}
|
|
inList $etcdName $myIP
|
|
configEtcd $etcdName $myIP $cluster
|
|
# For minion set MINION IP in default_scripts/kubelet
|
|
sed -i "s/MY_IP/${myIP}/g" work/default_scripts/kubelet
|
|
sed -i "s/MASTER_IP/${masterIP}/g" work/default_scripts/kubelet
|
|
sed -i "s/MASTER_IP/${masterIP}/g" work/default_scripts/kube-proxy
|
|
|
|
# For master set MINION IPs in kube-controller-manager
|
|
if [ -z "$minionIPs" ]; then
|
|
#one node act as both minion and master role
|
|
minionIPs="$myIP"
|
|
else
|
|
minionIPs="$minionIPs,$myIP"
|
|
fi
|
|
|
|
sed -i "s/MINION_IPS/${minionIPs}/g" work/default_scripts/kube-controller-manager
|
|
|
|
cpMaster
|
|
cpMinion
|
|
break
|
|
;;
|
|
[2] )
|
|
# as master
|
|
read -p "IP address of this machine > " myIP
|
|
echo
|
|
etcdName=${mm[$myIP]}
|
|
inList $etcdName $myIP
|
|
configEtcd $etcdName $myIP $cluster
|
|
# set MINION IPs in kube-controller-manager
|
|
sed -i "s/MINION_IPS/${minionIPs}/g" work/default_scripts/kube-controller-manager
|
|
cpMaster
|
|
break
|
|
;;
|
|
[3] )
|
|
# as minion
|
|
read -p "IP address of this machine > " myIP
|
|
echo
|
|
etcdName=${mm[$myIP]}
|
|
inList $etcdName $myIP
|
|
configEtcd $etcdName $myIP $cluster
|
|
# set MINION IP in default_scripts/kubelet
|
|
sed -i "s/MY_IP/${myIP}/g" work/default_scripts/kubelet
|
|
sed -i "s/MASTER_IP/${masterIP}/g" work/default_scripts/kubelet
|
|
sed -i "s/MASTER_IP/${masterIP}/g" work/default_scripts/kube-proxy
|
|
cpMinion
|
|
break
|
|
;;
|
|
* )
|
|
echo "Please choose 1 or 2 or 3."
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo -e "\e[0;32mConfigure Success\033[0m"
|