2025最新版 K8S 集群搭建 CentOS9 + K8S1.33.1

前言

没有公司环境,发现没有K8S 运行环境,觉得自己动手搭一个。先搭个简单版的,一个master, 一个node. 后面找个时间在云上在搭建一套。

前期准备 >>>>>>>>> 下面操作,Master+Node 操作:

  • 关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld

  • 关闭安全机制, 关闭SELinux
    sed -i 's/enforcing/disabled/' /etc/selinux/config ----永久生效,需重启
    setenforce 0 -------------临时生效

  • 关闭交换分区swap(K8S 禁止虚拟内存以提高性能)
    sed -ri 's/.swap./#&/' /etc/fstab -----------永久生效,需重启
    Swapoff -a ----临时

  • 永久关闭交换分区方法二:
    sudo vi /etc/fstab
    -- 在该行前添加 # 注释掉,或直接删除:
    -- /dev/mapper/centos-swap swap swap defaults 0 0

######## 禁用 systemd 管理的交换分区服务:

sudo systemctl disable --now swap.target

  • 验证
    sudo swapon --show

  • 设置主机名
    hostnamectl set-hostname k8s-master

从节点执行:

hostnamectl set-hostname k8s-node1

  • 配置hosts解析
    cat >> /etc/hosts <<EOF
    192.168.183.135 k8s-master01
    192.168.183.136 k8s-node01
    EOF

  • 配置内核(网桥)参数
    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

  • 加载br_netfilter模块
    modprobe br_netfilter

  • 查看是否加载
    lsmod | grep br_netfilter


    image.png
  • 应用 sysctl 参数而不重新启动
    sysctl --system

使用以下命令验证 net.ipv4.ip_forward 是否设置为 1:

sysctl net.ipv4.ip_forward

安装containerd >>>>>>>>> 下面操作,Master+Node 操作:

  • 获取阿里云YUM源:
    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  • 检查是否添加了docker-ce仓库:
    ls /etc/yum.repos.d/
    centos-addons.repo centos.repo docker-ce.rep

  • 查看YUM源中Containerd软件:
    yum list | grep containerd
    containerd.io.x86_64 1.7.24-3.1.el9 docker-ce-stable

  • 使用yum命令安装Containerd.io软件,即可安装Containerd
    yum -y install containerd.io

  • 验证是否安装成功
    rpm -qa | grep containerd


    image.png
  • 生成默认配置并覆盖当前文件(备份原有配置)
    containerd config default | tee /etc/containerd/config.toml.template
    cp /etc/containerd/config.toml /etc/containerd/config.toml.bak # 备份原文件
    mv /etc/containerd/config.toml.template /etc/containerd/config.toml


    image.png
  • 修改配置文件 vim /etc/containerd/config.toml
    [plugins]
    指定旧版接口,并且设置驱动
    [plugins."io.containerd.grpc.v1.cri".containerd]
    default_runtime_name = "runc"
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
    runtime_type = "io.containerd.runc.v2"
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
    这里提前指定pause沙盒镜像的国内镜像源,后续使用kubeadm初始化集群的时候要用,防止出现网络问题
    [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10"
    这里同样是指定镜像源,增加使用国内镜像
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://docker.1ms.run"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
    endpoint = ["https://registry.aliyuncs.com/k8sxio"] # 阿里云镜像

  • 如果应用此更改,请确保重新启动 containerd
    systemctl restart containerd

  • 设置服务随系统启动自动运行
    systemctl enable containerd

  • 查看containerd服务启动状态:
    systemctl status containerd


    image.png

安装K8S Kubeadm >>>>>>>>> 下面操作,Master + Node 上操作

  • 前期准备

  • 将 SELinux 设置为 permissive 模式(相当于将其禁用)
    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

  • 添加kubernets仓库,此操作会覆盖原有的 /etc/yum.repos.d/kubernetes.repo
    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [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
    exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
    EOF

  • 安装 kubelet、kubeadm 和 kubectl
    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes


    image.png
  • 启用 kubelet 以确保它在启动时自动启动
    systemctl enable --now kubelet

  • 生成kubeadm 配置文件 >>>>>>>>> 下面操作,只在Master上操作

  • 前期准备, 查看主机所在网段, 如下图,所以该主机所在网段为192.168.0.0/24,calico的默认网段为192.168.0.0/16,包含了192.168.0.0/19
    ifconfig | grep "inet "


    image.png

    image.png
  • 在 /etc下建立k8s目录
    mkdir /etc/k8s

  • 进入该目录
    cd /etc/k8s

  • 使用kubeadm创建默认配置文件
    kubeadm config print init-defaults > kubeadm-config.yaml

  • 修改该文件
    vim kubeadm-config.yaml


    image.png
  • 下载镜像,输入如下命令
    kubeadm config images pull --config /etc/k8s/kubeadm-config.yaml

  • 初始化集群,输入如下命令
    kubeadm init --config /etc/k8s/kubeadm-config.yaml --upload-certs

  • 如果下载不下来,报下图错误:


    image.png

    可以更新下源,在/etc/k8s/kubeadm-config.yaml 修改如下:
    imageRepository: registry.k8s.io
    imageRepository: registry.aliyuncs.com/google_containers
    再次执行命令,下载成功 kubeadm config images pull --config /etc/k8s/kubeadm-config.yaml


    image.png
  • 再次初始化集群:
    kubeadm init --config /etc/k8s/kubeadm-config.yaml --upload-certs

  • 也可分两步操作,提前拉取所需的镜像再初始化
    kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
    kubeadm init --config=/etc/k8s/kubeadm-config.yaml

初始化失败,问题及解决方法

image.png
  • 问题 1. Error" err="couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
    image.png

    解决办法:
    [root@k8s-master01 ~]# mkdir -p HOME/.kube [root@k8s-master01 ~]# cp -i /etc/kubernetes/admin.confHOME/.kube/config
    [root@k8s-master01 ~]# chown (id -u):(id -g) $HOME/.kube/config
  • 问题 2. err="couldn't get current server API group list: Get "https://192.168.183.135:6443/api?timeout=32s": dial tcp 192.168.183.135:6443: connect: connection refused"
    解决办法:或许问题1解决后试试kubeadm reset, 然后重新init , 或许也可以解决。
    我是重新修改了containerd 配置文件,按上面列的都修改了,然后提前拉取镜像再初始化,进而解决了这个问题。

最终初始化成功


image.png

安装网络插件(Master)

加Node到集群

如果token 过期,在mast上执行,从新拿到token

kubeadm token create --print-join-command

执行join

image.png

在master上检查node是否成功加入

kubectl get nodes


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容