能否在单台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 = 1sysctl --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,后续需要匹配网络插件):
提示:如果之前已经彻底禁用Swap,可以去掉kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=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文件到本地,然后执行:
可选:也可以使用Calico等其他CNI兼容的网络插件kubectl apply -f kube-flannel.yml
五、验证集群状态
完成以上步骤后,验证集群是否正常运行:
- 查看节点状态,应该显示
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
相关产品推荐
相关产品推荐

