Skip to content

Instantly share code, notes, and snippets.

@Taehun
Created December 16, 2020 08:56
Show Gist options
  • Save Taehun/3111ee9335f832530288164116c602e0 to your computer and use it in GitHub Desktop.
Save Taehun/3111ee9335f832530288164116c602e0 to your computer and use it in GitHub Desktop.
Argo Workflow 프레임 추출
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: media-works-
spec:
entrypoint: media-works-ffmpeg
volumes:
- name: workdir
persistentVolumeClaim:
claimName: azure-managed-disk
templates:
- name: media-works-ffmpeg
container:
image: briankim/ffmpeg:v1
command: [ffmpeg]
args: ["-i", "/mnt/vol/big_file.mp4","-r", "1/1", "/mnt/vol/$frame%03d.jpg"]
volumeMounts:
- name: workdir
mountPath: /mnt/vol
@Taehun
Copy link
Author

Taehun commented Dec 16, 2020

미디어 파일 올리기 위해 AKS에 Persistent Volumne 만들고, 업로드하고 워커 pod에서 마운트해서 사용하는 등 설정이 조금 복잡하네요.
k8s 사용법과 거의 동일하기때문에 k8s 익숙하신 분들을 위해서는 좋은것 같습니다.

@Taehun
Copy link
Author

Taehun commented Dec 16, 2020

  • PVC 설정 파일
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium
  resources:
    requests:
      storage: 5Gi

@Taehun
Copy link
Author

Taehun commented Dec 16, 2020

PVC 접근을 위한 더미 Pod 설정 파일

  • data_access.yaml
apiVersion: v1
kind: Pod
metadata:
    name: dataaccess
spec:
    containers:
    - name: alpine
      image: alpine:latest
      command: ['sleep', 'infinity']
      volumeMounts:
      - name: workdir
        mountPath: /mnt/vol
    volumes:
    - name: workdir
      persistentVolumeClaim:
        claimName: azure-managed-disk

저 파일을 kubectl apply -f data_access.yaml 로 띄운 다음,

$ kubectl cp small_file.mp4 dataaccess:/mnt/vol/small_file.mp4

식으로 Persistent Volumne에 파일 복사

@Taehun
Copy link
Author

Taehun commented Dec 16, 2020

프레임 추출 Job 실행을 위한 컨테이너 Dockerfile (briankim/ffmpeg:v1 이미지, Docker Hub에 올려놨어요.)

  • Dockerfile
FROM ubuntu:20.04
LABEL maintainer="Brian Kim"
RUN apt update && apt install -y ffmpeg

@Taehun
Copy link
Author

Taehun commented Dec 16, 2020

  • 병렬 처리를 위한 Dag 설정
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: dag-diamond-
spec:
  entrypoint: diamond
  volumes:
  - name: workdir
    persistentVolumeClaim:
      claimName: azure-managed-disk
  templates:
  - name: ffmpeg
    container:
      image: briankim/ffmpeg:v1
      command: [ffmpeg]
      args: ["-i", "/mnt/vol/small_file.mp4","-r", "1/1", "/mnt/vol/$frame%03d.jpg"]
      volumeMounts:
      - name: workdir
        mountPath: /mnt/vol
  - name: diamond
    dag:
      tasks:
      - name: A
        template: ffmpeg
      - name: B
        template: ffmpeg
      - name: C
        template: ffmpeg
      - name: D
        template: ffmpeg
      - name: E
        template: ffmpeg

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment