K8S一键搭建集群脚本

#!/bin/bash
# Author: Nuoyo
# mail:2469329338@qq.com

RED="33[31m"      # Error message
GREEN="33[32m"    # Success message
YELLOW="33[33m"   # Warning message
BLUE="33[36m"     # Info message
PLAIN='33[0m'

colorEcho() {
    echo -e "${1}${@:2}${PLAIN}"
}

checkSystem() {
    result=$(id | awk '{print $1}')
    if [[ $result != "uid=0(root)" ]]; then
        colorEcho $RED " 请以root身份执行该脚本"
        exit 1
    fi

    res=`which yum 2>/dev/null`
    if [[ "$?" != "0" ]]; then
        res=`which apt 2>/dev/null`
        if [[ "$?" != "0" ]]; then
            colorEcho $RED " 不受支持的Linux系统"
            exit 1
        fi
        PMT="apt"
        CMD_INSTALL="apt install -y "
        CMD_REMOVE="apt remove -y "
        CMD_UPGRADE="apt update && apt upgrade -y; apt autoremove -y"
    else
        PMT="yum"
        CMD_INSTALL="yum install -y "
        CMD_REMOVE="yum remove -y "
        CMD_UPGRADE="yum update -y"
    fi
	if [[ $PMT == "apt"   ]];then
	        colorEcho $RED " 不受支持的Linux系统"
            exit 1
	fi
    res=`which systemctl 2>/dev/null`
    if [[ "$?" != "0" ]]; then
        colorEcho $RED " 系统版本过低,请升级到最新版本"
        exit 1
    fi
}


preinstall() {
	hostnamectl set-hostname $ROLE-$HOSTNAME
    #$PMT clean all
    [[ "$PMT" = "apt" ]] && $PMT update
    #echo $CMD_UPGRADE | bash
    echo ""
    colorEcho $BLUE " 安装必要软件"
    if [[ "$PMT" = "yum" ]]; then
        $CMD_INSTALL epel-release
    fi
    $CMD_INSTALL curl vim docker
	res=`which curl 2>/dev/null`
    [[ "$?" != "0" ]] && $CMD_INSTALL curl
	res=`which docker 2>/dev/null`
    [[ "$?" != "0" ]] && $CMD_INSTALL docker
	systemctl enable --now docker

	colorEcho $BLUE "配置服务器环境"
    if [[ -s /etc/selinux/config ]] && grep 'SELINUX=enforcing' /etc/selinux/config; then
        sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
        setenforce 0
    fi
	echo 1 > /proc/sys/net/ipv4/ip_forward
	echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
	echo 'net.ipv4.ip_forward = 1' >>  /etc/sysctl.conf
	sysctl -p
	swapoff -a
}

installk8s(){
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
	colorEcho $BLUE '安装k8s组件'
	$CMD_INSTALL --nogpgcheck kubelet-1.23.5-0 kubeadm-1.23.5-0 kubectl-1.23.5-0
	systemctl enable --now kubelet

}

getip(){
	colorEcho $BLUE " 请选择获取本机ip/vip的方式:"
    echo "   1)网络获取"
    echo "   2)手动输入"
    read -p " 请选择获取本机ip/vip的方式(默认联网获取):" answer
	if [[ -z "$answer" ]]; then
        METHOD="network"
    else
        case $answer in
        1)
            METHOD="network"
            ;;
		2)
            METHOD="matual"
            ;;
        *)
            colorEcho $RED " 无效的选择,使用默认角色"
            METHOD="network"
        esac
    fi
    echo ""
    colorEcho $BLUE " 获取本机ip/vip的方式: $METHOD"
	if [[ $METHOD == 'network' ]];then
		ip=`curl -s icanhazip.com`
	else
		read -p " 请输入本机ip/vip:" ip
	fi
	colorEcho $YELLOW "本机ip/vip地址为: $ip"
	read -p '确认安装请按回车键(CTRL+C退出脚本)' a
}


init(){
cat <<-EOF >/root/kubeadm_init.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.23.5
apiServer:
  certSANs:
  - "$ip"
controlPlaneEndpoint: "$ip:6443"
networking:
  podSubnet: 10.244.0.0/16
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
EOF
	kubeadm init --config=/root/kubeadm_init.yaml|tee /root/kubeinit.log
	mkdir -p $HOME/.kube
	cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
	chown $(id -u):$(id -g) $HOME/.kube/config
	kubectl apply -f 
	colorEcho $GREEN 'k8s安装完成'
}

greplog(){
        colorEcho $RED "关键命令,请注意保存"
        colorEcho $BLUE "如需部署集群"
        colorEcho $BLUE "请在其他master节点中执行下面命令"
        echo ` grep -E  -B 2 '\-\-control-plane' /root/kubeinit.log|sed 's/\\//g'`
        colorEcho $BLUE "请在其他node节点执行完脚本后执行下面命令"
        echo `grep -E  -B 2 '\-\-control-plane' /root/kubeinit.log |grep -v control|sed 's/\\//g'`
}


menu(){
	checkSystem
	colorEcho $BLUE " 请选择本机的角色:"
    echo "   1)master"
    echo "   2)node"
    read -p " 请选择k8s角色(默认master)" answer
	if [[ -z "$answer" ]]; then
        ROLE="master"
    else
        case $answer in
        1)
            ROLE="master"
            ;;
		2)
            ROLE="node"
            ;;
        *)
            colorEcho $RED " 无效的选择,使用默认角色"
            ROLE="master"
        esac
    fi
    echo ""
    colorEcho $BLUE " 当前k8s角色: $ROLE"
	
	if [[ $ROLE == 'master' ]];then
		colorEcho $BLUE " 检测到您设置的角色为master,请选择行为:"
		echo "   1)建立新集群"
		echo "   2)加入旧集群"
		read -p " 请选择master节点行为(默认建立新集群)" answer
		if [[ -z "$answer" ]]; then
			ACTION="new"
		else
			case $answer in
			1)
				ACTION="new"
				;;
			2)
				ACTION="old"
				;;
			*)
				colorEcho $RED " 无效的选择,使用默认行为"
				ACTION="new"
			esac
		fi
		echo ""
		colorEcho $BLUE " 当前k8s节点行为: $ACTION"
		if [[ $ACTION == "new" ]];then
			getip
			preinstall
			installk8s
			init
			greplog
		else
			preinstall
			installk8s
			colorEcho $BLUE " master节点安装完成,请在主master节点日志中拿取命令加入主节点"
			
		fi

	else
		preinstall
		installk8s
		colorEcho $BLUE " node节点安装完成,请在主master节点日志中拿取命令加入主节点"
	fi
}

main(){
	menu
}
main

K8S一键搭建集群脚本

原创文章,作者:AIRF,如若转载,请注明出处:http://www.ai-rf.com/index.php/2023/09/17/k8s%e4%b8%80%e9%94%ae%e6%90%ad%e5%bb%ba%e9%9b%86%e7%be%a4%e8%84%9a%e6%9c%ac/

(0)
AIRFAIRF
上一篇 2023年9月17日
下一篇 2023年9月17日

相关推荐

  • 容器升级内核及重启后遇到的问题

    前景描述 公司10台物理服务器,系统为Redhat7.9,因安装K8S,需将内核升级至3.10.0-1060以上,并修改相关参数,否则会造成内存泄露问题。 操作步骤 需要用到的升级…

    ChatGPT 2022年7月9日
  • 【五】K8S_Service | ClusterIP模式(默认模式)| NodePort模式

    Service概念 在Kubernetes(K8S)中,Service的用途和相关概念如下: 服务发现:Service充当了一组Pod的稳定网络地址和DNS名称的抽象。它提供了一种…

    2023年9月17日
  • docker容器分配指定内存和cpu

    如何给分配内存和cpu?默认情况下,容器使用的资源是不受限制的。也就是可以使用主机内核调度器所允许的最大资源。但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,下面…

    ChatGPT 2023年8月14日
  • Kubernetets-Cka考试题库

    本次测试的所有问题都必须在指定的cluster配置环境中完成。为尽量减少切换,系统已对问题进行分组,同一cluster内的所有问题将连续显示。 开启TAB补全 做题前先配置k8s自…

    ChatGPT 2022年2月18日
  • kubernetes 运维必会的常用命令合集

    查看 kubectl cluster-info     # 查看集群信息kubectl get no -o wide     # 获取节点和服务版本信息,并查看附加信息kubect…

    Deepseek 2023年12月16日
  • 【二】快速搭建卸载K8S集群

    准备工作 需要Linux CentOS 7.x 两台及以上,本文用的 7.9。 Master最低配置2C2G 安装步骤多个节点可以并行操作,默认所有操作各节点都要执行,某些操作仅主…

    2023年9月17日
  • docker迁移备份容器到其他机器

    1 把当前的容器提交为一个镜像: docker ps -a  查看运行的容器ID docker commit 容器名 镜像名 2 将镜像存为tar文件 docker save 镜像…

    ChatGPT 2023年7月15日
  • 适合在虚拟化环境中运行 Kubernetes 的几个场景

    1. 前言 虚拟化技术的快速发展为企业提供了更高的灵活性、资源利用率和成本效益。同时,Kubernetes作为一个开源的容器编排系统,能够有效地管理和调度容器化应用程序。将Kube…

    Deepseek 2023年9月19日
  • K8S常见面试题总结

    1.1.什么是k8s? K8s是kubernetes的简称,其本质是一个开源的容器编排工具,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容…

    2023年9月17日
  • 【四】K8S_Deployment

    Deployment作用 Kubernetes(K8S)中的 Deployment 是用于定义和管理应用程序部署的重要资源对象。Deployment 在 K8S 中具有以下用途和相…

    2023年9月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注