一、安装依赖工具
实际就是导出数据为json,通过jq删除一些不需要的字段,然后再通过yq转换为yaml格式(不安装直接使用json格式也可以安装,这里主要为例方便查看),这么麻烦主要是不知道导出yaml文件时如何过滤一些不需要的字段,如果哪位知道可以指教一下。
[root@k8s-master test]# yum install jq -y #解析json [root@k8s-master ~]# wget https://github.com/mikefarah/yq/releases/download/v4.16.2/yq_linux_amd64 #将json转换为yaml 最新下载地址:https://github.com/mikefarah/yq/releases [root@k8s-master ~]# chmod +x yq_linux_amd64 [root@k8s-master ~]# mv yq_linux_amd64 /usr/bin/yq [root@k8s-master ~]# yq --version yq (https://github.com/mikefarah/yq/) version 4.16.2
二、创建脚本
#!/bin/bash DATA_TIME=`date +%Y%m%d%H%M%S` #每次创建根据时间创建 BACKUP_DIR=/tmp/k8s-backup-restore #备份的目录 NS_LIST='change-battery-demo nginx-ingress-port tools tsp' # 指定需要备份的namespaces,也可以使用kubectl获取所有,按需 #CONFIG_TYPE="service deploy configmap secret job cronjob replicaset daemonset statefulset" CONFIG_TYPE="service deploy ingress" # 指定namespaces下需要备份的资源类型,按需 for ns in ${NS_LIST};do BACKUP_DIR_DATE=${BACKUP_DIR}/${ns}/${DATA_TIME} #备份目录,按namespace根据时间分别创建 mkdir -p ${BACKUP_DIR_DATE} && cd ${BACKUP_DIR_DATE} #创建备份目录 for type in ${CONFIG_TYPE};do item_num=$(kubectl -n ${ns} get ${type} 2>/dev/null|wc -l) #过滤资源类型为空 if [ ${item_num} -lt 1 ];then continue;fi #包含NAME行,所以如果存在资源item_num不小于2 ITEM_LIST=$(kubectl -n ${ns} get ${type} | awk '{print $1}' | grep -v 'NAME') for item in ${ITEM_LIST};do file_name=${BACKUP_DIR_DATE}/${type}_${item}.yaml kubectl -n ${ns} get ${type} ${item} -o=json | jq '. | del( .spec.clusterIP, .metadata.uid, .metadata.selfLink, .metadata.resourceVersion, .metadata.creationTimestamp, .metadata.generation, .metadata.annotations, .spec.cephfs, .spec.volumeName, .status, .spec.template.metadata.creationTimestamp, .spec.template.spec.securityContext, .spec.template.spec.dnsPolicy, .spec.template.spec.terminationGracePeriodSeconds, .spec.template.spec.restartPolicy )'|yq eval -P > ${file_name} #del中是要删除的字段 done done done
脚本生成的路径树如下
root@tsp-prod-ansible:~/script_dir# tree -L 3 /tmp/k8s-backup-restore/|head -10 /tmp/k8s-backup-restore/ ├── change-battery-demo │ └── 20221021114537 │ ├── deploy_mx-dial-battery-replacement-platform.yaml │ ├── service_mx-dial-battery-replacement-platform.yaml
抄自于:https://codeantenna.com/a/hyV7eyLUSD
标签:item,yaml,集群,yq,k8s,spec,metadata From: https://www.cnblogs.com/panwenbin-logs/p/16813026.html