Kubernetes 节点如何在 Ubuntu 上扩展
导读:在 Ubuntu 上扩展 Kubernetes 节点的实操指南 一 规划与前置检查 准备一台或多台运行 Ubuntu 20.04/22.04 的新机器,确保与现有集群网络互通(同一二层/三层网段或可达的 Pod CIDR/Service...
在 Ubuntu 上扩展 Kubernetes 节点的实操指南
一 规划与前置检查
- 准备一台或多台运行 Ubuntu 20.04/22.04 的新机器,确保与现有集群网络互通(同一二层/三层网段或可达的 Pod CIDR/Service CIDR),并具备可用的 SSH 访问与 sudo 权限。
- 规划节点角色与资源:新增 worker 或 control-plane(如需高可用)。
- 统一 /etc/hosts 或使用 DNS,确保主机名可解析;所有节点时间同步(如 chrony)。
- 规划安全组/防火墙放通:至少放通 22/TCP(SSH)、6443/TCP(Kube-apiserver)、10250/TCP(Kubelet)、30000–32767/TCP(NodePort)、以及所用 CNI 所需端口(如 Calico:179/TCP、5473/TCP、4789/UDP)。
- 准备加入命令:在控制平面节点生成一次性 token 与 CA 证书哈希,或复用现有有效 bootstrap token。
- 确认现有集群使用的 容器运行时(如 containerd 或 Docker),新节点需保持一致。
二 在新节点上安装与初始化
- 关闭 Swap(Kubelet 要求):
- 临时:
sudo swapoff -a - 永久:
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
- 临时:
- 加载内核模块与网络参数:
- 模块:
sudo modprobe overlay & & sudo modprobe br_netfilter - Sysctl:
sudo tee /etc/sysctl.d/kubernetes.conf < < EOF net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 net.ipv4.ip_forward=1 EOF & & sudo sysctl --system
- 模块:
- 安装容器运行时(以 containerd 为例):
- 安装:
sudo apt-get update & & sudo apt-get install -y containerd - 生成默认配置并启用 SystemdCgroup:
sudo containerd config default | sudo tee /etc/containerd/config.toml & & sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml - 启动:
sudo systemctl enable --now containerd
- 安装:
- 安装 kubeadm/kubelet/kubectl(版本保持一致):
- 添加源并安装:
sudo apt-get update & & sudo apt-get install -y apt-transport-https curl & & curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-keyring.gpg & & echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list & & sudo apt-get update & & sudo apt-get install -y kubelet kubeadm kubectl & & sudo apt-mark hold kubelet kubeadm kubectl
- 添加源并安装:
- 启动 kubelet:
sudo systemctl enable --now kubelet
三 将节点加入集群
- 在控制平面生成加入命令(示例):
kubeadm token create --print-join-command(一次性 token 与 –discovery-token-ca-cert-hash)- 若使用 控制平面端点(如 –control-plane-endpoint),在命令中加入
--control-plane参数以新增 master 节点。
- 在新节点执行输出的 kubeadm join … 命令,等待拉起 kubelet 与容器。
- 在控制平面验证:
kubectl get nodes -o wide,确认新节点状态为 Ready。
四 节点就绪后的常用配置
- 打标签与污点(示例):
- 角色标签:
kubectl label nodes < node-name> node-role.kubernetes.io/worker= - 污点与容忍(如需专用节点):
kubectl taint nodes < node-name> key=value:NoSchedule;在 Pod 上配置相应 tolerations。
- 角色标签:
- 调度控制:
- 节点选择器:
nodeSelector - 亲和性:
nodeAffinity - 反亲和性:
podAntiAffinity(提升高可用分布)
- 节点选择器:
- 验证示例:部署 Nginx 并观察是否调度到新节点
kubectl create deployment nginx --image=nginx --replicas=2kubectl get pods -o wide
五 批量扩展与常见问题
- 批量添加:在控制平面生成一次加入命令,使用 Ansible/Shell 将命令分发到多台新节点并行执行,完成后统一
kubectl get nodes校验。 - 常见问题排查:
- 节点 NotReady:检查 containerd/kubelet 状态、镜像拉取、容器网络(如 Calico/Flannel Pod 是否 Running)、以及 CNI 所需端口 与 防火墙 策略。
- 加入失败:确认 token 未过期、CA 证书哈希 正确、系统时间同步、以及 /etc/hosts/DNS 解析正常。
- 端口放通:至少确保 22/TCP、6443/TCP、10250/TCP、30000–32767/TCP 与所用 CNI 端口(如 179/TCP、5473/TCP、4789/UDP)已放行。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes 节点如何在 Ubuntu 上扩展
本文地址: https://pptw.com/jishu/789023.html
