Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

Criação de uma tarefa

Cenário

As tarefas são de curta duração e correm por um certo tempo até a conclusão. Elas podem ser executados imediatamente após serem implementados. É concluído depois de sair normalmente (exit 0).

Uma tarefa é um objeto de recurso usado para controlar tarefas em lote. É diferente de uma carga de trabalho servo de longo prazo (como Implementação e StatefulSet).

Uma tarefa é iniciada e terminada em horários específicos, enquanto uma carga de trabalho servo de longo prazo é executada incessantemente, a menos que seja terminada. Os pods gerenciados por uma tarefa saem automaticamente após a conclusão bem-sucedida da tarefa com base nas configurações do usuário. O sinalizador de sucesso varia de acordo com a política spec.completions.

  • Tarefas únicas: um único pod é executado uma vez até o encerramento bem-sucedido.
  • Empregos com uma contagem fixa de sucesso: os N pods são executados até o término bem-sucedido.
  • Uma tarefa de fila é considerada concluída com base no sucesso global confirmado pela aplicação.

Pré-requisitos

Os recursos foram criados. Para mais detalhes, consulte Criação de um nó. Se clusters e nós estiverem disponíveis, não será necessário criá-los novamente.

Usar o console do CCE

  1. Efetue logon no console do CCE.
  2. Clique no nome do cluster para acessar o console do cluster, escolha Workloads no painel de navegação e clique em Create Workload no canto superior direito.
  3. Defina informações básicas sobre a carga de trabalho.

    Basic Info
    • Workload Type: selecione Job. Para obter detalhes sobre os tipos de carga de trabalho, consulte Visão geral.
    • Workload Name: insira o nome da carga de trabalho. Digite de 1 a 63 caracteres começando com uma letra minúscula e terminando com uma letra minúscula ou dígito. Somente letras minúsculas, dígitos e hifens (-) são permitidos.
    • Namespace: selecione o namespace da carga de trabalho. O valor padrão é default. Você também pode clicar em Create Namespace para criar um. Para mais detalhes, consulte Criação de um namespace.
    • Pods: digite o número de pods da carga de trabalho.
    • Container Runtime: um cluster do CCE usa runC por padrão, enquanto um cluster do CCE Turbo suporta runC e Kata. Para obter detalhes sobre as diferenças, consulte Tempo de execução do Kata e tempo de execução comum.
    Container Settings
    • Informações sobre o contêiner
      Vários contêineres podem ser configurados em um pod. Você pode clicar em Add Container à direita para configurar vários contêineres para o pod.
      • Basic Info: configure informações básicas sobre o contêiner.

        Parâmetro

        Descrição

        Container Name

        Nomeie o contêiner.

        Pull Policy

        Política de atualização ou extração de imagem. Se você selecionar Always, a imagem será extraída do repositório de imagens a cada vez. Se você não selecionar Always, a imagem existente do nó é usada preferencialmente. Se a imagem não existir, a imagem será extraída do repositório de imagens.

        Image Name

        Clique em Select Image e selecione a imagem usada pelo contêiner.

        Para usar uma imagem de terceiros, consulte Uso de imagens de terceiros.

        Image Tag

        Selecione a tag de imagem a ser implementada.

        CPU Quota

        • Request: número mínimo de núcleos de CPU exigidos por um contêiner. O valor padrão é 0,25 núcleos.
        • Limit: número máximo de núcleos de CPU disponíveis para um contêiner. Não deixe Limit não especificado. Caso contrário, ocorrerá um uso intensivo de recursos de contêiner e sua carga de trabalho poderá exibir um comportamento inesperado.

        Se Request e Limit não forem especificados, a cota não é limitada. Para obter mais informações e sugestões sobre Request e Limit, consulte Configuração de especificações do contêiner.

        Memory Quota

        • Request: quantidade mínima de memória requerida por um contêiner. O valor padrão é 512 MiB.
        • Limit: quantidade máxima de memória disponível para um contêiner. Quando o uso de memória exceder o limite de memória especificado, o contêiner será encerrado.

        Se Request e Limit não forem especificados, a cota não é limitada. Para obter mais informações e sugestões sobre Request e Limit, consulte Configuração de especificações do contêiner.

        (Optional) GPU Quota

        Configurável somente quando o cluster contém nós de GPU e o complemento Suíte IA do CCE (GPU NVIDIA) está instalado.

        • All: nenhuma GPU será usada.
        • Dedicated: os recursos da GPU são dedicados ao contêiner.
        • Shared: porcentagem de recursos de GPU usados pelo contêiner. Por exemplo, se esse parâmetro for definido como 10%, o contêiner usará 10% dos recursos da GPU.

        Para obter detalhes sobre como usar GPUs no cluster, consulte Agendamento de GPU padrão no Kubernetes.

        (Optional) NPU Quota

        Número de chips de Ascend 310 necessários para o contêiner. O valor deve ser um número inteiro e o complemento Suíte de IA do CCE (Ascend NPU) deve ser instalado.

        Para obter detalhes sobre como usar NPUs no cluster, consulte Agendamento de NPU.

        (Optional) Privileged Container

        Programas em um contêiner privilegiado têm certos privilégios.

        Se Privileged Container estiver habilitado, os privilégios serão atribuídos ao contêiner. Por exemplo, contêineres privilegiados podem manipular dispositivos de rede na máquina host e modificar parâmetros do kernel.

        (Optional) Init Container

        Se usar o contêiner como um contêiner init. Um contêiner init não suporta verificação de integridade.

        Um contêiner init é um contêiner especial que é executado antes que outros contêineres de aplicações em um pod sejam iniciados. Cada pod pode conter vários contêineres. Além disso, um pod pode conter um ou mais contêineres init. Os contêineres de aplicações em um pod são iniciados e executados somente após a conclusão da execução de todos os contêineres init. Para obter detalhes, consulte Contêineres init.

      • (Opcional) Lifecycle: configure as operações a serem executadas em uma fase específica do ciclo de vida do contêiner, como Startup Command, Post-Start e Pre-Stop. Para mais detalhes, consulte Definição dos parâmetros do ciclo de vida do contêiner.
      • (Opcional) Environment Variables: configure variáveis para o ambiente em execução do contêiner usando pares chave-valor. Essas variáveis transferem informações externas para contêineres executados em pods e podem ser modificadas de forma flexível após a implementação da aplicação. Para mais detalhes, consulte Configuração de uma variável de ambiente.
      • (Opcional) Data Storage: monte armazenamento local ou armazenamento em nuvem no contêiner. Os cenários de aplicações e os modos de montagem variam de acordo com o tipo de armazenamento. Para mais detalhes, consulte Armazenamento.

        Se a carga de trabalho contiver mais de um pod, os volumes do EVS não poderão ser montados.

      • (Opcional) Logging: relate os logs de saída de contêiner padrão para o AOM por padrão, sem a necessidade de configurações manuais. Você pode configurar manualmente o caminho da coleção de logs. Para mais detalhes, consulte Uso do ICAgent para coletar logs de contêiner.

        Para desativar a saída padrão da carga de trabalho atual, adicione a anotação kubernetes.AOM.log.stdout: [] em Rótulos e anotações. Para obter detalhes sobre como usar essa anotação, consulte Tabela 1.

    • Image Access Credential: selecione a credencial usada para acessar o repositório de imagens. O valor padrão é default-secret. Você pode usar default-secret para acessar imagens no SWR. Para obter detalhes sobre default-secret, consulte default-secret.
    • (Opcional) GPU: All é selecionado por padrão. A instância da carga de trabalho será agendada para o nó do tipo de GPU especificado.
    (Opcional) Advanced Settings
    • Labels and Annotations: adicione rótulos ou anotações para pods usando pares chave-valor. Depois de inserir a chave e o valor, clique em Confirm. Para obter detalhes sobre como usar e configurar rótulos e anotações, consulte Rótulos e anotações.
    • Job Settings
      • Parallel Pods: número máximo de pods que podem ser executados em paralelo durante a execução da tarefa. O valor não pode ser maior que o número total de pods na tarefa.
      • Timeout (s): uma vez que uma tarefa atinge este tempo, o status da tarefa torna-se com falha e todos os pods nesta tarefa serão excluídos. Se você deixar esse parâmetro em branco, a tarefa nunca expirará.
      • Modo de conclusão
        • Non-indexed: uma tarefa é considerada concluída quando todos os pods são executados com sucesso. Cada complementação de vagem é homóloga uma à outra.
        • Indexed: cada pod recebe um índice de conclusão associado de 0 para o número de pods menos 1. A tarefa é considerada concluída quando cada pod alocado com um índice é executado com êxito. Para uma tarefa indexada, os pods são nomeados no formato $(job-name)-$(index).
      • Suspend Job: por padrão, uma tarefa é executada imediatamente após ser criada. A execução da tarefa será suspensa se você ativar essa opção e retomada após desativá-la.
    • Network configuration:

  4. Clique em Create Workload no canto inferior direito.

Usar o kubectl

Uma tarefa tem os seguintes parâmetros de configuração:

  • spec.template: tem o mesmo esquema que um pod.
  • RestartPolicy: só pode ser definido como Never ou OnFailure.
  • Para uma tarefa de pod único, a tarefa termina depois que o pod é executado com êxito por padrão.
  • .spec.completions: indica o número de pods que precisam ser executados com êxito para finalizar uma tarefa. O valor padrão é 1.
  • .spec.parallelism: indica o número de pods que são executados simultaneamente. O valor padrão é 1.
  • spec.backoffLimit: indica o número máximo de tentativas realizadas se um pod falhar. Quando o limite for atingido, o pod não tentará novamente.
  • .spec.activeDeadlineSeconds: indica o tempo de execução dos pods. Uma vez que o tempo é alcançado, todos os pods do trabalho são encerrados. A prioridade de .spec.activeDeadlineSeconds é maior que a de .spec.backoffLimit. Ou seja, se uma tarefa atingir o .spec.activeDeadlineSeconds, o spec.backoffLimit será ignorado.

Com base nas configurações .spec.completions e .spec.Parallelism, as tarefas são classificadas nos seguintes tipos.

Tabela 1 Tipo da tarefa

Tipo da tarefa

Descrição

Exemplo

Tarefas únicas

Um único pod é executado uma vez até o encerramento bem-sucedido.

Migração de banco de dados

Tarefas com uma contagem de conclusão fixa

Um pod é executado até atingir a contagem de completions especificada.

Pod de processamento de fila de tarefa

Tarefas paralelas com uma contagem de conclusão fixa

Vários pods são executados até atingir a contagem de completions especificada.

Vários pods para processamento simultâneo de filas de tarefa

Tarefas paralelas

Um ou mais pods são executados até a rescisão bem-sucedida.

Vários pods para processamento simultâneo de filas de tarefa

O seguinte é um exemplo de tarefa, que calcula o número até o 2000o dígito e imprime a saída.

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  completions: 50        # 50 pods need to be run to finish a job. In this example, π is printed for 50 times.
  parallelism: 5        # 5 pods are run in parallel.
  backoffLimit: 5        # The maximum number of retry times is 5.
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
      imagePullSecrets:
        - name: default-secret

Descrição

  • apiVersion: batch/v1 indica a versão da tarefa atual.
  • kind: Job indica que o recurso atual é uma tarefa.
  • restartPolicy: Never indica a política de reinicialização atual. Para tarefas, esse parâmetro só pode ser definido como Never ou OnFailure. Para outros controladores (por exemplo, Implementações), você pode ajustar este parâmetro a Always.

Execute a tarefa.

  1. Comece a tarefa.

    [root@k8s-master k8s]# kubectl apply -f myjob.yaml
    job.batch/myjob created

  2. Visualize os detalhes da tarefa.

    kubectl get job

    [root@k8s-master k8s]# kubectl get job
    NAME    COMPLETIONS   DURATION   AGE
    myjob   50/50         23s        3m45s

    Se o valor de COMPLETIONS for 50/50, a tarefa será executada com êxito.

  3. Consulte o status do pod.

    kubectl get pod

    [root@k8s-master k8s]# kubectl get pod
    NAME          READY   STATUS      RESTARTS   AGE
    myjob-29qlw   0/1     Completed   0          4m5s
    ...

    Se o status for Completed, a tarefa será concluída.

  4. Veja os logs do pod.

    kubectl logs

    # kubectl logs myjob-29qlw
    3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901

Operações relacionadas

Depois que uma tarefa única é criada, você pode executar as operações listadas em Tabela 2.

Tabela 2 Outras operações

Operação

Descrição

Editar um arquivo YAML

Clique em More > Edit YAML ao lado do nome da tarefa para editar o arquivo YAML correspondente à tarefa atual.

Excluir uma tarefa

  1. Selecione uma tarefa a ser excluída e clique em Delete na coluna Operation.
  2. Clique em Yes.

    Tarefas excluídas não podem ser recuperadas. Tenha cuidado ao excluir uma tarefa.