我想让一个Python脚本在Kubernetes中简单地创建一个文件,每隔一段时间运行一次。首先,我使用docker镜像一次性运行一个Python脚本,但我得到一个错误。
create_txt.py
import numpy as np
import datetime
res = np.random.rand(1)[0]
res = np.round(res,3) * 1000
with open(f'/home/sjw/kube/{str(int(res))}.txt','w') as f:
txt = datetime.datetime.now().strftime("%H:%M:%S")
f.write(txt)
Dockerfile
FROM python:3
WORKDIR /home/sjw/kube
COPY create_txt.py ./
RUN pip install numpy
CMD ["python","./create_txt.py"]
首先,我把镜像上传到Docker Hub。
以下是明显的
apiVersion: v1
kind: Pod
metadata:
name: createinterval
spec:
containers:
- name: createinterval
image: idioluck/kube_create:v01
command: ["/bin/sh"]
args: ["python create_txt.py"]
volumeMounts:
- mountPath: /home/sjw/kube
name: testvol
volumes:
- name: testvol
hostPath:
path: /home/sjw/kube
type: DirectoryOrCreate
吊舱状态是
NAME READY STATUS RESTARTS AGE
createinterval 0/1 CrashLoopBackOff 7 (90s ago) 12m
我想最终使用cronjob来运行一个python脚本,定期创建一个文件,并将结果保存到一个连接的本地存储。
**附上kubectl describe pod createinterval的输出。
sjw@DESKTOP-O6E7MND:~/kube/docker_sample/kube_create_txt_interval$ kubectl describe pod createinterval
Name: createinterval
Namespace: default
Priority: 0
Node: minikube/192.168.49.2
Start Time: Mon, 05 Sep 2022 16:42:24 +0900
Labels: <none>
Annotations: <none>
Status: Running
IP: 172.17.0.4
IP: 172.17.0.4
Containers:
createinterval:
Container ID: docker://89d2fd4597e445bfd11dace1e06ab325572d2e3072d14df9892b31ebbc7fa7d1
Image: idioluck/kube_create:v02
Image ID: docker-pullable://idioluck/kube_create@sha256:0868e3dc569c88641a3db05adbf2be9387609f9a0d184869ac939e80b93af5bb
Port: <none>
Host Port: <none>
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Completed
Exit Code: 0
Started: Mon, 05 Sep 2022 17:08:35 +0900
Finished: Mon, 05 Sep 2022 17:08:35 +0900
Ready: False
Restart Count: 10
Environment: <none>
Mounts:
/home/sjw/kube from testvol (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5n28q (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
testvol:
Type: HostPath (bare host directory volume)
Path: /home/sjw/kube
HostPathType: DirectoryOrCreate
kube-api-access-5n28q:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 27m default-scheduler Successfully assigned default/createinterval to minikube
Normal Pulling 27m kubelet Pulling image "idioluck/kube_create:v02"
Normal Pulled 26m kubelet Successfully pulled image "idioluck/kube_create:v02" in 4.633892322s
Normal Created 25m (x5 over 26m) kubelet Created container createinterval
Normal Started 25m (x5 over 26m) kubelet Started container createinterval
Normal Pulled 25m (x4 over 26m) kubelet Container image "idioluck/kube_create:v02" already present on machine
Warning BackOff 109s (x117 over 26m) kubelet Back-off restarting failed container