Day 29 KubeEdge小专题: 使用Job实现定期备份功能

今天我们要使用Cron job作排程,搭配几天前用python实现的备份程序。

容器化应用

将应用打包成映像档。因为在树梅派上执行的缘故,我的映像档选择使用arm版本的python3,需要在树梅派上打包与运行。接着将必要的档案放入,
esp8266.py对应到的是在Day 24中的python档、backup.py对应到Day 25用来备份资料库的程序码,dht11.py则是透过GPIO取得dht11感测器资料并直接写入资料库的程序。

FROM arm32v7/python:3.7.9

COPY requirements.txt /cmd/requirements.txt
COPY esp8266.py /cmd/esp8266.py
COPY backup.py /cmd/backup.py
COPY dht11.py /cmd/dht11.py

RUN pip3 install -r /cmd/requirements.txt

其他环境

在一开始测试程序时,我使用virtulenv创建一个乾净的开发环境,同时将使用到的安装包汇出程一个档案後,创建映像档时便可以将它放入,安装必要的python套件即可。

requirements.txt
certifi==2020.6.20
chardet==3.0.4
dnspython==2.0.0
idna==2.10
influxdb==5.3.0
msgpack==0.6.1
paho-mqtt==1.5.0
python-dateutil==2.8.1
python-etcd==0.4.5
pytz==2020.1
requests==2.24.0
six==1.15.0
urllib3==1.25.10
Adafruit-DHT==1.4.0

build完映像档後便可以接着下一步。

Cron job布署

Cron job是Kubernetes用来作定期排程的资源类型。在这里我们利用定期排程的特性让它定时执行备份程序。底下是我的YAML:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: databackup-lightsensor-test
spec:
  schedule: "0 */4 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: alan0415/handler-arm:v3
            args:
            - python3
            - /cmd/backup.py
          nodeSelector:
            name: edge-1
          restartPolicy: OnFailure

在YAML中有几项栏位:

  • spec.schedule
  • jobTemplate.spec.template.spec.containers
    这个地方就跟Deployment中的YAML差不多,同样是给定容器相关的参数。image的部份就是我透过刚刚的Dockerfile build出来的映像档;args则是运行容器的参数。

nodeSelector用来指定运行在哪个节点上、restartPolicy则是重新执行的政策,当它运行失败时会自动重新执行。

# 查看排程
kubectl get cronjob


从Grafana的图形中可以看到:

在边缘端的感测器资料图中,12.多以前的资料被截掉了(因为每4小时备份一次,所以会在每天的0、4、8、12、16、20点进行备份)

透过Grafana取得云端的资料库之後也可以看到,在边缘端上面被截断的资料有成功备份到云端资料库中。


<<:  [DAY-28] 孩子玩滑板时,不要干扰他们 / 在路上遇到猫,就摸一摸

>>:  (DAY 29) MS Teams另类应用:视讯切换器

OST to PST converter

This last year 2021, was great for the bitdataconv...

[Day18] Operations Suite

今天我们来介绍云端的监控, Cloud Operations Suite 。这个服务以前被称做 St...

Day 03 认识你的消费者

为什麽要建立品牌的搜寻广告活动 让使用者在搜索您的商家时可以直接进到您的商家官网,避免当使用者在搜索...

Day 13 CSS <属性书写顺序 & 网页布局-标准布局>

CSS属性书写顺序建议 建议遵循以下顺序 1. 布局定位属性 : display / positio...

Day18# Leetcode TwoSum

接下来的 12 天,会用每天刷 leetcode 练习的方式来练习 Go 那麽话不多说,我们就进入正...