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

单Ubuntu 22.04机器部署Kubernetes:如何指定master/worker节点?

单Ubuntu 22.04机器部署兼具Control-Plane和Worker的K8s集群

主机名设置

不用区分master/worker节点,直接给机器设一个统一的主机名即可:

sudo hostnamectl set-hostname kubernetes-node
exec bash  # 让主机名设置立即生效

初始化集群(kubeadm init)

执行kubeadm init后,这台机器会成为Control-Plane节点(也就是你说的master),但默认它不会被调度运行业务Pod,需要手动移除污点让它同时作为Worker节点使用。

具体步骤:

  1. 执行初始化命令(指定Pod网段适配常用CNI插件,比如flannel):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  1. 配置普通用户的kubectl权限(必须执行,否则无法用非root用户操作集群):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 移除Control-Plane节点的污点,让它能运行Worker节点的Pod:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

注意命令末尾的减号是删除污点的意思,执行后这台机器就同时兼具Control-Plane和Worker的功能了。

关于join命令

单节点集群不需要执行join命令。join是给其他独立的Worker节点用来加入已有集群的,你只有一台机器,kubeadm init已经把它纳入集群,移除污点后就同时承担两种角色,不需要额外执行join操作。

验证集群状态

执行以下命令,看到节点状态为Ready,并且带有control-plane和worker标签,就说明配置成功:

kubectl get nodes -o wide

前置条件提醒

执行上述步骤前,必须完成以下准备工作:

  • 关闭swap分区:sudo swapoff -a,并注释/etc/fstab里的swap挂载行
  • 安装containerd或Docker作为容器运行时
  • 开启必要内核模块并设置sysctl参数:
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sudo sysctl --system

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:15:33