温馨提示×

Kubernetes集群Ubuntu节点如何扩展

小樊
32
2025-11-26 23:15:41
栏目: 智能运维

Kubernetes集群 Ubuntu 节点扩展实操指南

一、前置条件与规划

  • 准备一台或多台运行 Ubuntu 20.04/22.04 的新机器,确保与现有集群网络互通(同一二层/三层网段或可达的 API Server 端点)。
  • 规划节点角色与标签(如 worker、gpu、ssd),便于后续调度。
  • 统一时间同步(如 Asia/Shanghai),避免证书校验与组件异常。
  • 如使用 UFW,提前放通必要端口(如 22/TCP、10250/TCP、30000–32767/TCP),或直接使用 iptables/firewalld 统一管理。
  • 规划容器运行时(推荐 containerd),并保持与现有集群版本一致(如 v1.23+)。

二、新节点预处理

  • 关闭 Swap(生产环境必须;新版 kubelet 支持开启但默认仍建议关闭):
    sudo swapoff -a
    sudo sed -i '/ swap / s/^/#/' /etc/fstab
    
  • 内核与转发参数:
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sudo sysctl --system
    
  • 可选:加载 br_netfilter 并验证
    sudo modprobe br_netfilter
    lsmod | grep br_netfilter
    
  • 设置主机名与 /etc/hosts(所有节点保持一致,便于解析控制面端点):
    sudo hostnamectl set-hostname <new-worker-hostname>
    echo "<控制面IP> <控制面主机名>" | sudo tee -a /etc/hosts
    
  • 时间同步:
    sudo timedatectl set-timezone Asia/Shanghai
    sudo systemctl restart systemd-timesyncd
    

三、安装容器运行时与 Kubernetes 组件

  • 安装并启动 containerd
    sudo apt-get update && sudo apt-get install -y containerd
    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
    sudo systemctl restart containerd
    sudo systemctl enable containerd
    
  • 添加 Kubernetes APT 源并安装组件(版本与集群保持一致,示例 1.23.5-00):
    curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    sudo apt-get update
    K8S_VERSION="1.23.5-00"
    sudo apt-get install -y kubelet=${K8S_VERSION} kubeadm=${K8S_VERSION} kubectl=${K8S_VERSION}
    sudo apt-mark hold kubelet kubeadm kubectl
    sudo systemctl enable --now kubelet
    

四、生成加入命令并加入集群

  • 在控制面节点生成短期令牌与加入命令(示例有效期 2 小时):
    kubeadm token create --ttl 2h --print-join-command
    # 如需手动计算哈希,可在控制面执行:
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \
      openssl rsa -pubin -outform der 2>/dev/null | \
      openssl dgst -sha256 -hex | sed 's/^.* //'
    
  • 在新节点执行加入命令(将输出替换为实际值):
    sudo kubeadm join <控制面IP或域名>:6443 \
      --token <token> \
      --discovery-token-ca-cert-hash sha256:<hash> \
      --node-labels=disk=ssd,region=cn-east
    
  • 如需临时忽略预检(不建议生产长期使用),可附加:
    --ignore-preflight-errors=Swap
    

五、验证、标签与后续优化

  • 验证节点状态:
    kubectl get nodes -o wide
    
  • 为新节点添加业务标签并验证:
    kubectl label node <new-worker-name> node-type=high-mem
    kubectl get node <new-worker-name> --show-labels
    
  • 可选:为节点设置污点/容忍,或配置 kubelet 资源预留(提升稳定性):
    # /var/lib/kubelet/config.yaml
    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    systemReserved:
      cpu: "500m"
      memory: "1Gi"
      ephemeral-storage: "5Gi"
    kubeReserved:
      cpu: "500m"
      memory: "2Gi"
      ephemeral-storage: "5Gi"
    
    修改后重启 kubelet:sudo systemctl restart kubelet
  • 防火墙要点(如使用 UFW):
    sudo ufw allow 22/tcp
    sudo ufw allow 10250/tcp
    sudo ufw allow 30000:32767/tcp
    # 如使用 Calico/Flannel,按需放通:
    sudo ufw allow 179/tcp    # BGP
    sudo ufw allow 5473/tcp   # Typha
    sudo ufw allow 4789/udp   # VXLAN
    

0