Kubernetes 服务器搭建与配置如何做

作者:袖梨 2026-08-08

用三台 CentOS 9 服务器搭建 Kubernetes 集群的核心是统一环境、分步部署、验证连通:所有节点须依次完成关闭 SELinux、停用防火墙、禁用 Swap、设置主机名与 hosts 解析、加载 br_netfilter 模块、安装 containerd 与 kubeadm/kubelet/kubectl,再由 master 初始化集群、worker 加入,最后部署 Flannel 并用 nginx 测试全链路连通性。

用三台 CentOS 9 服务器搭 Kubernetes 集群,核心是“先统一环境、再分步部署、最后验证连通”。不建议跳过任何前置检查,尤其时间同步、主机名和网络解析——这些看似简单,却是后续 kubeadm init 失败最常见的原因。

所有节点必须完成的基础配置

这一步在 master 和两个 worker 节点上都要执行,顺序不能乱:

  1. 关闭 SELinux:运行 setenforce 0 临时生效,再改配置文件 /etc/selinux/config,把 SELINUX=enforcing 改成 SELINUX=permissive
  2. 停用防火墙:执行 systemctl stop firewalld && systemctl disable firewalld。Kubernetes 网络插件(如 Flannel)依赖底层 iptables 规则,firewalld 会干扰
  3. 禁用 Swap:先 swapoff -a,再编辑 /etc/fstab,把含 swap 的行前面加 # 注释掉
  4. 设置主机名 + hosts 解析:比如 master 执行 hostnamectl set-hostname k8s-master --static;然后所有节点的 /etc/hosts 里统一加上:

    192.168.1.10 k8s-master

    192.168.1.11 k8s-node1

    192.168.1.12 k8s-node2

  5. 加载内核模块并启用桥接流量:创建 /etc/modules-load.d/k8s.conf,写入 br_netfilter;再执行:

    echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

    echo '1' > /proc/sys/net/bridge/bridge-nf-call-ip6tables

安装容器运行时(推荐 containerd)

Kubernetes 已弃用 Docker 作为默认运行时,直接用 containerd 更稳定、更轻量:

  1. 执行 yum install -y containerd.io
  2. 生成默认配置:containerd config default | sudo tee /etc/containerd/config.toml
  3. 替换 pause 镜像源为阿里云地址(避免拉取失败):

    sed -i 's|k8s.gcr.io/pause|registry.aliyuncs.com/google_containers/pause|g' /etc/containerd/config.toml

  4. 启动并设为开机自启:systemctl enable --now containerd

安装 kubeadm、kubelet、kubectl

使用阿里云 Kubernetes yum 源,避免因网络问题卡住:

  1. 备份原 repo:mkdir /etc/yum.repos.d/backup && mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup/
  2. 下载新源:curl -o /etc/yum.repos.d/kubernetes.repo https://mirrors.aliyun.com/kubernetes/clouds/kubernetes-el8.repo
  3. 安装组件:yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  4. 启用 kubelet:systemctl enable --now kubelet(此时它会报错等待初始化,属正常)

初始化集群并加入节点

master 节点执行初始化命令,指定 Pod 和 Service 网段,避免与内网冲突:

  1. kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --kubernetes-version=v1.30.0(版本号以当前最新稳定版为准)
  2. 初始化成功后,按提示配置 ~/.kube/config,让 kubectl 可用
  3. 在两个 worker 节点上,粘贴 master 输出的 kubeadm join … 命令执行加入
  4. 等几分钟,master 上运行 kubectl get nodes,状态变为 Ready 即表示节点已接入
  5. 部署 Flannel 网络插件:kubectl apply -f https://github.com/flannel-io/flannel/releases/download/v0.24.2/kube-flannel.yml

验证集群是否可用

别只看 get nodes,要真正跑一个 Pod:

  1. 部署一个测试 nginx:kubectl create deployment nginx-test --image=nginx
  2. 暴露为 ClusterIP 服务:kubectl expose deployment nginx-test --port=80 --type=ClusterIP
  3. 进入任一节点,用 curl 访问该服务的 ClusterIP(通过 kubectl get svc 查)
  4. 如果能返回 nginx 欢迎页,说明控制面、网络、调度全部就绪

相关文章

精彩推荐