You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

单机器部署Kubernetes主从合一集群:kubeadm init后本地加入失败求解

单机器同时作为Kubernetes Master和Node节点的实现方案

当然可以实现单节点Kubernetes集群,让同一台机器既承担Master控制平面的角色,又作为Worker节点运行业务Pod——完全不需要依赖minikube,用kubeadm就能搞定。你之前执行kubeadm join失败是因为这个命令是用来添加新节点到集群的,而当前机器已经是Master节点,直接执行会引发组件冲突,正确的做法是调整现有Master节点的配置,让它具备Worker节点的能力。

具体操作步骤

1. 移除Master节点的污点,允许Pod调度到该节点

默认情况下,kubeadm初始化的Master节点会被打上污点,阻止Pod调度到这里(避免控制平面组件和业务Pod竞争资源)。要让它作为Worker节点,首先需要移除这个污点:

# 移除control-plane角色的污点(适用于K8s 1.20+版本)
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

# 如果是旧版本K8s,可能需要移除master角色的污点
kubectl taint nodes --all node-role.kubernetes.io/master-

执行后可以用kubectl describe node <你的节点名>查看污点是否已移除。

2. 给Master节点添加Worker角色标签

为了让集群识别该节点同时具备Worker角色,需要添加对应的标签:

# 先查看你的节点名称
kubectl get nodes

# 替换<node-name>为实际节点名,添加Worker标签
kubectl label nodes <node-name> node-role.kubernetes.io/worker=worker

执行完再用kubectl get nodes查看,节点的ROLES列会显示control-plane,master,worker(或类似组合),说明配置成功。

为什么不需要执行kubeadm join?

kubeadm join的作用是将全新的节点接入集群,会在目标节点上初始化kubelet、kube-proxy等组件并注册到集群。而你的机器已经是Master节点,控制平面组件(kube-apiserver、etcd、kube-controller-manager等)已经在运行,直接执行join会导致端口占用、组件冲突等问题,这就是你之前失败的原因。

生产环境注意事项

虽然单节点集群可以运行,但生产环境中存在明显的单点故障风险:如果这个节点宕机,整个集群都会不可用。如果必须在生产环境使用单节点方案,建议做好以下几点:

  • 定期备份etcd数据(etcd是K8s的核心存储,所有集群状态都存在这里)
  • 确保节点有足够的CPU、内存和磁盘资源,避免控制平面组件和业务Pod互相抢占资源
  • 启用监控(如Prometheus+Grafana),实时跟踪节点和组件状态
  • 配置可靠的网络和存储方案,避免单点故障扩散

内容的提问来源于stack exchange,提问作者Chris Stryczynski

火山引擎 最新活动