목차
테스트 목표
- 컨테이너 생성 후 실행되는 명령을 정의하는 'CMD' 동작 확인
- k8s cronjob 동작 확인
테스트 코드 1
demo_app.py
import datetime
import time
# .log 파일에 결과 기록
def open_logfile(n):
log_file_name=n
f=open(log_file_name, 'a')
return f
def write_and_flush_logs(f, log_string):
logs=log_string+"\n"
f.write(logs); f.flush()
def close_logfile(f):
f.close()
logfile=open_logfile('output.log')
#5분동안 실행
start_time = datetime.datetime.now()
end_time = start_time + datetime.timedelta(minutes=5)
while True :
dt_now = datetime.datetime.now()
logs="running :"+str(dt_now)
write_and_flush_logs(logfile, logs)
if dt_now > end_time :
close_logfile(logfile)
break
time.sleep(1)
약 5분간 현재 시간을 output.log 에 찍는 python 코드
Dockerfile
FROM python:3.10
RUN apt-get update && apt-get install -y \
vim
WORKDIR /home
COPY . .
RUN pip install --upgrade pip
CMD ["python3", "demo_app.py"]
cmd 명령문을 통해 python 실행
demo_pod.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-every-7m
namespace: demo
spec:
schedule: "*/7 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: demo-v.1.3
namespace: demo
spec:
containers:
- name: python-app
image: cyaninn/demo:v.1.3
restartPolicy: OnFailure
7분마다 pod 를 실행하도록 설정
container 내부 확인
$ k exec -it cronjob-every-7m-28118474-79vrg -n demo /bin/bash
/home# ls
Dockerfile demo_app.py output.log
cronjob 동작 확인
$ k get all -n demo
NAME READY STATUS RESTARTS AGE
pod/cronjob-every-7m-28118474-79vrg 0/1 Completed 0 8m36s
pod/cronjob-every-7m-28118481-6vxkp 1/1 Running 0 96s
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/cronjob-every-7m */7 * * * * False 1 97s 12m
NAME COMPLETIONS DURATION AGE
job.batch/cronjob-every-7m-28118474 1/1 5m10s 8m37s
job.batch/cronjob-every-7m-28118481 0/1 97s 97s
테스트 코드 2
- 앱은 동일하게 설정하고 Cronjob 의 UTC -> KST 동작 확인
UTC와 KST를 변환하는 공식은 다음과 같습니다.
KST = UTC + 9
UTC = KST - 9
예를 들어, UTC가 12시라면 KST는 21시입니다. UTC가 24시라면 KST는 3시입니다.
$ k get all -n demo
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/cronjob-test 40 18 * * * False 0 <none> 77s
위 cronjob batch 시간은 오전 3:35
5분뒤 cronjob 동작을 확인
demo_pod.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-test
namespace: demo
spec:
schedule: "40 18 * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: demo-v.1.3
namespace: demo
spec:
containers:
- name: python-app
image: cyaninn/demo:v.1.3
restartPolicy: OnFailure
cronjob batch 결과 확인
$ date
Mon Jun 19 03:40:10 KST 2023
ubuntu@k3s:~/demo$ k get all -n demo
NAME READY STATUS RESTARTS AGE
pod/cronjob-test-28118560-f6jmm 1/1 Running 0 11s
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/cronjob-test 40 18 * * * False 1 11s 4m47s
NAME COMPLETIONS DURATION AGE
job.batch/cronjob-test-28118560 0/1 11s 11s
'1인개발 메이킹로그 > [Infra+k8s+App] 가상화폐 자동매매' 카테고리의 다른 글
[Error] pod not completed (0) | 2023.06.25 |
---|---|
[Error] string indices must be integers (0) | 2023.06.24 |
[Prototype-v1] 레거시 POD 배포 (0) | 2023.06.16 |
[테스트] image 생성 및 pod 생성 (0) | 2023.06.15 |
[AWS-Server] Troubleshooting - ModuleNotFoundError: No module named 'pyupbit' (0) | 2023.05.20 |