我是靠谱客的博主 热心网友,这篇文章主要介绍服务器安装k8s的shell完整脚本,现在分享给大家,希望可以做个参考。

以下是一个完整的 Shell 脚本,可以一键安装单节点 Kubernetes 集群。脚本包含系统初始化、Containerd 安装、Kubernetes 组件安装和集群初始化等步骤。

#!/bin/bash

# 单节点Kubernetes集群一键安装脚本
# 适用于CentOS 7/8或Ubuntu 20.04+系统
# 支持Kubernetes v1.27.3版本

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查命令执行状态
check_status() {
    if [ $? -ne 0 ]; then
        log_error "$1 失败"
        exit 1
    else
        log_info "$1 成功"
    fi
}

# 检查是否为root用户
check_root() {
    if [ "$(id -u)" -ne 0 ]; then
        log_error "请使用root用户执行此脚本"
        exit 1
    fi
}

# 系统初始化
system_init() {
    log_info "开始系统初始化..."
    
    # 关闭防火墙
    if command -v systemctl &>/dev/null; then
        if [ -f /etc/redhat-release ]; then
            systemctl disable --now firewalld
        elif [ -f /etc/debian_version ]; then
            if command -v ufw &>/dev/null; then
                ufw disable
            fi
        fi
    fi
    
    # 关闭SELinux
    if [ -f /etc/selinux/config ]; then
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
        setenforce 0
    fi
    
    # 关闭Swap
    swapoff -a
    sed -i '/swap/d' /etc/fstab
    
    # 设置主机名
    hostnamectl set-hostname k8s-single
    
    # 配置hosts文件
    cat > /etc/hosts <<EOF
127.0.0.1   localhost localhost.localdomain
$(hostname -I | awk '{print $1}') k8s-single
EOF
    
    # 加载内核模块
    cat > /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
    modprobe overlay
    modprobe br_netfilter
    
    # 配置系统参数
    cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
    sysctl --system
    
    log_info "系统初始化完成"
}

# 安装Containerd
install_containerd() {
    log_info "开始安装Containerd..."
    
    if [ -f /etc/redhat-release ]; then
        # CentOS/RHEL
        cat > /etc/yum.repos.d/docker.repo <<EOF
[docker-ce-stable]
name=Docker CE Stable - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/\$releasever/\$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
        yum install -y containerd.io
    elif [ -f /etc/debian_version ]; then
        # Ubuntu
        curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
        echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
        apt-get update
        apt-get install -y containerd.io
    else
        log_error "不支持的操作系统"
        exit 1
    fi
    
    # 配置Containerd
    mkdir -p /etc/containerd
    containerd config default > /etc/containerd/config.toml
    
    # 修改配置
    sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
    sed -i 's|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
    
    # 重启Containerd
    systemctl restart containerd
    systemctl enable containerd
    
    log_info "Containerd安装完成"
}

# 安装Kubernetes组件
install_kubernetes() {
    log_info "开始安装Kubernetes组件..."
    
    if [ -f /etc/redhat-release ]; then
        # CentOS/RHEL
        cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[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
        yum install -y kubelet-1.27.3 kubeadm-1.27.3 kubectl-1.27.3
        systemctl enable --now kubelet
    elif [ -f /etc/debian_version ]; then
        # Ubuntu
        curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.27/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
        echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
        apt-get update
        apt-get install -y kubelet=1.27.3-1.1 kubeadm=1.27.3-1.1 kubectl=1.27.3-1.1
        systemctl enable --now kubelet
    else
        log_error "不支持的操作系统"
        exit 1
    fi
    
    log_info "Kubernetes组件安装完成"
}

# 初始化Kubernetes集群
init_kubernetes_cluster() {
    log_info "开始初始化Kubernetes集群..."
    
    # 创建kubeadm配置文件
    cat > kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: $(hostname -I | awk '{print $1}')
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.27.3
controlPlaneEndpoint: "k8s-single:6443"
networking:
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
imageRepository: registry.aliyuncs.com/google_containers
EOF
    
    # 执行初始化
    kubeadm init --config=kubeadm-config.yaml --upload-certs
    check_status "Kubernetes集群初始化"
    
    # 配置kubectl
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 安装网络插件
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    check_status "网络插件安装"
    
    # 允许Master节点运行Pod
    kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-
    check_status "Master节点配置"
    
    log_info "Kubernetes集群初始化完成"
}

# 验证安装
verify_installation() {
    log_info "开始验证Kubernetes安装..."
    
    # 等待集群组件启动
    log_info "等待集群组件启动..."
    sleep 30
    
    # 检查节点状态
    log_info "检查节点状态:"
    kubectl get nodes
    
    # 检查Pod状态
    log_info "检查系统Pod状态:"
    kubectl get pods --all-namespaces
    
    log_info "Kubernetes验证完成"
}

# 主函数
main() {
    check_root
    
    log_info "开始Kubernetes单节点集群安装..."
    
    system_init
    install_containerd
    install_kubernetes
    init_kubernetes_cluster
    verify_installation
    
    log_info "====================================================================="
    log_info "Kubernetes单节点集群安装完成!"
    log_info "你可以使用以下命令查看集群状态:"
    log_info "  kubectl get nodes"
    log_info "  kubectl get pods --all-namespaces"
    log_info "====================================================================="
}

# 执行主函数
main


最后

以上就是热心网友最近收集整理的关于服务器安装k8s的shell完整脚本的全部内容,更多相关服务器安装k8s内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(408)

评论列表共有 0 条评论

立即
投稿
返回
顶部