nics 发表于 2018-9-16 07:47:57

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]
查看完整版本: Shell脚本快速部署Kubernetes(K8S v1.1版本)集群系统