k8s快速部署-1.33版本

一、重置kubeadm init

bash 复制代码
sudo kubeadm reset --force
# 删除 Calico 相关资源
sudo rm -rf /etc/cni/net.d/calico-*
sudo rm -rf /var/lib/calico/

# 删除其他 CNI 插件(如 Flannel)
sudo rm -rf /etc/cni/net.d/*

二、加入集群出问题,可以用一下命令还原

bash 复制代码
# 首先执行kubeadm重置
sudo kubeadm reset -f

# 删除残留文件
sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/kubelet/
sudo rm -rf /var/lib/etcd/
sudo rm -rf $HOME/.kube

三、提供一个一键部署k8s-1.33版本的脚本

里面的calico可能安装不上,在下面的脚本执行完后单独执行以下命令:

bash 复制代码
curl -LO https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
sudo kubectl apply -f calico.yaml
bash 复制代码
#!/bin/bash
# ==============================================================================
# CentOS 自动化部署 Kubernetes v1.33 集群脚本
# 适用于单 master 多 node 架构,需在 root 权限下执行
# ==============================================================================

# 颜色定义
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"
    exit 1
}

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

# 检查系统版本
OS_VERSION=$(cat /etc/redhat-release | awk '{print $7}' | cut -d. -f1)
if [ "$OS_VERSION" -ne 7 ] && [ "$OS_VERSION" -ne 8 ]; then
    log_warn "当前系统版本为 CentOS $OS_VERSION,建议使用 CentOS 7 或 8"
fi

# 从IP地址生成默认的主机名后缀
generate_hostname_suffix() {
    local IP=$1
    # 提取IP地址的最后一段
    local SUFFIX=$(echo $IP | cut -d. -f4)
    echo $SUFFIX
}

# 1. 设置主机名称
set_hostname() {
    log_info "设置主机名称..."
    local NODE_TYPE=$1
    local IP_ADDR=$2
    local CUSTOM_NAME=$3
    
    # 如果提供了自定义名称,则使用自定义名称
    if [ ! -z "$CUSTOM_NAME" ]; then
        hostnamectl set-hostname "$CUSTOM_NAME"
        log_info "主机名已设置为 $CUSTOM_NAME"
    else
        # 生成默认的主机名后缀
        local HOSTNAME_SUFFIX=$(generate_hostname_suffix $IP_ADDR)
        
        if [ "$NODE_TYPE" == "master" ]; then
            hostnamectl set-hostname "mast$HOSTNAME_SUFFIX"
            log_info "主机名已设置为 mast$HOSTNAME_SUFFIX"
        elif [ "$NODE_TYPE" == "node" ]; then
            hostnamectl set-hostname "node$HOSTNAME_SUFFIX"
            log_info "主机名已设置为 node$HOSTNAME_SUFFIX"
        else
            log_error "节点类型参数错误,应为 'master' 或 'node'"
        fi
    fi
    
    # 添加主机名解析
    echo "$IP_ADDR $(hostname)" >> /etc/hosts
    log_info "已更新 /etc/hosts 文件"
}

# 2. 环境设置
setup_environment() {
    log_info "开始环境设置..."
    
    # 关闭防火墙
    log_info "关闭防火墙..."
    systemctl stop firewalld
    systemctl disable firewalld
    log_info "防火墙已关闭"
    
    # 关闭 SELinux
    log_info "关闭 SELinux..."
    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    log_info "SELinux 已关闭"
    
    # 关闭 swap
    log_info "关闭 swap..."
    swapoff -a
    sed -i '/swap/s/^/#/' /etc/fstab
    log_info "swap 已关闭"
    
    # 加载内核模块
    log_info "加载内核模块..."
    modprobe br_netfilter
    modprobe overlay
    echo "overlay" >> /etc/modules-load.d/overlay.conf
    echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
    log_info "内核模块已加载"
    
    # 优化内核参数
    log_info "优化内核参数..."
    cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
    sysctl --system
    log_info "内核参数已优化"
}

# 3. 安装容器运行时 (containerd)
install_container_runtime() {
    log_info "安装容器运行时..."
    
    # 安装依赖包
    log_info "安装依赖包..."
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 配置 Docker 仓库
    log_info "配置 Docker 仓库..."
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # 安装 containerd
    log_info "安装 containerd..."
    yum install -y containerd.io
    
    # 配置 containerd
    log_info "配置 containerd..."
    containerd config default | tee /etc/containerd/config.toml
    sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
    sed -i 's@sandbox_image = "k8s.gcr.io/pause.*"@sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10"@g' /etc/containerd/config.toml
    
    # 启动 containerd
    log_info "启动 containerd..."
    systemctl enable --now containerd
    log_info "容器运行时安装完成"
}

# 4. 安装 Kubernetes 组件
install_kubernetes_components() {
    log_info "安装 Kubernetes 组件..."
    
    # 配置 Kubernetes 仓库
    log_info "配置 Kubernetes 仓库..."
    cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
EOF
    
    # 清理并重建缓存
    log_info "清理并重建 yum 缓存..."
    yum clean all
    yum makecache
    
    # 安装指定版本的 kubelet、kubeadm、kubectl
    log_info "安装 kubelet、kubeadm、kubectl..."
    yum install -y kubelet-1.33.1 kubeadm-1.33.1 kubectl-1.33.1
    
    # 启动 kubelet
    log_info "启动 kubelet..."
    systemctl enable --now kubelet
    log_info "Kubernetes 组件安装完成"
}

# 5. 初始化 master 节点
init_master_node() {
    log_info "初始化 master 节点..."
    
    local IP_ADDR=$1
    
    # 执行 kubeadm init
    log_info "执行 kubeadm init 命令..."
    kubeadm init \
        --apiserver-advertise-address=$IP_ADDR \
        --image-repository=registry.aliyuncs.com/google_containers \
        --kubernetes-version=v1.33.1 \
        --pod-network-cidr=10.244.0.0/16 \
        --cri-socket=unix:///var/run/containerd/containerd.sock
    
    if [ $? -ne 0 ]; then
        log_error "kubeadm init 失败,请检查日志"
    fi
    
    log_info "master 节点初始化成功"
    
    # 配置 kubectl
    log_info "配置 kubectl..."
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 设置 kubectl 别名
    echo "alias k='kubectl'" >> ~/.bashrc
    source ~/.bashrc
    
    log_info "kubectl 配置完成"
}

# 6. 安装网络插件 (Calico)
install_calico() {
    log_info "安装 Calico 网络插件..."
    
    # 下载 Calico 配置文件
    log_info "下载 Calico 配置文件..."
    if ! command -v wget &> /dev/null; then
        yum install -y wget
    fi
    
    # 由于国内网络问题,使用国内镜像
    log_info "下载 Calico 镜像..."
    if ! command -v ctr &> /dev/null; then
        yum install -y cri-tools
    fi
    
    # 这里使用预先下载的镜像,实际使用时请确保镜像已下载
    log_warn "请确保已下载 calico.tar.gz 镜像文件"
    ctr -n=k8s.io images import calico.tar.gz
    
    # 应用 Calico 配置
    log_info "应用 Calico 配置..."
    if [ -f "calico.yaml" ]; then
        kubectl apply -f calico.yaml
    else
        log_warn "未找到 calico.yaml,请到官网下载最新版本"
        log_warn "下载地址: https://docs.projectcalico.org/manifests/calico.yaml"
    fi
    
    log_info "Calico 安装完成"
    
    # 等待网络插件就绪
    log_info "等待网络插件就绪..."
    sleep 30
}

# 7. 加入 node 节点
join_node_to_cluster() {
    log_info "将节点加入集群..."
    
    local MASTER_IP=$1
    local TOKEN=$2
    local CERT_HASH=$3
    
    # 执行 join 命令
    log_info "执行 kubeadm join 命令..."
    kubeadm join $MASTER_IP:6443 \
        --token $TOKEN \
        --discovery-token-ca-cert-hash sha256:$CERT_HASH
    
    if [ $? -ne 0 ]; then
        log_error "节点加入集群失败,请检查日志"
    fi
    
    log_info "节点已成功加入集群"
}

# 8. 验证集群状态
verify_cluster() {
    log_info "验证集群状态..."
    
    # 等待节点就绪
    log_info "等待节点就绪..."
    sleep 60
    
    # 查看节点状态
    log_info "集群节点状态:"
    kubectl get nodes
    
    # 查看 pod 状态
    log_info "系统 Pod 状态:"
    kubectl get pods -A
    
    log_info "集群验证完成,Kubernetes 集群已成功部署"
}

# 主函数
main() {
    log_info "开始 Kubernetes v1.33 集群部署..."
    
    local NODE_TYPE=$1
    local IP_ADDR=$2
    local CUSTOM_NAME=$3
    local MASTER_IP=$4
    local TOKEN=$5
    local CERT_HASH=$6
    
    # 根据节点类型执行不同操作
    if [ "$NODE_TYPE" == "master" ]; then
        log_info "部署 master 节点..."
        set_hostname "master" "$IP_ADDR" "$CUSTOM_NAME"
        setup_environment
        install_container_runtime
        install_kubernetes_components
        init_master_node "$IP_ADDR"
        install_calico
        verify_cluster
        
        # 输出 node 节点加入命令
        log_info "以下是 node 节点加入集群的命令:"
        kubeadm token create --print-join-command
    elif [ "$NODE_TYPE" == "node" ]; then
        log_info "部署 node 节点..."
        if [ -z "$MASTER_IP" ] || [ -z "$TOKEN" ] || [ -z "$CERT_HASH" ]; then
            log_error "node 节点部署需要提供 master IP、token 和证书哈希"
        fi
        
        set_hostname "node" "$IP_ADDR" "$CUSTOM_NAME"
        setup_environment
        install_container_runtime
        install_kubernetes_components
        join_node_to_cluster "$MASTER_IP" "$TOKEN" "$CERT_HASH"
        verify_cluster
    else
        log_error "节点类型参数错误,应为 'master' 或 'node'"
    fi
    
    log_info "Kubernetes v1.33 集群部署完成!"
}

# 检查参数
if [ $# -lt 2 ]; then
    echo "用法: $0 [master|node] [IP地址] [自定义名称] [master_IP] [token] [cert_hash]"
    echo "  master 模式: $0 master [本机IP] [自定义名称]"
    echo "  node 模式: $0 node [本机IP] [自定义名称] [master_IP] [token] [cert_hash]"
    exit 1
fi

# 执行主函数
main $@

使用chmod +x k8s.sh赋予执行权限

具体用法:IP和各种配置按照自己的环境来!!!

部署 master 节点并指定名称
bash 复制代码
# 使用自定义名称部署 master 节点
./k8s_deploy.sh master 192.168.74.180 k8s-master
部署 node 节点并指定名称
bash 复制代码
# 使用自定义名称部署 node 节点
./k8s_deploy.sh node 192.168.74.181 k8s-node-01 192.168.74.180 1fik86.bmm71kteysd8g7up 98a92989b7377d06135786b1ca2

master节点执行完后会打印日志信息,里面有加入集群需要的token和hash值:

bash 复制代码
[INFO] 集群验证完成,Kubernetes 集群已成功部署
[INFO] 以下是 node 节点加入集群的命令:
kubeadm join 10.1.2.22:6443 --token d96479.0bdqfa3vrplyt9gq --discovery-token-ca-cert-hash sha256:8600c99694c2decf84cd9030ac9f7861c6a53dd40d0b9d8e13bb031c438cd8d7 
[INFO] Kubernetes v1.33 集群部署完成!
相关推荐
亚洲第一中锋_哈达迪几秒前
详解缓存淘汰策略:LFU
后端·缓存·golang
灰小猿3 分钟前
多级@JsonTypeInfo和@JsonSubTypes注解使用详解及场景分析
java·后端·mysql·spring·spring cloud
子林super15 分钟前
PostgreSQL主从切换后时间线修复操作手册
后端
程序员鱼皮22 分钟前
Stack Overflow,彻底凉了!
前端·后端·计算机·程序员·互联网
neoooo24 分钟前
Spring Boot 中的 synchronized(this):到底锁住了谁?
java·spring boot·后端
京东云开发者38 分钟前
基于业务知识和代码库增强的大模型生成代码实践
后端
贵州数擎科技有限公司1 小时前
LangChain 快速构建你的第一个 LLM 应用
前端·后端
小王的饲养员1 小时前
Apipost 与 Apifox 数据库功能对比:深入解析与应用场景分析
大数据·数据库·人工智能·后端·postman
白仑色1 小时前
Spring Boot 安全登录系统:前后端分离实现
spring boot·后端·安全
error_cn1 小时前
sort命令的稳定性分析
后端