单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节点使用。
具体步骤:
- 执行初始化命令(指定Pod网段适配常用CNI插件,比如flannel):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 配置普通用户的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
- 移除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
相关产品推荐
相关产品推荐

