Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Execute Pipelines de Nextflow no OCI usando o OKE e o OCI File Storage Service
Introdução
Há muitos casos de uso em que você precisa executar pipelines de dados de várias etapas que processam arquivos grandes, rastreiam resultados intermediários e suportam a execução paralela. Embora o Oracle Cloud Infrastructure (OCI) Functions seja adequado para tarefas orientadas a eventos e sem monitoramento de estado, alguns fluxos de trabalho exigem um sistema projetado para orquestração e fluxo de dados em várias etapas.
O Nextflow atende a essa necessidade com suporte integrado para contêineres, manipulação de entrada/saída e execução escalável no OKE. Ele permite pipelines reproduzíveis que são executados com eficiência em ambientes distribuídos.
Objetivos
- Implante um pipeline mínimo do Nextflow no Oracle Cloud Infrastructure Kubernetes Engine (OKE), usando o serviço Oracle Cloud Infrastructure File Storage para volumes compartilhados e um bastion host para acesso e controle.
Pré-requisitos
-
Acesso a uma tenancy da OCI.
-
Permissões para criar e gerenciar instâncias do OCI Compute, clusters do OKE e recursos de rede.
-
Um cluster existente do OKE em uma VCN (Rede Virtual na Nuvem) que tem uma sub-rede pública.
-
Volume do serviço OCI File Storage existente.
-
Instância existente do OCI Compute para atuar como o Bastion do OCI em uma sub-rede pública na mesma VCN que o cluster do OKE.
Tarefa 1: Preparar os Nós de Trabalho
Os nós do OKE devem ter utilitários cliente NFS (Network File System) instalados para montar o volume do serviço OCI File Storage.
Estabeleça SSH em cada nó de trabalho e execute o comando a seguir.
sudo yum install -y nfs-utils
sudo systemctl enable --now nfs-client.target || true
Observação: Você não precisa montar manualmente o serviço OCI File Storage. O OKE tratará da montagem automaticamente usando o Volume Persistente.
Tarefa 2: Configurar o Host Bastion do OCI
Se você estiver começando com um novo bastion host, instale o seguinte:
-
Interface de Linha de Comando (CLI do OCI) do Oracle Cloud Infrastructure. Para obter mais informações, consulte Instalando a CLI.
-
Configuração do kubectl e do Kubeconfig. Para obter mais informações, consulte Acessando um Cluster com o Kubectl.
-
Conexão do cluster: Siga as instruções de Acessar Seu Cluster, que você pode encontrar na página de detalhes do cluster da Console do OCI.
-
Monte o volume do FSS no bastion, por exemplo, em /mnt/nextflow-fss. Por exemplo, considerando o IP privado do ponto de acesso NFS na imagem na Tarefa 3 abaixo, o caminho de exportação do FSS do OCI e um diretório /mnt/nextflow-fss existente no bastion, o comando seria:
sudo mount -t nfs 10.0.10.163:/nextflow /mnt/nextflow-fss
Certifique-se de que o nfs-utils também esteja instalado aqui, como acima, para os nós de trabalho.
Recomendações de Segurança:
-
Use NSGs ou listas de segurança para restringir o acesso SSH ao bastion. Certifique-se de que a porta 2049 esteja aberta para acesso ao FSS.
-
Certifique-se de que a chave SSH privada e o kubeconfig sejam armazenados com segurança.
Tarefa 3: Configurar o Próximo Fluxo no Bastion
Execute todas as etapas da sua VM bastion.
-
Criar um Namespace.
Execute o seguinte comando para criar um namespace dedicado.
kubectl create namespace nextflow-ns
-
Configurar Demanda de Volume Persistente e de Volume Persistente (PVC).
-
Crie um arquivo chamado
nextflow-fss.yaml
e faça download do conteúdo aqui:nextflow-fss.yaml
. -
Certifique-se de substituir
<MOUNT_TARGET_IP>
pelo IP do ponto de acesso NFS real (por exemplo,10.0.10.163
), encontrado nos detalhes do ponto de acesso NFS do serviço OCI File Storage na Console do OCI. -
Anote também o caminho de exportação e substitua-o neste mesmo arquivo.
-
Execute o comando a seguir para aplicar o arquivo.
kubectl apply -f nextflow-fss.yaml
-
-
Criar um RBAC (Conta de Serviço e Controle de Acesso Baseado em Atribuição).
Eles serão criados para garantir que o job Nextflow em execução no seu cluster do OKE tenha as permissões necessárias para interagir com recursos do OKE durante a execução do pipeline.
O Nextflow, quando executado no OKE, precisa:
- Inicie pods para cada etapa do processo.
- Monitorar seu status.
- Logs de acesso.
- Vincule à PVC.
No entanto, por padrão, os jobs do Kubernetes não têm permissão para executar essas ações, a menos que sejam explicitamente concedidos por meio de uma conta de serviço com bindings RBAC adequados.
Execute o seguinte comando para criar uma conta de serviço.
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
-
(Opcional) Criar Arquivos de Dados de Teste para o Pipeline do Nextflow.
Execute o comando a seguir para criar alguns arquivos para uso posterior no 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
-
Crie os Arquivos de Pipeline.
Esta seção define a lógica do pipeline do Nextflow (
main.nf
) e sua configuração específica do Kubernetes (nextflow.config
), especificando como o workflow deve ser executado, qual contêiner usar e como montar o armazenamento compartilhado no cluster.Crie e faça download destes arquivos em sua VM bastion aqui:
-
Criar um ConfigMap do Kubernetes.
Crie um ConfigMap do Kubernetes para empacotar os arquivos
main.nf
enextflow.config
para que eles possam ser injetados no pod Nextflow no runtime.kubectl create configmap nextflow-code \ --from-file=main.nf \ --from-file=nextflow.config \ -n nextflow-ns \ --dry-run=client -o yaml | kubectl apply -f -
-
Criar e Executar Job do Nextflow YAML.
Esta seção define o job do Kubernetes que executa o workflow Nextflow dentro de um contêiner. Ele usa a conta de serviço criada anteriormente para permissões, monta o volume compartilhado e ConfigMap e define o diretório de trabalho e as variáveis de ambiente necessárias para a execução do Kubernetes.
-
Crie os arquivos nomeados
nextflow-job.yaml
e faça download aqui: nextflow-job.yaml. -
Execute o comando a seguir para aplicar o arquivo.
kubectl apply -f nextflow-job.yaml
Ao executar a aplicação, você criará o job, que executa o comando de execução do Nextflow com o código e a configuração do pipeline montado, iniciando os processos do pipeline como pods do Kubernetes e tratando a entrada/saída por meio do volume de serviço do OCI File Storage montado.
-
-
Monitorar a execução dos pods.
Você pode monitorar os pods que são iniciados e o log de jobs usando o comando a seguir.
kubectl get pods -n nextflow-ns -w kubectl logs -n nextflow-ns -l job-name=nextflow-job --tail=100
-
Localize o arquivo de saída.
Você deve encontrar os arquivos de saída
.count
usando o comando a seguir.ls /mnt/nextflow-fss/data/*.count
-
Limpeza para novo teste.
# 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
Observação: Se você fizer alterações nos arquivos
main.nf
ounextflow.config
, também recrie o ConfigMap.
Dicas de solução de problemas:
- Certifique-se de que o volume esteja montado corretamente pelo Kubernetes em todos os pods.
- Certifique-se de que
nfs-utils
esteja instalado em todos os nós de trabalho do OKE. - Certifique-se de que a exportação do serviço OCI File Storage permita acesso pela sub-rede do nó do OKE.
-
Se necessário, descreva pods com falha usando o comando a seguir.
kubectl describe pod <pod-name> -n nextflow-ns
Tarefa 4: Avaliar Programação de CPU e Paralelismo de Pod
O Nextflow paraleliza processos iniciando um pod separado para cada tarefa. Se o seu nó do OKE tiver recursos de CPU limitados, como apenas 1 vCPU, o Kubernetes só poderá programar um pod por vez se cada pod solicitar uma CPU completa.
Durante a execução, você poderá ver a seguinte advertência no log de jobs.
WARN: K8s pod cannot be scheduled -- 0/1 nodes are available: 1 Insufficient cpu.
Por que isso acontece:
- O Nextflow envia todas as tarefas em paralelo por padrão.
- Se você tiver um nó de trabalho de 1 CPU e o nó já estiver executando um pod que use 1 CPU, pods adicionais serão enfileirados até que os recursos fiquem disponíveis.
- Isso resulta em uma execução mais lenta, mas todos os jobs serão concluídos.
Soluções:
-
Opção 1: Reduzir solicitações de CPU por processo.
Você pode limitar o uso da CPU por tarefa no arquivo
nextflow.config
.process { cpus = 0.5
No
nextflow.config
fornecido, você verá que essa linha já existe e está definida como 0.1, o que é suficiente para nossos dados de demonstração muito simples. Você pode incluí-lo ou modificar o valor conforme necessário. -
Opção 2: Use um nó maior.
Faça upgrade da forma do nó para uma com mais de 2+ vCPUs para permitir que mais pods sejam executados em paralelo.
Links Relacionados
Confirmações
- Autor - Adina Nicolescu (Engenheira Sênior de Nuvem)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Run Nextflow Pipelines on OCI using OKE and OCI File Storage Service
G34277-01
Copyright ©2025, Oracle and/or its affiliates.