주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료할 때 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
OKE 및 OCI File Storage Service를 사용하여 OCI에서 Nextflow 파이프라인 실행
소개
대용량 파일을 처리하고, 중간 결과를 추적하고, 병렬 실행을 지원하는 다단계 데이터 파이프라인을 실행해야 하는 많은 사용 사례가 있습니다. Oracle Cloud Infrastructure(OCI) Functions는 이벤트 기반 및 Stateless 작업에 적합하지만, 일부 워크플로에는 여러 단계의 통합관리 및 데이터 흐름을 위해 설계된 시스템이 필요합니다.
Nextflow는 컨테이너, 입/출력 처리 및 OKE에서의 확장 가능한 실행을 위한 기본 제공 지원을 통해 이러한 요구를 해결합니다. 분산 환경에서 효율적으로 실행되는 재현 가능한 파이프라인을 지원합니다.
목표
- 공유 볼륨에 Oracle Cloud Infrastructure File Storage 서비스를 사용하고 액세스 및 제어를 위해 배스천 호스트를 사용하여 Oracle Cloud Infrastructure Kubernetes Engine(OKE)에 최소한의 Nextflow 파이프라인을 배포합니다.
필요 조건
-
OCI 테넌시에 액세스합니다.
-
OCI 컴퓨트 인스턴스, OKE 클러스터 및 네트워킹 리소스를 생성하고 관리하는 권한입니다.
-
공용 서브넷이 있는 VCN(가상 클라우드 네트워크)의 기존 OKE 클러스터입니다.
-
기존 OCI 파일 스토리지 서비스 볼륨입니다.
-
OKE 클러스터와 동일한 VCN의 공용 서브넷에서 OCI 배스천 점포스트 역할을 하는 기존 OCI 컴퓨트 인스턴스입니다.
작업 1: 워커 노드 준비
OCI 파일 스토리지 서비스 볼륨을 마운트하려면 OKE 노드에 NFS(네트워크 파일 시스템) 클라이언트 유틸리티가 설치되어 있어야 합니다.
SSH를 사용하여 각 워커 노드에 연결하고 다음 명령을 실행합니다.
sudo yum install -y nfs-utils
sudo systemctl enable --now nfs-client.target || true
참고: OCI File Storage 서비스를 수동으로 마운트할 필요는 없습니다. OKE는 Persistent Volume을 사용하여 자동으로 마운트를 처리합니다.
작업 2: OCI 배스천 호스트 설정
새 배스천 호스트로 시작하는 경우 다음을 설치합니다.
-
OCI CLI(Oracle Cloud Infrastructure Command Line Interface) 자세한 내용은 Installing the CLI를 참조하십시오.
-
kubectl 및 Kubeconfig setup. 자세한 내용은 Accessing a Cluster Using Kubectl를 참조하십시오.
-
클러스터 접속: OCI 콘솔 클러스터 세부정보 페이지에서 찾을 수 있는 클러스터 액세스 지침을 따릅니다.
-
예를 들어, /mnt/nextflow-fss 아래에 FSS 볼륨을 배스천에 마운트합니다. 예를 들어, 아래 작업 3의 그림에서 마운트 대상의 전용 IP, OCI FSS의 내보내기 경로 및 배스천의 기존 /mnt/nextflow-fss 디렉토리를 고려할 경우 이 명령은 다음과 같습니다.
sudo mount -t nfs 10.0.10.163:/nextflow /mnt/nextflow-fss
위와 같이 작업자 노드에 대한 nfs-utils도 여기에 설치되어 있는지 확인합니다.
보안 권장 사항:
-
NSG 또는 보안 목록을 사용하여 배스천에 대한 SSH 액세스를 제한합니다. FSS 액세스를 위해 포트 2049가 열려 있는지 확인합니다.
-
개인 SSH 키 및 kubeconfig가 안전하게 저장되어 있는지 확인합니다.
작업 3: 배스천에서 Nextflow 구성
배스천 VM에서 모든 단계를 실행합니다.
-
네임스페이스 생성.
다음 명령을 실행하여 전용 네임스페이스를 만듭니다.
kubectl create namespace nextflow-ns
-
Configure Persistent Volume and Persistent Volume Claim (PVC)
-
nextflow-fss.yaml
라는 파일을 만들고nextflow-fss.yaml
에서 콘텐츠를 다운로드합니다. -
OCI 콘솔의 OCI 파일 스토리지 서비스 마운트 대상 세부정보에 있는
<MOUNT_TARGET_IP>
를 실제 마운트 대상 IP(예:10.0.10.163
)로 바꾸어야 합니다. -
내보내기 경로도 기록하고 이 동일한 파일에서 교체합니다.
-
다음 명령을 실행하여 파일을 적용합니다.
kubectl apply -f nextflow-fss.yaml
-
-
서비스 계정 및 RBAC(역할 기반 액세스 제어) 만들기.
이는 OKE 클러스터에서 실행 중인 Nextflow 작업에 파이프라인 실행 중 OKE 리소스와 상호 작용하는 데 필요한 권한이 있는지 확인하기 위해 생성됩니다.
OKE에서 실행할 때 다음 플로우는 다음을 수행해야 합니다.
- 각 프로세스 단계에 대해 POD를 실행합니다.
- 상태를 모니터링합니다.
- 액세스 로그.
- PVC에 바인드합니다.
그러나 기본적으로 Kubernetes 작업은 적절한 RBAC 바인딩을 가진 서비스 계정을 통해 명시적으로 부여되지 않는 한 이러한 작업을 수행할 수 있는 권한이 없습니다.
다음 명령을 실행하여 서비스 계정을 만듭니다.
kubectl create serviceaccount nextflow-sa -n nextflow-ns kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: nextflow-pod-role namespace: nextflow-ns rules: - apiGroups: [""] resources: ["pods", "pods/log", "pods/status", "persistentvolumeclaims"] verbs: ["create", "get", "watch", "list", "delete"] EOF kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: nextflow-pod-binding namespace: nextflow-ns subjects: - kind: ServiceAccount name: nextflow-sa namespace: nextflow-ns roleRef: kind: Role name: nextflow-pod-role apiGroup: rbac.authorization.k8s.io EOF
-
(선택 사항) Nextflow 파이프라인에 대한 테스트 데이터 파일 생성.
다음 명령을 실행하여 나중에 Nextflow에서 사용할 일부 파일을 만듭니다.
mkdir -p /mnt/nextflow-fss/data echo -e "line1\nline2\nline3" > /mnt/nextflow-fss/data/test1.txt echo -e "nextflow\nrocks" > /mnt/nextflow-fss/data/test2.txt
-
파이프라인 파일 생성.
이 섹션에서는 Nextflow 파이프라인 논리(
main.nf
) 및 해당 Kubernetes 특정 구성(nextflow.config
), 워크플로우 실행 방법, 사용할 컨테이너 및 클러스터에서 공유 스토리지를 마운트하는 방법을 정의합니다.다음 위치에서 배스천 VM에 해당 파일을 만들고 다운로드합니다.
-
Kubernetes ConfigMap를 생성합니다.
Kubernetes ConfigMap를 생성하여
main.nf
및nextflow.config
파일을 패키지화하여 런타임에 Nextflow Pod에 삽입할 수 있습니다.kubectl create configmap nextflow-code \ --from-file=main.nf \ --from-file=nextflow.config \ -n nextflow-ns \ --dry-run=client -o yaml | kubectl apply -f -
-
다음 플로우 작업 YAML 생성 및 실행
이 섹션에서는 컨테이너 내에서 Nextflow 워크플로우를 실행하는 Kubernetes 작업을 정의합니다. 권한에 대해 이전에 생성된 서비스 계정을 사용하고, 공유 볼륨 및 ConfigMap를 마운트하고, Kubernetes 실행에 필요한 작업 디렉토리 및 환경 변수를 설정합니다.
-
nextflow-job.yaml
라는 파일을 만들고 여기에서 다운로드합니다. nextflow-job.yaml. -
다음 명령을 실행하여 파일을 적용합니다.
kubectl apply -f nextflow-job.yaml
적용을 실행하면 마운트된 파이프라인 코드 및 구성으로 Nextflow run 명령을 실행하는 작업을 생성하고, 파이프라인 프로세스를 Kubernetes Pod로 실행하고, 마운트된 OCI File Storage 서비스 볼륨을 통해 입/출력을 처리하는 작업이 생성됩니다.
-
-
POD 실행을 모니터링합니다.
다음 명령을 사용하여 실행된 POD 및 작업 로그를 모니터할 수 있습니다.
kubectl get pods -n nextflow-ns -w kubectl logs -n nextflow-ns -l job-name=nextflow-job --tail=100
-
출력 파일을 찾습니다.
다음 명령을 사용하여
.count
출력 파일을 찾아야 합니다.ls /mnt/nextflow-fss/data/*.count
-
재테스트를 위해 정리.
# Remove old job and pods kubectl delete job --all -n nextflow-ns kubectl delete pod --all -n nextflow-ns # Delete only count files to rerun sudo find /mnt/nextflow-fss -name "*.count" -type f -delete
주:
main.nf
또는nextflow.config
파일을 변경하는 경우 ConfigMap도 다시 생성합니다.
문제해결 팁:
- 볼륨이 모든 포드에서 Kubernetes에 의해 올바르게 마운트되었는지 확인합니다.
nfs-utils
가 모든 OKE 작업자 노드에 설치되어 있는지 확인합니다.- OCI 파일 스토리지 서비스 익스포트가 OKE 노드 서브넷에서 액세스를 허용하는지 확인하십시오.
-
필요한 경우 다음 명령을 사용하여 실패한 포드를 설명하십시오.
kubectl describe pod <pod-name> -n nextflow-ns
작업 4: CPU 일정 잡기 및 Pod 병렬화 평가
Nextflow는 각 작업에 대해 별도의 포드를 실행하여 프로세스를 병렬화합니다. OKE 노드에 CPU 리소스가 제한되어 있는 경우(예: vCPU 1개) Kubernetes는 각 포드가 전체 CPU를 요청하는 경우 한 번에 하나의 포드만 예약할 수 있습니다.
실행 중 작업 로그에 다음 경고가 표시될 수 있습니다.
WARN: K8s pod cannot be scheduled -- 0/1 nodes are available: 1 Insufficient cpu.
그 이유는 다음과 같습니다.
- Nextflow는 기본적으로 모든 작업을 병렬로 제출합니다.
- 1개의 CPU 워커 노드가 있고 노드가 이미 1개의 CPU를 사용하는 포드를 실행 중인 경우 리소스를 사용할 수 있을 때까지 추가 포드를 대기열에 넣습니다.
- 따라서 실행 속도가 느려지지만 결국 모든 작업이 완료됩니다.
솔루션:
-
옵션 1: 프로세스당 CPU 요청을 줄입니다.
nextflow.config
파일에서 작업당 CPU 사용량을 제한할 수 있습니다.process { cpus = 0.5
제공된
nextflow.config
에는 이 라인이 이미 있으며 매우 간단한 데모 데이터에 충분하게 0.1로 설정되어 있습니다. 필요에 따라 값을 포함하거나 수정할 수 있습니다. -
옵션 2: 더 큰 노드를 사용합니다.
더 많은 포드를 병렬로 실행할 수 있도록 2+ vCPUs를 사용하여 노드 구성을 하나로 업그레이드합니다.
관련 링크
승인
- 작성자 - Adina Nicolescu(수석 클라우드 엔지니어)
추가 학습 자원
docs.oracle.com/learn에서 다른 랩을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Run Nextflow Pipelines on OCI using OKE and OCI File Storage Service
G34276-01
Copyright ©2025, Oracle and/or its affiliates.