会玩,K8s 通过 Cronjob 来定期备份 Etcd-程序员宅基地

技术标签: kubernetes  python  ribbon  ssl  etcd  

770dc9abb01e0d5fd705f9261ac73ee2.gif

简介

家里有两个 k8s,树莓派使用的是 k3s,nuc 上就是正常的 x86 的 k8s,树莓派 k3s 使用的是 mysql,mysql 也是使用 cronjob 每天跑的备份,但是 nuc 中的 etcd 一直没有备份过,所以今天就准备备份下。

要做的事情很简单,就是 etcd 快照,完了之后就直接扔到 minio 中。

操作

本来想的是使用 python 的 etcd 库做备份的,但是不知道为什么依赖一直没有安装好,索性就不装逼了直接使用 etcd cli 去 snapshot,因为 etcd 的备份需要使用证书,所以就直接拿出证书放到项目的 ssl 目录下面了。

导入库

import os
import time
from minio import Minio
from minio.error import S3Error

下面是脚本的一些配置参数

# 获取当前时间
now=time.strftime("%Y%m%d", time.localtime())
# 一些配置参数
etcd_url=""
cacert="./ssl/ca.pem"
cert="./ssl/node-node1.pem"
key="./ssl/node-node1-key.pem"
backup_file_name="etcd-"+ now

没错,snapshot 文件就使用时间去命名了。

之后就是创建快照函数

def create_snapshot():
    command="ETCDCTL_API=3 etcdctl --endpoints=" + etcd_url + " --cacert=" + cacert + " --cert=" + cert + " --key="+ key + " snapshot save " + backup_file_name
    os.system(command=command)

完了之后就直接上传到 minio

def upload_to_minio():
    client=Minio(
        "oss.example.cn:9000",
        access_key="",
        secret_key="",
        secure=False
    )
    found=client.bucket_exists("etcd-backup")
    if not found:
        client.make_bucket("etcd-backup")
        print("etcd-backup bucket created")
    else:
        pass
    client.fput_object("etcd-backup",backup_file_name,backup_file_name)

因为我的 minio 是没有配置 https 的所以配置了secure=False

之后就是主函数

if __name__ == "__main__":
    try:
        create_snapshot()
    except Exception as e:
        print(e)
    try:
        upload_to_minio()
    except S3Error as e:
        print("upload failed: "+ e)

接着就是 cronjob 的配置

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  creationTimestamp: null
  name: etcd-backup
  namespace: cronjob
spec:
  failedJobsHistoryLimit: 5
  jobTemplate:
    metadata:
      creationTimestamp: null
    spec:
      template:
        metadata:
          creationTimestamp: null
        spec:
          containers:
          - image: registry.bboysoul.cn/rpi/etcd-backup:87abd366c81cbe4b7d0edb20670a5755e0506d13
            imagePullPolicy: IfNotPresent
            name: etcd-backup
            resources: {}
          restartPolicy: Never
  schedule: 0 3 * * *
  successfulJobsHistoryLimit: 5
status: {}

之后就是配置流水线,我使用的是 drone 加 argocd,这里有个问题就是 argocd 是没有 arm 二进制的,我就网上找了一个 arm 的镜像复制出来,自己做了一个镜像,下面是 dockerfile

FROM debian:stable-slim
RUN apt update -y && \
    apt install git -y && \
    rm -rf /var/lib/apt/lists/*
COPY ./argocd /bin
COPY ./kubectl /bin

然后是 drone 的流水线

kind: pipeline
type: kubernetes
name: build

platform:
  os: linux
  arch: arm

steps:
- name: docker
  image: plugins/docker
  settings:
    username: ????
    password: ???
    repo: registry.bboysoul.cn/rpi/etcd-backup
    registry: registry.bboysoul.cn
    tags:
      - latest
      - ${DRONE_COMMIT_SHA}

- name: sync app
  image: bboysoul/argocd:v2.0.0-1
  commands:
    - git clone ??????
    - cd argocd-yaml/etcd-backup
    - kubectl set image -f cronjob.yaml etcd-backup=registry.bboysoul.cn/rpi/etcd-backup:${DRONE_COMMIT_SHA} --local --dry-run=client -o yaml >temp
    - mv temp cronjob.yaml
    - git add .
    - git commit -m "change image registry.bboysoul.cn/rpi/etcd-backup:${DRONE_COMMIT_SHA}"
    - git push origin master
    - argocd login --insecure --username ????? --password ?????? 10.10.100.76
    - argocd app sync etcd-bakcup
    - argocd app wait etcd-bakcup

argocd 的 app

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: 'etcd-bakcup'
spec:
  destination:
    namespace: 'cronjob'
    server: '?????'
  source:
    path: './etcd-backup'
    repoURL: '????????????'
    targetRevision: HEAD
  project: 'default'

之后看下怎么完善下加个备份完成之后的通知啊什么的。

原文链接:https://www.bboy.app/2022/01/11/k8s%E9%85%8D%E7%BD%AEcronjob%E5%A4%87%E4%BB%BDetcd/

d297ba1dc6e2f22d6438e5194a3caaff.gif

021a6cb4fb3736aee5890e5fc28f8734.png

你可能还喜欢

点击下方图片即可阅读

09ad6b233cd4e46c6f693ca6c3f4b7bd.png

eBPF 和 Wasm:探索服务网格数据平面的未来

5cc2702b9156e8fa07807ad3303e2bef.gif

云原生是一种信仰 

关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

06a753765d44e09641bf717b503209b3.gif

9ae968b2970c2781eda67c143ca496b0.gif

点击 "阅读原文" 获取更好的阅读体验!

发现朋友圈变“安静”了吗?

ab10cfa549f5790959e0172c2bcc1465.gif

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/alex_yangchuansheng/article/details/122505004

智能推荐

Red Hat配置国内yum源和本地yum源_yum源配置 国内-程序员宅基地

文章浏览阅读510次,点赞15次,收藏15次。以下是在Red Hat 9上安装和配置yum源的步骤:YUM源(也称为YUM源仓库或YUM存储库):YUM管理程序的本地或远程存储库,作为YUM软件供应的主要源。YUM是Redhat、CentOS中的软件包管理器,全称为Yellowdog Updater, Modified,可以用来根据需要自动下载、安装和管理软件包,简化了用户安装和更新软件的工作。_yum源配置 国内

git rebase解决冲突_git rebase 冲突-程序员宅基地

文章浏览阅读4.4k次。有如下git,存在master和dev两个分支2,现在dev分支基础上,把master分支rebase进来可以看到提示text1,text2两个文件存在冲突,需要打开这两个文件解决冲突:注意<<<<<< ====== >>>>>>都需要删掉,======前面是master分支的内容,后面是当前分支dev的内容,假设我们需要保留master的内容,修改好后如下:保存退出后,输入git add..._git rebase 冲突

java/php/node.js/python在线排考系统【2024年毕设】-程序员宅基地

文章浏览阅读415次,点赞13次,收藏8次。除了以上作品下面是2023-2024年最新100套计算机专业原创的毕业设计源码+数据库,是近期作品,如果你的题目刚好在下面可以文末领取java源码参考。springboot基于Android平台的智能短途旅游规划APP。springboot基于微信小程序的智能诊疗与服务系统。springboot基于Web的社区医院管理服务系统。springboot基于Web前端技术的茶叶销售系统。springboot基于小程序的宠物医院预约管理平台。springboot微信小程序的车位预约系统。

【RK3588 第二篇】YOLO V5在瑞芯微板子上部署问题记录汇总_rk3588部署的注意事项-程序员宅基地

文章浏览阅读1.6k次,点赞6次,收藏33次。yolov5部署到rk3588遇到的问题,和解决方案汇总_rk3588部署的注意事项

google chrome 官方下载安装的方法和离线包官方下载_谷歌浏览器离线安装包-程序员宅基地

文章浏览阅读7k次。Google浏览器官方已经不能访问了,第三方的软件很多都是经过别人修改后,有的甚至有木马程序,前几天我从abobe推广下载的Google浏览器,都卡的不能上网,其他第三方的可见一斑,或许得看手气吧,但是 怎么安装官方的软件?方法1:Google官方离线包下载:对于稳定版(正式版)Chrome来说,只需要在Chrome的“最终用户许可协议”页面链接后面添加”?standalone_谷歌浏览器离线安装包

深入理解机器学习——k近邻(kNN,k-Nearest Neighbor)算法:算法定义_k近邻算法估计e(y|x)-程序员宅基地

文章浏览阅读1.6w次,点赞4次,收藏4次。k近邻算法简单、直观:给定一个训练数据集DDD,对新的输入实例,在训练数据集中找到与该实例最邻近的kkk个实例,这kkk个实例的多数属于某个类,就把该输入实例分为这个类。下面先叙述kkk近邻算法,然后再讨论其细节:k近邻(k-Nearest Neighbor)算法输入:\qquad 训练集:D=(x1,y1),(x2,y2),⋯ ,(xN,yN)D = {(x_1, y_1), (x_2, y_2), \cdots, (x_N, y_N)}D=(x1​,y1​),(x2​,y2​),⋯,(xN​,y_k近邻算法估计e(y|x)

随便推点

水晶报表之图片(插入,显示)_水晶报表显示图片-程序员宅基地

文章浏览阅读4.5k次。工具:Crystal Reports 2008步骤一:打开水晶报表文件,点击上方 插入--->图片(选择文件位置) 接着将图片调整大小后添加到指定位置步骤二:设置图片显示规则,右键选择设置图形格式设置图片格式编辑图片显示规则..._水晶报表显示图片

python连接数据库命令_Mysql-python连接操作数据库-程序员宅基地

文章浏览阅读107次。使用python连接操作数据库--》下载配置python环境--》推荐安装PyMySQL 库:PyMySQL 是一个纯Python 实现的MySQL 客户端操作库,支持事务、存储过程、批量执行等使用命令:pip install pymysql--》连接数据库脚本1 #导入模块2 importpymysql3 #连接数据库4 conn =pymysql.connect(5 host='loc..._python在命令行中连接数据库

9月21日绝地求生服务器维护时间,前沿手游:绝地求生10月21日更新时间 绝地求生10月21日维护到几点...-程序员宅基地

文章浏览阅读448次。非常感谢朋友们点开小编的绝地求生10月21日更新时间 绝地求生10月21日维护到几点文章,因为大家现在都是想要了解到此类的信息,那么既然现在大家都想要知道绝地求生10月21日更新时间 绝地求生10月21日维护到几点,小编今天就来给大家针对这样的问题做个科普介绍吧。我将每天为大家收集和分享一些新鲜又有营养的精彩内容,希望大家能够一如既往的给予小编最大的鼓励和支持,毕竟大家的鼓励和支持才是小编持续更新...

安捷伦Agilent 4395A阻抗分析仪-程序员宅基地

文章浏览阅读332次,点赞10次,收藏6次。评估元件和电路通常需要的增益、相位、群延迟、失真、杂散、CN 和噪声测量可以使用一台仪器进行测量。动态幅度和相位精度为 +/-0.05dB 和 +/-0.3deg。作为频谱分析仪,它的工作频率范围为 10 Hz 至 500 MHz,分辨率带宽 (RBW) 以 1-3-10 步长跨越 1 Hz 至 1 MHz。噪声边带低于 -100 dBc/Hz @ 100 kHz 载波偏移,10 MHz 时灵敏度为 -145 dBm/Hz。+/-0.05 dB /+/-0.3deg 动态幅度/相位精度。

android 文件列表显示,Android: 显示SD卡文件列表-程序员宅基地

文章浏览阅读174次。读取SD卡文件信息,添加到ListView中显示出来:ListView取得SD文件信息的代码:[java]view plaincopy?List>list=newArrayList>();StringsDStateString=Environment.getExternalStorageState();if(sDStateString.equals(Environmen..._android 点击搜索出来的文件后,再点击查看内部文件或sd卡内的文件,这些文件显示一

初学编程需要什么基础,零基础学编程系统化编程课程之编程工具箱文件名称操作构件属性-程序员宅基地

文章浏览阅读66次。初学编程需要什么基础,零基础学编程系统化编程课程之编程工具箱文件名称操作构件属性。上图为 该编程工具构件的基本属性和方法。

推荐文章

热门文章

相关标签