Kubernetes——批量导出 Kubernetes 命名空间下的资源 Manifest 及 CRD 资源
批量导出 Kubernetes 命名空间下的资源 Manifest 及 CRD 资源
一、需求背景
在 Kubernetes 集群的日常管理和维护中,经常需要备份或迁移集群中的资源。为了高效地进行这一操作,本脚本旨在批量导出指定命名空间下的多种 Kubernetes 资源(如 Deployment、StatefulSet、Pods、ConfigMap、Secret、PVC、StorageClass、Service、ServiceAccount)以及集群级别的 CRD(Custom Resource Definitions)资源。 脚本首先定义了一个包含目标命名空间的数组和一个包含要导出的资源类型的数组。然后,它遍历每个命名空间,检查该命名空间下是否存在资源。如果存在,脚本会为每种资源类型创建一个目录,并遍历该命名空间下的所有资源实例,将它们以 YAML 格式导出到指定的备份目录中。同时,脚本还会导出集群中所有的 CRD 资源。 此脚本通过自动化资源导出过程,极大地简化了 Kubernetes 资源的备份和迁移工作,提高了管理员的工作效率。
二、Bash脚本实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #!/bin/bash NAMESPACES=( "namespace1" "namespace2" "namespace3" ) RESOURCE_TYPES=( "deployment" "statefulset" "pods" "configmap" "secret" "pvc" "storageclass" "svc" "serviceaccount" ) current_context=$(kubectl config current-context) backup_dir= "backup/k8s_${current_context}_$(date " +%Y.%m.%d-%H.%M.%S ")" mkdir -pv "${backup_dir}" mkdir -pv "${backup_dir}/crd" log_file= "${backup_dir}/export_resources.log" for NAMESPACE in "${NAMESPACES[@]}" ; do echo "正在处理命名空间: $NAMESPACE" | tee -a $log_file resource_count=$(kubectl get all -n "${NAMESPACE}" --ignore-not-found -o jsonpath= "{.items[*].metadata.name}" | wc -w) if [ $resource_count -gt 0 ]; then mkdir -pv "${backup_dir}/${NAMESPACE}" for resource_type in "${RESOURCE_TYPES[@]}" ; do resource_names=$(kubectl get "${resource_type}" -n "${NAMESPACE}" -o jsonpath= "{.items[*].metadata.name}" 2> /dev/null ) for resource_name in ${resource_names}; do kubectl get "${resource_type}" "${resource_name}" -n "${NAMESPACE}" -o yaml > "${backup_dir}/${NAMESPACE}/${NAMESPACE}-${resource_name}-${resource_type}.yaml" echo "已导出 ${NAMESPACE}-${resource_name}-${resource_type}.yaml" | tee -a $log_file done done else echo "命名空间 $NAMESPACE 下没有资源" | tee -a $log_file fi done # 导出CRD资源 crd_names=$(kubectl get crd | awk 'NR > 1 {print $1}' ) for crd_name in $crd_names; do kubectl get crd "${crd_name}" -o yaml > "${backup_dir}/crd/${crd_name}.yaml" echo "已导出 CRD 资源 ${crd_name} 至 ${backup_dir}/crd/${crd_name}.yaml" | tee -a $log_file done echo "所有CRD资源导出完成。" | tee -a $log_file |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2022-07-05 Kubernetes——网络策略
2021-07-05 云原生监控系统Prometheus——监控就是艺术!