今天我们要使用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套件即可。
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是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中有几项栏位:
nodeSelector用来指定运行在哪个节点上、restartPolicy则是重新执行的政策,当它运行失败时会自动重新执行。
# 查看排程
kubectl get cronjob
从Grafana的图形中可以看到:
在边缘端的感测器资料图中,12.多以前的资料被截掉了(因为每4小时备份一次,所以会在每天的0、4、8、12、16、20点进行备份)
透过Grafana取得云端的资料库之後也可以看到,在边缘端上面被截断的资料有成功备份到云端资料库中。
<<: [DAY-28] 孩子玩滑板时,不要干扰他们 / 在路上遇到猫,就摸一摸
>>: (DAY 29) MS Teams另类应用:视讯切换器
This last year 2021, was great for the bitdataconv...
今天我们来介绍云端的监控, Cloud Operations Suite 。这个服务以前被称做 St...
为什麽要建立品牌的搜寻广告活动 让使用者在搜索您的商家时可以直接进到您的商家官网,避免当使用者在搜索...
CSS属性书写顺序建议 建议遵循以下顺序 1. 布局定位属性 : display / positio...
接下来的 12 天,会用每天刷 leetcode 练习的方式来练习 Go 那麽话不多说,我们就进入正...