温馨提示×

k8s集群在centos上扩展

小樊
38
2025-11-22 04:16:29
栏目: 智能运维

在 CentOS 上扩展 Kubernetes 集群的实用指南

一 规划与准备

  • 明确扩展类型:水平扩展工作负载(Pod 副本)与纵向扩展集群(新增 Node),必要时同时规划控制平面扩容。
  • 版本与组件一致性:新节点与控制平面节点的 Kubernetes 版本、容器运行时(如 Docker/Containerd)、内核参数与系统配置尽量保持一致。
  • 基础环境:
    • 关闭 swapswapoff -a 并在 /etc/fstab 注释 swap 行;
    • 主机名与解析:为每个节点设置唯一 hostname,并在所有节点 /etc/hosts 配置 IP↔主机名映射;
    • 时间同步:启用 NTP/chrony,避免证书与调度异常;
    • 防火墙与安全组:放通 6443、10250、2379/2380(如用 etcd)、8472(Flannel VXLAN)、30000–32767(NodePort) 等端口;
    • SELinux:生产建议保持启用并按需配置策略,测试环境可临时 setenforce 0
    • 容器运行时:安装并启动 Docker/Containerd,设置开机自启。
  • 规划网络:如使用 Calico/Flannel,提前确定 Pod CIDR,并确保与现有集群一致。

二 扩展工作节点 Worker

  • 安装组件:在新节点安装与集群一致的 kubelet、kubeadm(以及 kubectl 用于本地调试),并启动 kubelet。
  • 获取加入命令:在控制平面执行以下任一方式生成加入命令:
    • 直接生成完整命令:kubeadm token create --print-join-command
    • 分步获取:kubeadm token list 查看 token 与过期时间,再获取 CA 证书哈希 并拼装 kubeadm join ... --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  • 加入集群:在新节点执行上一步得到的 kubeadm join 命令。
  • 验证:在控制平面执行 kubectl get nodes,确认新节点状态为 Ready
  • 常见排错要点:
    • kubeadm join 失败:检查 token 有效期CA 哈希6443/10250 连通性、系统时间同步;
    • 节点 NotReady:检查 kubelet 服务状态、/var/lib/kubelet/config.yaml 配置、容器运行时状态与镜像拉取;
    • 网络异常:确认 Pod CIDR 与网络插件配置一致,必要时重新应用 Calico/Flannel 清单。

三 扩展控制平面 Master(高可用)

  • 前提条件:已部署 etcd 集群 或采用 kubeadm 的 HA 方案(如 stacked etcd),并具备 负载均衡器 指向现有控制平面。
  • 安装组件:在新 Master 节点安装 kubelet、kubeadm(版本与控制平面一致)。
  • 获取加入命令:在现有控制平面生成 join 命令(与 Worker 类似,但为控制平面加入流程)。
  • 加入为控制平面:在新节点执行加入命令,完成后验证:
    • kubectl get nodes 可见新节点;
    • kubectl get pods -n kube-system 检查 kube-apiserver、kube-controller-manager、kube-scheduler、etcd 等 Pod 就绪;
    • 如新 Master 默认带有污点,按需移除以运行工作负载:kubectl taint nodes <new-master-name> node-role.kubernetes.io/master-(或 control-plane 污点)。
  • 重要提示:新增控制平面节点会影响集群的 可用性与稳定性,务必在维护窗口内操作,并提前 备份 etcd

四 扩展工作负载副本与自动扩缩容

  • 手动扩缩容:
    • 调整副本数:kubectl scale deployment <name> --replicas=<N>
    • 编辑 YAML:kubectl edit deployment <name> 修改 spec.replicas
  • 自动扩缩容 HPA(需 Metrics Server):
    • 部署 Metrics Server(示例):
      • kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
      • 国内环境可替换镜像并添加启动参数(如 --kubelet-insecure-tls--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname);
      • 验证:kubectl top nodeskubectl top pods
    • 创建 HPA(示例,基于 CPU):
      apiVersion: autoscaling/v2
      kind: HorizontalPodAutoscaler
      metadata:
        name: my-app-hpa
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: my-app
        minReplicas: 2
        maxReplicas: 10
        metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 50
      
    • 验证:kubectl get hpa,压测观察副本数随 CPU 利用率 变化。

五 验证与运维建议

  • 节点与网络:
    • kubectl get nodes -o wide 检查新节点 ReadyInternalIP
    • kubectl get pods -o wide 确认 Pod 已调度到新节点
    • 测试跨节点 Pod 间通信 与服务访问。
  • 资源与调度:
    • 为关键应用配置 requests/limits,避免资源争用;
    • 使用 污点/容忍度 控制 Pod 分布,结合 亲和/反亲和 优化拓扑;
    • 按需为节点打标签,便于定向调度。
  • 变更与回滚:
    • 任何扩展操作前做好 备份与变更记录(如 etcd 快照、清单与配置版本化);
    • 分阶段执行与灰度观察,出现异常及时 回滚 或摘除问题节点。

0