Shell脚本快速部署Kubernetes(K8S v1.1版本)集群系统
#!/bin/bash# Description: Installation Kubernetes1.1.3
# Etcd Download: https://github.com/coreos/etcd/releases/download/v2.2.2/etcd-v2.2.2-linux-amd64.tar.gz
# K8S Download: https://storage.googleapis.com/kubernetes-release/release/v1.1.3/kubernetes.tar.gz
. /lib/lsb/init-functions
if [ $(cat /etc/issue |awk '{print $1}') != "Ubuntu" ]; then
echo "Only support ubuntu operating system!"
exit 1
fi
if [ $USER != "root" ]; then
echo "Please use root account operation!"
exit 1
fi
function color_echo() {
if [ $1 == "green" ]; then
echo -e "\033[32;40m$2\033[0m"
elif [ $1 == "red" ]; then
echo -e "\033[31;40m$2\033[0m"
fi
}
function check_install_pkg() {
if [ ! -e $ETCD_FILE -a ! -e $K8S_FILE ]; then
color_echo red "$ETCD_FILE and $K8S_FILE file not exist!"
exit 1
elif [ ! -e $ETCD_FILE ]; then
color_echo red "$ETCD_FILE file not exist!"
exit 1
elif [ ! -e $K8S_FILE ]; then
color_echo red "$K8S_FILE file not exist!"
exit 1
fi
}
function local_ip() {
local NUM ARRAY_LENGTH
NUM=0
for NIC_NAME in $(ls /sys/class/net|grep -vE "lo|docker0"); do
NIC_IP=$(ifconfig $NIC_NAME |awk -F'[: ]+' '/inet addr/{print $4}')
if [ -n "$NIC_IP" ]; then
NIC_IP_ARRAY[$NUM]="$NIC_NAME:$NIC_IP"
let NUM++
fi
done
ARRAY_LENGTH=${#NIC_IP_ARRAY
[*]}
if [ $ARRAY_LENGTH -eq 1 ]; then
LOCAL_IP=${NIC_IP_ARRAY#*:}
return 0
elif [ $ARRAY_LENGTH -eq 0 ]; then
color_echo red "No available network card!"
exit 1
else
# multi network card select
for NIC in ${NIC_IP_ARRAY
[*]}; do
echo $NIC
done
while true; do
read -p "Please enter local use to network card name: " INPUT_NIC_NAME
for NIC in ${NIC_IP_ARRAY
[*]}; do
NIC_NAME=${NIC%:*}
if [ $NIC_NAME == "$INPUT_NIC_NAME" ]; then
LOCAL_IP=${NIC_IP_ARRAY#*:}
return 0
fi
done
echo "Not match! Please input again."
done
fi
}
function check_ip() {
local IP=$1
VALID_CHECK=$(echo $IP|awk -F. '$1/dev/null" ; check_exec_status
scp $SSH_OPTS kubelet kube-proxy root@$MINION_IP:$BIN_DIR
done
# Copy module init scripts to minion
modify_init_script minion
cd $MINION_MODULE_INIT_SCRIPT_DIR
for MINION_IP in ${MINION_IP_ARRAY
[*]}; do
log_action_msg "Copy module init scripts to $MINION_IP:$INIT_SCRIPT_DIR ..."
scp $SSH_OPTS kubelet kube-proxy root@$MINION_IP:$INIT_SCRIPT_DIR ; check_exec_status
done
color_echo green "Kubernetes master installation complete."
;;
minion)
cluster_ip master # Notice input master ip
local_ip
pkill kube
# Install Docker
if ! $(dpkg -l docker-engine >/dev/null 2>&1) && ! $(docker info >/dev/null 2>&1); then
log_action_msg "Start the installation Docker ..."
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D >/dev/null 2>&1
[ $? -ne 0 ] && echo "Docker source secret key register failure!"
DOCKER_U_SOURCE=/tmp/docker_source.tmp
echo "
deb https://apt.dockerproject.org/repo ubuntu-precise main
deb https://apt.dockerproject.org/repo ubuntu-trusty main
deb https://apt.dockerproject.org/repo ubuntu-vivid main
deb https://apt.dockerproject.org/repo ubuntu-wily main
" > $DOCKER_U_SOURCE
OS_CODE_V=$(lsb_release -cs)
DOKER_SOURCE=$(grep $OS_CODE_V $DOCKER_U_SOURCE)
echo "$DOKER_SOURCE" > /etc/apt/sources.list.d/docker.list
rm $DOCKER_U_SOURCE
apt-get update
apt-get install docker-engine-y
if $(dpkg -l docker-engine >/dev/null) && $(docker info >/dev/null); then
color_echo green "Docker installation successfully."
else
apt-get remove ; apt-get install docker-engine --force-yes -y
if ! $(dpkg -l docker-engine >/dev/null) && ! $(docker info >/dev/null); then
color_echo red "Docker installation failure!"
exit 1
fi
fi
fi
# Module Configure option
log_action_msg "Create $OPTS_FILE_DIR/kubelet startup options file ..."
echo "
KUBELET_OPTS=\"\
--address=0.0.0.0 \
--port=10250 \
--hostname_override=$LOCAL_IP \
--api_servers=http://$MASTER_IP:8080 \
--pod-infra-container-image=docker.io/kubernetes/pause:latest \
--logtostderr=true\"
" > $OPTS_FILE_DIR/kubelet
log_action_msg "Create $OPTS_FILE_DIR/kube-proxy startup options file ..."
echo "
KUBE_PROXY_OPTS=\"\
--master=http://$MASTER_IP:8080 \
--proxy-mode=iptables \
--logtostderr=true\"
" > $OPTS_FILE_DIR/kube-proxy
# Starting module
for MODULE_INIT_SCRIPT in $(ls $INIT_SCRIPT_DIR|grep kube.*); do
service $MODULE_INIT_SCRIPT start >/dev/null
check_service_status
done
color_echo green "Kubernetes minion installation complete."
;;
*)
echo "Usage: $0 {master|minion}"
exit 1
;;
esac
页:
[1]