
— 特色专栏 —
大家好,我是民工哥!
众所周知,Kubernetes 集群崩溃是运维工作中常见的故障之一。

但也是影响严重的故障之一,可能导致业务中断、数据丢失或服务不可用。
搞不好,我们运维又得背锅卷铺盖走人。
其成因复杂,涉及资源、配置、网络、组件交互等多个层面。
下面我们一起来总结一下,常见原因与解决方法。
#检查节点状态
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
#查看Pod资源使用
kubectl top pods --all-namespaces
#检查磁盘空间
df -h /var/lib/etcd # Etcd数据目录
df -h /var/log # 日志目录
#测试Pod间通信
kubectl exec -it <pod名> -- ping <目标PodIP>
#检查CNI插件状态
kubectl get pods -n kube-system | grep cni
如果是资源耗尽,那么我们可以通过云平台或集群自动扩缩容(Cluster Autoscaler)增加节点。
#先终止异常节点
kubectl delete pod <异常Pod名> --grace-period=0 --force
如果是核心组件故障,重启etcd服务
systemctl restart etcd # 或通过Kubelet管理的静态Pod重启
网络问题修复,重启CNI插件
kubectl delete pod -n kube-system <cni-pod名> # 通常由DaemonSet自动恢复
但是,现在 K8s 崩了咱也不怕了,用 Velero 一键重建集群!So easy!
Velero(原名Heptio Ark) 是一个专为 Kubernetes 设计的开源备份恢复工具,核心功能包括集群资源(如 Deployment、PV)的全量/增量备份、跨集群恢复及定时备份,支持云存储(AWS/Azure/GCP)和本地存储(如 MinIO),通过插件架构兼容多种存储后端,适用于灾难恢复、环境迁移及开发测试场景,具备高可用设计和监控能力,能有效保障 Kubernetes 数据的安全性与可移植性。

相比之下,我们之前所有的传统备份方案往往存在操作复杂、兼容性差、恢复效率低等问题,一旦发生集群故障,可能导致业务长时间中断。
可以这么说,它是一款革命性的K8S集群恢复工具!
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 支持按需或定时备份整个集群或指定命名空间资源(如 Deployment、Service、ConfigMap 等),并可通过 CSI 插件或 Restic 工具实现持久卷(PV)数据的高效备份。其增量备份机制可减少存储开销,提升备份效率。
集群重建:在集群崩溃时,Velero 可从备份中快速恢复资源定义和配置,结合持久卷数据,实现一键重建。
跨集群迁移:支持将应用从一个 Kubernetes 集群迁移到另一个,适用于环境升级或多云部署场景。
环境复制:可将生产环境克隆到开发/测试集群,简化环境一致性管理。
按对象筛选:支持按命名空间、资源类型(如 Deployment、PVC)或标签(Label)筛选备份对象,避免全量备份的冗余。
自动化任务:基于 Cron 表达式设置自动化备份策略(如每日 1 点备份),并支持保留策略(如仅保留最近 7 天备份)。
存储适配:自动处理不同集群间存储类(StorageClass)的差异,例如将 AWS EBS 卷迁移到阿里云 OSS。
插件化架构:通过插件支持多种云厂商存储服务(如 AWS S3、阿里云 OSS)和 CSI 快照功能。
备份流程

恢复流程
--existing-resource-policy=update 参数更新现有资源。Velero 支持多种安装方式,可根据环境需求选择:
下载 Velero CLI:从 GitHub 发布页(https://github.com/vmware-tanzu/velero/releases) 下载对应操作系统的二进制文件(如 Linux 示例):
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 示例):
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
使用 velero install 命令,指定云提供商、存储桶和插件(以 AWS 为例):
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 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
Velero 与 Kubernetes 版本需匹配,例如 Velero v1.17.0 支持 Kubernetes v1.24+。建议参考官方兼容性矩阵(https://velero.io/docs/v1.8/compatibility/)。

云存储:支持 AWS S3、Azure Blob、GCP 等,需配置访问密钥和区域。
本地存储:推荐使用 MinIO,部署示例:
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:PutObject、s3:GetObject)。
生产环境建议为 Velero Pod 分配足够资源(如 CPU 1000m、内存 1Gi),避免因资源不足导致备份失败。
全量备份:
velero backup create k8s-backup --include-namespaces=default
过滤资源:仅备份 Deployment
velero backup create deploy-backup --include-namespaces=kube-system --include-resources=deployment
文件系统备份(PV 数据):
velero backup create fs-backup --include-namespaces=nginx-example \
--include-volumes=all --volume-backup-mode=filesystem
从备份恢复:
velero restore create --from-backup=k8s-backup
跨集群恢复:导出备份元数据后,在目标集群导入:
velero backup download k8s-backup --output-dir=./backup-export
velero backup upload --from-dir=./backup-export
velero restore create --from-backup=k8s-backup
创建每日备份计划:
velero schedule create daily-backup --schedule="0 2 * * *" --ttl=24h
使用 Velero 重建崩溃的 Kubernetes 集群!
安装 Velero 客户端和服务端,配置对象存储(如 MinIO)作为备份后端。部署测试应用(如 Nginx),并创建持久卷(PVC)存储数据。
创建备份
velero backup create nginx-backup --include-namespaces nginx-example
nginx-example 命名空间下的所有资源,包括 Deployment、Service 和 PVC。模拟集群崩溃与恢复
#删除应用
kubectl delete namespace nginx-example
#执行恢复
velero restore create --from-backup nginx-backup
#验证结果
kubectl get pods -n nginx-example
若 Nginx Pod 正常运行且 PVC 数据完整,则恢复成功。
优势:兼容所有文件系统(ext4/xfs),无需存储厂商驱动,支持细粒度控制(如排除 /tmp 目录)。
启用方式:在 Velero 部署中配置 features.EnableFileSystemBackup=true。
支持 AWS、Azure、GCP 等云平台,通过插件实现跨云备份。例如 Azure 配置:
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 监控备份状态,配置告警规则(如备份失败时触发通知)。
生产环境建议
性能优化
VELERO_FILESYSTEM_BACKUP_CONCURRENCY=4 提高备份速度。成本优化
配置 S3 对象过期规则(如保留 30 天),设置压缩(如 compression: zstd)。
Velero 服务端支持高可用部署,确保备份服务的连续性。
领导者选举:多个 Velero 实例通过 Kubernetes 的 Lease 资源进行领导者选举,确保只有一个实例在处理备份和恢复操作,避免冲突和重复执行。
状态持久化: 所有操作状态都持久化到 etcd 中,确保在实例故障或重启后能够恢复操作状态,继续执行未完成的备份或恢复任务。
重试机制:操作失败时自动重试,支持指数退避策略,避免因临时性问题导致操作永久失败。
操作幂等性:所有关键操作都设计为幂等,即多次执行同一操作不会产生不同的结果,避免重复执行问题。
Velero 是 Kubernetes 的“时光机”——一键备份全集群资源,3分钟跨云恢复数据,再也不用怕误删应用或数据丢失!
无论是上云迁移、灾难恢复还是测试环境克隆,它都能像魔法一样精准还原,让你的集群永葆“青春”!
#kubernetes #云原生 #kubernetes集群 #kubernetes运维 #kubernetes备份 #kubernetes恢复 #K8s #Velero
👍 既然都看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~