You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在单台CentOS-7最小化实例部署Kubernetes主从合一集群?

单台CentOS 7最小化实例部署单节点Kubernetes集群(无需Minikube/MicroK8s)

当然可以!完全没问题——你完全不需要依赖Minikube或MicroK8s,就能把这台CentOS 7最小化实例同时作为Kubernetes的控制平面(Master)和工作节点(Node),搭建一个单节点K8s集群。这是非常成熟的方案,很多开发者、测试人员在学习或验证K8s功能时都会这么做。

下面是具体的可行方案步骤:

一、前置环境准备

先把机器的基础环境调整到符合K8s的运行要求:

  • 确保机器资源达标:至少2核CPU、2GB内存(推荐4GB避免资源不足)、20GB以上磁盘空间
  • 关闭防火墙(单节点场景直接关闭更省心):
    systemctl stop firewalld && systemctl disable firewalld
    
  • 禁用SELinux(避免K8s网络策略被拦截):
    setenforce 0
    
    编辑/etc/selinux/config文件,将SELINUX=enforcing修改为SELINUX=disabled,确保重启后生效。
  • 禁用Swap(K8s要求关闭Swap,否则会影响调度):
    swapoff -a
    
    编辑/etc/fstab文件,注释掉Swap相关的行,防止重启后Swap自动开启。
  • 配置内核参数,开启IP转发和网桥过滤:
    创建/etc/sysctl.d/k8s.conf文件,添加以下内容:
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    
    执行以下命令生效:
    sysctl --system
    

二、安装容器运行时

K8s需要依赖容器运行时,这里推荐使用containerd(K8s官方默认推荐):

  • 安装依赖包:
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  • 添加Docker官方的yum源(containerd属于Docker生态):
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  • 安装containerd:
    yum install -y containerd.io
    
  • 配置containerd:
    mkdir -p /etc/containerd && containerd config default > /etc/containerd/config.toml
    
    编辑/etc/containerd/config.toml,找到[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]下的SystemdCgroup项,将其值改为true,保存后重启containerd:
    systemctl restart containerd && systemctl enable containerd
    

三、安装K8s组件(kubeadm、kubelet、kubectl)

使用kubeadm工具来初始化集群:

  • 添加Kubernetes官方的yum源:
    创建/etc/yum.repos.d/kubernetes.repo文件,添加以下内容:
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    exclude=kubelet kubeadm kubectl
    
  • 安装指定版本的K8s组件(这里以稳定的1.28.0版本为例,你可以换成其他兼容版本):
    yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 --disableexcludes=kubernetes
    
  • 设置kubelet开机自启:
    systemctl enable kubelet
    

四、初始化单节点集群

现在开始初始化控制平面,并将当前节点同时作为工作节点加入集群:

  • 初始化集群,指定Pod子网(这里用Flannel默认的10.244.0.0/16,后续需要匹配网络插件):
    kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
    
    提示:如果之前已经彻底禁用Swap,可以去掉--ignore-preflight-errors=Swap参数
  • 初始化完成后,按照提示配置kubectl的权限:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 默认情况下,K8s不会在控制平面节点上调度Pod,我们需要移除这个限制,让当前节点可以运行工作负载:
    kubectl taint nodes --all node-role.kubernetes.io/control-plane-
    
  • 安装网络插件(必须安装,否则Pod之间无法通信),这里推荐使用Flannel:
    你可以从Flannel的官方代码仓库下载对应的kube-flannel.yml文件到本地,然后执行:
    kubectl apply -f kube-flannel.yml
    
    可选:也可以使用Calico等其他CNI兼容的网络插件

五、验证集群状态

完成以上步骤后,验证集群是否正常运行:

  • 查看节点状态,应该显示Ready:
    kubectl get nodes
    
  • 查看kube-system命名空间下的所有Pod,应该全部处于Running状态:
    kubectl get pods -n kube-system
    

补充说明

  • 这种单节点K8s集群完全可以正常运行,适合开发测试、学习K8s基础、部署小型演示服务等场景
  • 生产环境绝对不建议使用单节点集群,因为没有高可用性保障,一旦节点故障整个集群就会瘫痪
  • 如果遇到组件启动失败的问题,可以查看日志排查,比如查看kubelet日志:journalctl -u kubelet -f

内容的提问来源于stack exchange,提问作者Thanaseelan A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:42:38