设为首页 收藏本站
查看: 1229|回复: 0

[经验分享] Shell脚本快速部署Kubernetes(K8S v1.1版本)集群系统

[复制链接]

尚未签到

发表于 2018-9-16 07:47:57 | 显示全部楼层 |阅读模式
#!/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[0]#*:}
      
            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[0]#*:}
      
                        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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-584311-1-1.html 上篇帖子: 如何在Kubernetes中暴露服务访问 下篇帖子: 深入kubernetes之Pod——一pod多容器
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表