首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >传统方式已过时!Kubernetes 集群管理新利器来了!

传统方式已过时!Kubernetes 集群管理新利器来了!

作者头像
民工哥
发布2026-03-24 16:11:19
发布2026-03-24 16:11:19
280
举报

特色专栏

MySQL/PostgreSQL/MongoDB

ElasticSearch/Hadoop/Redis

Kubernetes/Docker/DevOps

Kafka/RabbitMQ/Zookeeper

监控平台/应用与服务/集群管理

Nginx/Git/Tools/OpenStack

大家好,我是民工哥!

众所周知,Kubernetes 集群崩溃是运维工作中常见的故障之一。

但也是影响严重的故障之一,可能导致业务中断、数据丢失或服务不可用。

搞不好,我们运维又得背锅卷铺盖走人。

其成因复杂,涉及资源、配置、网络、组件交互等多个层面。

下面我们一起来总结一下,常见原因与解决方法。

常见原因

  • CPU/内存不足:节点资源被Pod占满,导致节点不可用(NotReady状态)。
  • 存储空间耗尽:Etcd数据目录或容器日志所在磁盘满,导致Etcd或Kubelet崩溃。
  • Etcd崩溃:作为K8s的元数据存储中心,Etcd宕机会导致集群无法调度Pod或更新状态。
  • API Server不可用:控制平面核心组件崩溃,导致所有管理命令失效。
  • CNI插件故障:如Calico、Flannel配置错误或网络策略冲突,导致Pod间通信失败。
  • CoreDNS崩溃:DNS解析失败,导致服务发现异常。
  • 错误的RBAC权限:ServiceAccount权限不足,导致Pod无法访问API Server。
  • 不兼容的API版本:K8s版本升级后,未适配的CRD或Operator导致资源创建失败。
  • 负载均衡器故障:Ingress Controller依赖的LB异常,导致外部流量无法进入集群。
  • .....

常见的诊断方法

快速定位故障组件
代码语言:javascript
复制
#检查节点状态
kubectl get nodes -o wide
kubectl describe node <节点名>  # 查看节点事件和资源使用
    
#检查核心组件日志
kubectl logs -n kube-system <etcd/api-server/scheduler/controller-manager-pod名>
    
#检查Etcd健康状态
ETCDCTL_API=3 etcdctl --endpoints=<etcd-endpoints> endpoint health
分析资源使用情况
代码语言:javascript
复制
#查看Pod资源使用
kubectl top pods --all-namespaces
    
#检查磁盘空间
df -h /var/lib/etcd  # Etcd数据目录
df -h /var/log       # 日志目录
检查网络
代码语言:javascript
复制
#测试Pod间通信
kubectl exec -it <pod名> -- ping <目标PodIP>
    
#检查CNI插件状态
kubectl get pods -n kube-system | grep cni

应急处理措施

如果是资源耗尽,那么我们可以通过云平台或集群自动扩缩容(Cluster Autoscaler)增加节点。

代码语言:javascript
复制
#先终止异常节点
kubectl delete pod <异常Pod名> --grace-period=0 --force

如果是核心组件故障,重启etcd服务

代码语言:javascript
复制
systemctl restart etcd  # 或通过Kubelet管理的静态Pod重启

网络问题修复,重启CNI插件

代码语言:javascript
复制
kubectl delete pod -n kube-system <cni-pod名>  # 通常由DaemonSet自动恢复

但是,现在 K8s 崩了咱也不怕了,用 Velero 一键重建集群!So easy!

Velero 简介

Velero(原名Heptio Ark) 是一个专为 Kubernetes 设计的开源备份恢复工具,核心功能包括集群资源(如 Deployment、PV)的全量/增量备份、跨集群恢复及定时备份,支持云存储(AWS/Azure/GCP)和本地存储(如 MinIO),通过插件架构兼容多种存储后端,适用于灾难恢复、环境迁移及开发测试场景,具备高可用设计和监控能力,能有效保障 Kubernetes 数据的安全性与可移植性。

相比之下,我们之前所有的传统备份方案往往存在操作复杂、兼容性差、恢复效率低等问题,一旦发生集群故障,可能导致业务长时间中断。

可以这么说,它是一款革命性的K8S集群恢复工具!

Velero 的架构

Velero 的架构主要由客户端工具、服务端组件和插件系统三大部分构成。Velero 的组件间通过 Kubernetes API 进行通信,采用事件驱动的架构模式。

客户端工具

Velero CLI:作为整个备份恢复系统的控制中枢,提供了丰富的命令行接口来管理 Kubernetes 集群的备份、恢复、迁移等操作。它采用分层命令结构,基于 Cobra 框架构建,设计简洁直观,遵循 kubectl 类似的使用模式,让用户能够快速上手。

服务端组件

Velero Server:以 Deployment 形式运行在 Kubernetes 集群中,是整个备份恢复系统的核心组件。它通过控制器模式监听和管理备份、恢复等核心资源,采用模块化设计,包含多个关键子系统协同工作,确保数据的一致性和可靠性。

主控制器:Velero Server 的大脑,负责协调所有备份和恢复操作。它通过 Kubernetes 的控制器模式监听自定义资源的变化,并触发相应的处理逻辑。

备份控制器:处理 Backup 资源的创建、更新和删除操作,协调整个备份流程。

恢复控制器:处理 Restore 资源,负责从备份中恢复应用和数据。

备份同步控制器:定期同步备份存储位置中的备份元数据,确保集群中的备份状态与存储位置一致。

插件系统

Velero 采用高度可扩展的插件架构,支持多种存储后端和卷类型。插件系统是其架构设计的核心亮点,通过扩展机制支持多种存储后端和云平台。

对象存储插件:实现备份数据的存储和读取,支持多种对象存储服务,如 AWS S3、Azure Blob、Google Cloud Storage、Aliyun OSS 等。

卷快照插件:通过与云厂商的 Volume Snapshot API 集成,实现持久卷的快照备份。

备份项操作插件:对 PV、Pod、StorageClass 等资源的操作进行抽象,扩展了备份和恢复的功能。

Velero 核心功能与优势

全量与增量备份

Velero 支持按需或定时备份整个集群或指定命名空间资源(如 Deployment、Service、ConfigMap 等),并可通过 CSI 插件或 Restic 工具实现持久卷(PV)数据的高效备份。其增量备份机制可减少存储开销,提升备份效率。

快速恢复与迁移

集群重建:在集群崩溃时,Velero 可从备份中快速恢复资源定义和配置,结合持久卷数据,实现一键重建。

跨集群迁移:支持将应用从一个 Kubernetes 集群迁移到另一个,适用于环境升级或多云部署场景。

环境复制:可将生产环境克隆到开发/测试集群,简化环境一致性管理。

灵活的备份策略

按对象筛选:支持按命名空间、资源类型(如 Deployment、PVC)或标签(Label)筛选备份对象,避免全量备份的冗余。

自动化任务:基于 Cron 表达式设置自动化备份策略(如每日 1 点备份),并支持保留策略(如仅保留最近 7 天备份)。

高兼容性与扩展性

存储适配:自动处理不同集群间存储类(StorageClass)的差异,例如将 AWS EBS 卷迁移到阿里云 OSS。

插件化架构:通过插件支持多种云厂商存储服务(如 AWS S3、阿里云 OSS)和 CSI 快照功能。

Velero 的工作原理

备份流程

  • 用户通过 Velero 客户端发起备份请求,服务端 BackupController 创建 Backup 资源并触发备份任务。
  • BackupController 收集需要备份的资源元数据(如 Kubernetes 对象定义)和持久卷数据(通过 CSI 或 Restic 插件)。
  • 数据被存储到指定的对象存储(如 MinIO、AWS S3),备份任务完成后生成备份记录。
19
19

恢复流程

  • 用户通过 Velero 客户端发起恢复请求,服务端 RestoreController 创建 Restore 资源并触发恢复任务。
  • RestoreController 从对象存储中读取备份数据,重建 Kubernetes 资源和持久卷。
  • 默认执行非破坏性恢复,即跳过目标集群中已存在的资源;可通过 --existing-resource-policy=update 参数更新现有资源。

Velero 适用场景

  • 集群迁移:将应用从一个 Kubernetes 集群迁移到另一个。
  • 子集备份恢复:基于命名空间或标签备份恢复特定资源。
  • 多 API 资源对象升级:升级前备份,失败时快速恢复。
  • 无 etcd 访问权限:如托管 Kubernetes 服务(GKE、EKS)。

Velero 部署与使用

安装方式

Velero 支持多种安装方式,可根据环境需求选择:

CLI 安装(推荐)

下载 Velero CLI:从 GitHub 发布页(https://github.com/vmware-tanzu/velero/releases) 下载对应操作系统的二进制文件(如 Linux 示例):

代码语言:javascript
复制
wget https://github.com/vmware-tanzu/velero/releases/download/v1.17.0/velero-v1.17.0-linux-amd64.tar.gz
tar -xzf velero-v1.17.0-linux-amd64.tar.gz
sudo mv velero-v1.17.0-linux-amd64/velero /usr/local/bin/

配置云凭证:创建 credentials-velero 文件,填写云平台访问密钥(如 AWS 示例):

代码语言:javascript
复制
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
安装 Velero 服务端

使用 velero install 命令,指定云提供商、存储桶和插件(以 AWS 为例):

代码语言:javascript
复制
velero install \
  --provider aws \
  --plugins velero/velero-plugin-for-aws:v1.7.0 \
  --bucket my-backup-bucket \
  --secret-file ./credentials-velero \
  --backup-location-config region=us-west-2 \
  --use-volume-snapshots=false
Helm 安装(生产环境推荐)

添加 Helm 仓库并安装:

代码语言:javascript
复制
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm install velero vmware-tanzu/velero \
  --namespace velero --create-namespace \
  --set configuration.provider=aws \
  --set configuration.backupStorageLocation.bucket=my-backup-bucket \
  --set credentials.existingSecret=cloud-credentials
配置要求
Kubernetes 版本兼容性

Velero 与 Kubernetes 版本需匹配,例如 Velero v1.17.0 支持 Kubernetes v1.24+。建议参考官方兼容性矩阵(https://velero.io/docs/v1.8/compatibility/)。

存储后端配置

云存储:支持 AWS S3、Azure Blob、GCP 等,需配置访问密钥和区域。

本地存储:推荐使用 MinIO,部署示例:

代码语言:javascript
复制
docker run -d -p 9000:9000 --name minio \
  -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=password" \
  minio/minio server /data

存储桶权限:确保 Velero 有读写权限(如 AWS S3 的 s3:PutObjects3:GetObject)。

资源限制

生产环境建议为 Velero Pod 分配足够资源(如 CPU 1000m、内存 1Gi),避免因资源不足导致备份失败。

基本使用
创建备份

全量备份:

代码语言:javascript
复制
velero backup create k8s-backup --include-namespaces=default

过滤资源:仅备份 Deployment

代码语言:javascript
复制
velero backup create deploy-backup --include-namespaces=kube-system --include-resources=deployment

文件系统备份(PV 数据):

代码语言:javascript
复制
velero backup create fs-backup --include-namespaces=nginx-example \
  --include-volumes=all --volume-backup-mode=filesystem
恢复备份

从备份恢复:

代码语言:javascript
复制
velero restore create --from-backup=k8s-backup

跨集群恢复:导出备份元数据后,在目标集群导入:

代码语言:javascript
复制
velero backup download k8s-backup --output-dir=./backup-export
velero backup upload --from-dir=./backup-export
velero restore create --from-backup=k8s-backup
定时备份

创建每日备份计划:

代码语言:javascript
复制
velero schedule create daily-backup --schedule="0 2 * * *" --ttl=24h

实战案例

使用 Velero 重建崩溃的 Kubernetes 集群!

安装 Velero 客户端和服务端,配置对象存储(如 MinIO)作为备份后端。部署测试应用(如 Nginx),并创建持久卷(PVC)存储数据。

创建备份

代码语言:javascript
复制
velero backup create nginx-backup --include-namespaces nginx-example
  • 该命令备份 nginx-example 命名空间下的所有资源,包括 Deployment、Service 和 PVC。
  • Velero 自动创建 PV 快照(通过 CSI 插件)并收集资源元数据,存储到对象存储。

模拟集群崩溃与恢复

代码语言:javascript
复制
#删除应用
kubectl delete namespace nginx-example
#执行恢复
velero restore create --from-backup nginx-backup
#验证结果
kubectl get pods -n nginx-example

若 Nginx Pod 正常运行且 PVC 数据完整,则恢复成功。

高级功能

文件系统备份(PV)

优势:兼容所有文件系统(ext4/xfs),无需存储厂商驱动,支持细粒度控制(如排除 /tmp 目录)。

启用方式:在 Velero 部署中配置 features.EnableFileSystemBackup=true

多云环境支持

支持 AWS、Azure、GCP 等云平台,通过插件实现跨云备份。例如 Azure 配置:

代码语言:javascript
复制
velero install \
  --provider azure \
  --plugins velero/velero-plugin-for-microsoft-azure:v1.7.0 \
  --bucket velero-backups \
  --backup-location-config resourceGroup=VeleroBackups,storageAccount=velerobackups123
监控与告警

集成 Prometheus 监控备份状态,配置告警规则(如备份失败时触发通知)。

最佳实践

生产环境建议

  • 启用高可用:通过 Leader 选举和状态持久化确保备份服务连续性。
  • 定期测试恢复流程,验证备份完整性。

性能优化

  • 调整并发数:设置 VELERO_FILESYSTEM_BACKUP_CONCURRENCY=4 提高备份速度。
  • 使用增量备份:启用 Kopia 算法减少重复数据传输。

成本优化

配置 S3 对象过期规则(如保留 30 天),设置压缩(如 compression: zstd)。

Velero 高可用性设计

Velero 服务端支持高可用部署,确保备份服务的连续性。

领导者选举:多个 Velero 实例通过 Kubernetes 的 Lease 资源进行领导者选举,确保只有一个实例在处理备份和恢复操作,避免冲突和重复执行。

状态持久化: 所有操作状态都持久化到 etcd 中,确保在实例故障或重启后能够恢复操作状态,继续执行未完成的备份或恢复任务。

重试机制:操作失败时自动重试,支持指数退避策略,避免因临时性问题导致操作永久失败。

操作幂等性:所有关键操作都设计为幂等,即多次执行同一操作不会产生不同的结果,避免重复执行问题。

结语

Velero 是 Kubernetes 的“时光机”——一键备份全集群资源,3分钟跨云恢复数据,再也不用怕误删应用或数据丢失!

无论是上云迁移、灾难恢复还是测试环境克隆,它都能像魔法一样精准还原,让你的集群永葆“青春”!

#kubernetes #云原生 #kubernetes集群 #kubernetes运维 #kubernetes备份 #kubernetes恢复 #K8s #Velero

👍 既然都看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见原因
  • 常见的诊断方法
    • 快速定位故障组件
    • 分析资源使用情况
    • 检查网络
  • 应急处理措施
  • Velero 简介
  • Velero 的架构
    • 客户端工具
    • 服务端组件
    • 插件系统
  • Velero 核心功能与优势
    • 全量与增量备份
    • 快速恢复与迁移
    • 灵活的备份策略
    • 高兼容性与扩展性
  • Velero 的工作原理
  • Velero 适用场景
  • Velero 部署与使用
    • 安装方式
    • 配置要求
    • 基本使用
  • 实战案例
  • 高级功能
    • 文件系统备份(PV)
    • 多云环境支持
    • 监控与告警
  • 最佳实践
  • Velero 高可用性设计
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档