공부하기싫어

목차

    테스트 목표

    • 컨테이너 생성 후 실행되는 명령을 정의하는 '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