当前位置: 首页 > news >正文

【镜像制作】制作k8s的yaml配置的备份镜像

文章目录

      • 简介
      • 一.备份代码
      • 二.dockerfile代码
      • 三.cronjob配置

简介

通过shell脚本写一个定期备份k8syaml配置的镜像,然后通过cronjob来实现定期执行,将备份文件上传到ceph存储或者是存放到NAS存储上。

一.备份代码

通过kubectl导出yaml配置文件,然后进行压缩并上传到ceph存储。

#!/bin/bashbucket="yt-k8s-yamlbak"
key_access="864XMJ0U9BDFBUI8OOxxxx"
key_secret="bNzAXe8DzGGshi23aKoykfYiy2XeFR1U2Oxxxxx"
host="192.168.12.158:8000" #endpointRoot="/data/yaml"
clusterName="yt-k8s"
nameSpaces=$(kubectl get ns|grep -v "NAME"|awk '{print $1}'|xargs)
types="deploy service cronjob ing cm secret serviceAccount sts pvc hpa"#判断是否存在bucket,不存在就创建bucket
scode=$(curl -o /dev/null --max-time 60 --connect-timeout 60 -w "%{http_code}" http://$host/$bucket/ --silent)
if [ $scode == "404" ];thenacl="x-amz-acl:public-read"relativePath="/${bucket}"current=`TZ=GMT LANG=en_US date "+%a, %d %b %Y %H:%M:%S GMT"`stringToSign="PUT\n\n\n${current}\n${acl}\n${relativePath}"signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${key_secret} -binary | base64`curl -A "CreateBucket" -s -v -X PUT --max-time 60 --connect-timeout 60 "http://${host}${relativePath}" -H "Authorization: AWS ${key_access}:${signature}" -H "Date: ${current}" -H "Host: ${host}" -H "${acl}"if [ $? -ne 0 ];thenecho "`date +%Y-%m-%dT%H:%M:%S` bucket create fail"fiecho "`date +%Y-%m-%dT%H:%M:%S` bucket create ok"
fi#循环命名空间,并将命名空间下的资源导出成yaml配置文件。
for ns in ${nameSpaces[@]}
dofor tps in ${types[@]}domkdir $Root/$clusterName/$ns/$tps -pfor name in $(kubectl get $tps -n $ns|awk '{print $1}'|grep -v NAME)dokubectl get $tps $name -n $ns -o yaml > $Root/$clusterName/$ns/$tps/${name}.yamldonedone
done#将导出的yaml文件进行压缩成zip文件,然后上传到ceph对象存储
dh=$(date +%Y%m%d%H%M%S)
cd $Root
zip -r ${dh}.zip $clusterName
rm -rf $Root/${clusterName}
dt=$(date +%Y/%m/%d)
BakRoot="/data/$clusterName/$dt"
relativePath="/${bucket}/$dt/${dh}.zip"
contentType="application/x-zip-compressed"
acl="x-amz-acl:public-read"
current=`TZ=GMT LANG=en_US date "+%a, %d %b %Y %H:%M:%S GMT"`
stringToSign="PUT\n\n${contentType}\n${current}\n${acl}\n${relativePath}"
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${key_secret} -binary | base64`
curl -A "UploadLog" -s -v --max-time 1800 --connect-timeout 60 -X PUT -T "$Root/${dh}.zip" -H "Host: ${host}" -H "Date: ${current}" -H "${acl}" -H "Content-Type: ${contentType}" -H "Authorization: AWS ${key_access}:${signature}" "http://${host}${relativePath}" -v >/tmp/t.log 2>&1
cat /tmp/t.log
cat /tmp/t.log|grep "HTTP/1.1 200 OK"
if [ $? -eq 0 ];thenecho "`date +%Y-%m-%dT%H:%M:%S` upload $Root/${dh}.zip success"[ -d $BakRoot ] || mkdir -p $BakRootmv -fv $Root/${dh}.zip $BakRoot/ 
elseecho "`date +%Y-%m-%dT%H:%M:%S` upload $Root/${dh}.zip fail"
fi
rm -fv /tmp/t.log

二.dockerfile代码

需要将kubectl和config配置文件拷贝到root下。

# VERSION 1 - EDITION 1
# # # Author: wangbikangFROM alpine:3.18 MAINTAINER docker_user wangbikang@pconline.com.cnCOPY run.sh /data/
COPY kubectl /bin/
RUN mkdir -p /root/.kube
COPY config /root/.kube/
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add --no-cache curl coreutils  openssl zip bashCMD ["/data/run.sh"]

三.cronjob配置

cronjob配置,每小时只想能够一次,然后将文件压缩备份一份到nas

apiVersion: batch/v1
kind: CronJob
metadata:labels:app: yt-k8s-yamlbak name: yt-k8s-yamlbaknamespace: auto-public 
spec:schedule: "2 * * * *"suspend: falsejobTemplate:spec:activeDeadlineSeconds: 3600backoffLimit: 1template:spec:containers:- name: task image: pcgroup-registry-vpc.cn-shenzhen.cr.aliyuncs.com/public/k8s-yaml-backup:20240607154517 imagePullPolicy: IfNotPresentcommand: ["bash","/data/run.sh"]volumeMounts:- mountPath: /data/yt-k8s-yamlbakname: static-htmlreadOnly: falserestartPolicy: Nevervolumes:- name: static-htmlnfs:server: 2e347xxx-mfg89.cn-shenzhen.nas.aliyuncs.compath: /yt-k8s-yamlbak/

相关文章:

  • C++初学者指南第一步---10.内存(基础)
  • Hive笔记-3
  • OpenCV--Mat属性和深浅拷贝
  • 前端开发之浏览器垃圾回收机制
  • Redis分片集群搭建
  • springBoot+mongoDB项目中,使用MongoFactory、MongoTemplate分页条件查询,增删查改
  • 代码随想三刷二叉树篇3
  • 代码随想录算法训练营第38天|● 理论基础 ● 509. 斐波那契数● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
  • Linux:文件描述符
  • ai写诗词,三款软件助你妙笔生花!
  • Cesium4Unreal - # 009 直接加载显示Shapefile
  • 返回给前端数据的封装
  • 【Spine学习13】之 制作受击动画思路总结(叠加颜色特效发光效果)
  • Go 基础丨字符串 string
  • 【已解决】better-scroll在PC端如何开启鼠标滚动以及如何始终显示滚动条
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • django开发-定时任务的使用
  • input的行数自动增减
  • Java 23种设计模式 之单例模式 7种实现方式
  • Koa2 之文件上传下载
  • magento2项目上线注意事项
  • Mysql数据库的条件查询语句
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 闭包--闭包作用之保存(一)
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 简单基于spring的redis配置(单机和集群模式)
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何编写一个可升级的智能合约
  • 使用agvtool更改app version/build
  • Nginx实现动静分离
  • Spring Batch JSON 支持
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #传输# #传输数据判断#
  • #考研#计算机文化知识1(局域网及网络互联)
  • #前后端分离# 头条发布系统
  • (06)金属布线——为半导体注入生命的连接
  • (9)目标检测_SSD的原理
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (NSDate) 时间 (time )比较
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Python) SOAP Web Service (HTTP POST)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六)Hibernate的二级缓存
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (学习日记)2024.01.09
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .Net 4.0并行库实用性演练
  • .NET C# 配置 Options