Observação:

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

Pré-requisitos

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:

Recomendações de Segurança:

Tarefa 3: Configurar o Próximo Fluxo no Bastion

Execute todas as etapas da sua VM bastion.

  1. Criar um Namespace.

    Execute o seguinte comando para criar um namespace dedicado.

    kubectl create namespace nextflow-ns
    
  2. Configurar Demanda de Volume Persistente e de Volume Persistente (PVC).

    1. Crie um arquivo chamado nextflow-fss.yaml e faça download do conteúdo aqui: nextflow-fss.yaml.

    2. 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.

      IP do ponto de acesso NFS

    3. Anote também o caminho de exportação e substitua-o neste mesmo arquivo.

    4. Execute o comando a seguir para aplicar o arquivo.

      kubectl apply -f nextflow-fss.yaml
      
  3. 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
    
  4. (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
    
  5. 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:

  6. Criar um ConfigMap do Kubernetes.

    Crie um ConfigMap do Kubernetes para empacotar os arquivos main.nf e nextflow.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 -
    
  7. 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.

    1. Crie os arquivos nomeados nextflow-job.yaml e faça download aqui: nextflow-job.yaml.

    2. 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.

  8. 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
    
  9. 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
    
  10. 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 ou nextflow.config, também recrie o ConfigMap.

Dicas de solução de problemas:

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:

Soluções:

Confirmações

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.