k8s集群yaml文件方式迁移业务

k8s集群备份脚本

背景说明

k8s集群迁移主要有2种:1.通过etcd mirror迁移数据; 2.通过导出k8s yaml文件。前者etcd导入的数据过多,控制精度不高。后者控制精度更高,更倾向于后者。

备份脚本

k8s-migrate.sh

#!/bin/bash
# crontab定期执行备份脚本, 每半小时备份一次.
set -eu

# k8s yaml文件备份路径
BACKUP_DIR='/data/simple-cloud-backup/k8s'

# 创建k8s yaml备份总目录
[ ! -d $BACKUP_DIR ] && mkdir -p $BACKUP_DIR
mkdir -p $BACKUP_DIR/secret

# 当前日期
DATE=`date +%Y%m%d-%H%M%S`

# k8s备份分目录, except rc,rs,sc or in monitoring,kube-system
mkdir -p ${BACKUP_DIR}/${DATE}

# 获取yaml文件 except rc,rs,sc or in monitoring,kube-system
for ns in $(kubectl get ns --no-headers | cut -d " " -f1); do
  if { [[ "$ns" != "monitoring" && "$ns" != "kube-system" ]]; }; then
  kubectl --namespace="${ns}" get --export -o=json svc,pvc,deployments,cm,ing,ds,statefulset | \
jq '.items[] |
    select(.type!="kubernetes.io/service-account-token") |
    del(
        .spec.clusterIP,
        .metadata.uid,
        .metadata.selfLink,
        .metadata.resourceVersion,
        .metadata.creationTimestamp,
        .metadata.generation,
        .metadata.annotations,
        .spec.cephfs,
        .spec.volumeName,
        .status,
        .spec.template.spec.securityContext,
        .spec.template.spec.dnsPolicy,
        .spec.template.spec.terminationGracePeriodSeconds,
        .spec.template.spec.restartPolicy
    )' >> "${BACKUP_DIR}/${DATE}/${ns}.json"
  fi
done

echo "save k8s yaml files in ${BACKUP_DIR}/${DATE}"
# 保留最近7个本地备份
cd $BACKUP_DIR;ls -lt $BACKUP_DIR|awk '{if(NR>8){print "rm -rf "$9}}'|sh

# 保存harbor-admin-sercet
kubectl get secrets  --all-namespaces |grep harbor-admin |awk '{print $1,$2}' | xargs -l bash -c 'kubectl get secrets harbor-admin -n $0  -o yaml > /data/simple-cloud-backup/k8s/secret/$0.yaml'

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值