首页主机资讯Ubuntu Kubernetes 集群如何迁移

Ubuntu Kubernetes 集群如何迁移

时间2025-11-21 14:42:04发布访客分类主机资讯浏览1213
导读:Ubuntu Kubernetes 集群迁移实操指南 一、迁移总览与方案选型 明确目标与边界:迁移范围(仅应用、含持久化数据、是否连同节点一起迁移)、目标平台(自建/托管如 ACK/EKS/GKE)、允许的停机窗口、网络与存储兼容性。 方...

Ubuntu Kubernetes 集群迁移实操指南

一、迁移总览与方案选型

  • 明确目标与边界:迁移范围(仅应用、含持久化数据、是否连同节点一起迁移)、目标平台(自建/托管如 ACK/EKS/GKE)、允许的停机窗口、网络与存储兼容性。
  • 方案选型建议:
    • 重建式迁移(推荐):在目标环境新建集群,导出资源配置并在新集群重建,持久化数据用备份工具迁移;对无状态应用几乎零停机,对有状态应用按存储与一致性要求选择在线/离线迁移。
    • 原地升级/改造:在同一批节点上做组件升级或运行时替换(如 Docker → containerd),风险低但本质不是“迁移”。
    • 控制面迁移:保留现有节点,仅迁移或重建 etcd/控制平面 到新主机,再逐节点接入;适用于主机替换或机房搬迁。
  • 关键兼容性检查:Kubernetes 版本、CNI 插件与网络 CIDR、StorageClass/CSI 驱动、Ingress/LoadBalancer 类型、节点资源规格与污点/容忍度、镜像仓库可达性、RBAC/准入控制策略。

二、标准迁移流程

  1. 预检与规划
    • 盘点资源与依赖:列出所有 Deployment/StatefulSet/Service/Ingress/PVC/ConfigMap/Secret/NetworkPolicy/StorageClass 等;确认镜像仓库与镜像拉取凭据;梳理外部依赖(数据库、消息、缓存、DNS、负载均衡)。
    • 网络与存储:确保新集群 Pod/Service CIDR 与现有不冲突;确认 CSI 驱动与云盘/NFS/对象存储等在目标环境可用;规划 Service 类型(如 LoadBalancer 的云厂商实现差异)。
  2. 备份与导出
    • 应用与集群状态:使用 Velero 备份应用与集群资源(可按命名空间/资源类型过滤),存储到对象存储;如需跨云,确保源/目标均可访问同一备份仓库。
    • 持久卷数据:对数据库等强一致场景,先短暂停写或使用应用级工具(如 mysqldump/mariadb-dump)做快照迁移;文件类数据可用 rsync 或存储厂商提供的卷快照/迁移工具。
  3. 部署目标集群
    • 使用 kubeadm/kubespray 等在目标 Ubuntu 节点上部署新集群,安装相同版本的 Kubernetes 与一致的 CNI/CSI;如使用托管集群,按厂商指引完成创建与网络/存储配置。
  4. 恢复应用与数据
    • 资源配置:将导出的 YAML 应用到新集群(注意替换镜像仓库、Service 类型、StorageClass 名称等差异);对 StatefulSet 先创建 PVC/PV 再恢复 Pod。
    • 数据恢复:执行 Velero 恢复任务;数据库按应用一致性要求选择在线/离线恢复;文件数据按卷类型选择 rsync/快照/CSI 迁移
  5. 切换与验证
    • 灰度切换:通过 Service 权重/DNS 切流或 Ingress 切换,先小流量验证,再逐步放大;验证业务指标、日志、告警、存储读写、网络连通性与安全策略生效。
  6. 回滚预案
    • 保留旧集群一段时间;准备回切脚本与 DNS/Traffic 回滚策略;记录迁移过程与问题清单,便于复盘。

三、关键场景操作要点

  • 仅更换容器运行时(如 Docker → containerd
    • 逐节点 drain 排空:kubectl drain --delete-emptydir-data --force --ignore-daemonsets
    • 安装并配置 containerd(确保与 kubelet 版本匹配),修改 kubelet 启动参数使用 containerd.sock
    • 重启 kubelet,观察节点 Ready;对 DaemonSet(如 calico-node、kube-proxy)优先重建
    • 验证:crictl ps、kubectl get nodes -o wide,确认 CONTAINER-RUNTIMEcontainerd://*
  • 控制面迁移(重建 master 或主机替换)
    • 备份关键证书与数据:/etc/kubernetes(含 admin.conf/kubelet.conf/bootstrap-kubelet.conf 等)、/var/lib/etcd(如使用本地 etcd)
    • 在新 master 上恢复证书与配置,注意 server 地址必须指向新 API Server IP/DNS
    • 启动静态 Pod(apiserver/scheduler/controller-manager/etcd);其他节点需更新 /etc/kubernetes/kubelet.confbootstrap-kubelet.conf 指向新 apiserver,再重启 kubelet
    • 常见故障:apiserver 反复重启且报 decode error,多为 kubelet 仍连旧 apiserver,需校正 kubelet 配置
  • 有状态应用与数据库
    • 优先使用应用/数据库自带工具做在线迁移(如 Amazon DMS 用于数据库);无法在线时,短暂停写做一致性备份与恢复
    • 对象存储/文件存储:使用 CSI 快照或厂商工具迁移;本地卷:在新集群重建 PV/PVC 后用 rsync 拷入数据

四、常见问题与排查清单

  • 证书/连接错误:apiserver 报 decode error 或 kubelet 反复掉线,检查 /etc/kubernetes/kubelet.confbootstrap-kubelet.conf 中的 server 字段是否指向新 API Server;必要时清理旧配置并重启 kubelet
  • 镜像拉取失败:确认 imagePullSecrets、镜像仓库地址与节点网络策略;必要时在目标集群导入镜像或改用可达仓库
  • 存储不兼容:旧集群 StorageClass/CSI 在目标不可用,需提前在目标集群部署相同/等价的 CSI 驱动 并创建对应 StorageClass;数据库等强一致场景先停写再迁移
  • 网络策略/Ingress 差异:不同云厂商 LoadBalancer 实现与注解不同,需调整 Service/Ingress 配置;跨命名空间/跨集群网络策略需重新评估
  • 版本与特性差异:API 版本变更导致资源无法创建,需按目标集群版本调整 YAML(如 extensions/v1beta1 迁移到 networking.k8s.io/v1

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Kubernetes 集群如何迁移
本文地址: https://pptw.com/jishu/753312.html
如何在 Ubuntu 上运行 Kubernetes Dashboard Kubernetes 版本在 Ubuntu 上如何选择

游客 回复需填写必要信息