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 cronometrada

Cenário

Uma tarefa cronometrada é executada em um cronograma repetido. Você pode executar a sincronização de tempo para todos os nós ativos em um ponto de tempo fixo.

Uma tarefa cronometrada é executada periodicamente no horário especificado. É semelhante com o crontab do Linux. Uma tarefa cronometrada tem as seguintes características:
  • É executada apenas uma vez no horário especificado.
  • É executada periodicamente no horário especificado.

O uso típico de uma tarefa cronometrada é o seguinte:

  • Agenda as tarefas cronometradas no horário especificado.
  • Cria tarefas para serem executadas periodicamente, por exemplo, backup de banco de dados e envio de e-mail.

Pré-requisitos

Os recursos foram criados. Para mais detalhes, consulte Criação de um nó.

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 Cron 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.
    • 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.
    • 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.

    Schedule

    • Concurrency Policy: os seguintes três modos são suportados:
      • Forbid: uma nova tarefa não pode ser criada antes que a tarefa anterior seja concluída.
      • Allow: a tarefa cronometrada permite tarefas em execução simultânea, que antecipa recursos de cluster.
      • Replace: uma nova tarefa substitui a tarefa anterior quando é hora de criar uma tarefa, mas a tarefa anterior não é concluída.
    • Policy Settings: especifica quando uma nova tarefa cronometrada é executada. As configurações de política no YAML são implementadas usando expressões cron.
      • Uma tarefa cronometrada é executada em um intervalo fixo. A unidade pode ser minuto, hora, dia ou mês. Por exemplo, se uma tarefa cronometrada é executada a cada 30 minutos e a expressão cron correspondente é */30 * * * *, o tempo de execução começa a partir de 0 no intervalo de unidades, por exemplo, 00:00:00, 00:30:00, 01:00:00 e ....
      • A tarefa cronometrada é executada em um horário fixo (por mês). Por exemplo, se uma tarefa cronometrada é executada às 00:00 no primeiro dia de cada mês, a expressão cron é 0 0 1 */1 *, e o tempo de execução é ****-01-01 00:00:00, ****-02-01 00:00:00 e ....
      • A tarefa cronometrada é executada por semana. Por exemplo, se uma tarefa cronometrada é executada às 00:00 todas as segundas-feiras, a expressão cron é 0 0 * * 1, e o tempo de execução é ****-**-01 00:00:00 on Monday, ****-**-08 00:00:00 on Monday e ....
      • Custom Cron Expression: para obter detalhes sobre como usar expressões cron, consulte CronJob.
      • Se uma tarefa cronometrada for executada em um horário fixo (por mês) e o número de dias em um mês não existir, a tarefa cronometrada não será executada neste mês. Por exemplo, a execução saltará fevereiro se a data estiver definida como 30.
      • Devido à definição de cron, o período fixo não é um período rigoroso. O intervalo de unidades de tempo é dividido de 0 por período. Por exemplo, se a unidade é minuto, o valor varia de 0 a 59. Se o valor não puder ser dividido exatamente, o último período será redefinido. Portanto, um período preciso pode ser representado somente quando o período pode ser dividido igualmente.

        Tome como exemplo uma tarefa cronometrada que é executada por hora. Como /2, /3, /4, /6, /8 e /12 podem dividir exatamente 24 horas, um período preciso pode ser representado. Se outro período for usado, o último período será reiniciado no início de um novo dia. Por exemplo, se a expressão cron é * */12 * * *, o tempo de execução é 00:00:00 e 12:00:00 todos os dias. Se a expressão cron é * */13 * * *, o tempo de execução é 00:00:00 e 13:00:00 todos os dias. Às 00:00 do dia seguinte, o tempo de execução é atualizado mesmo que o período não atinja 13 horas.

    • Job Records: você pode definir o número de tarefas que são executadas com êxito ou que não são executadas. Definir um limite para 0 corresponde a manter nenhum dos trabalhos depois de concluídos.
    (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.

  4. Clique em Create Workload no canto inferior direito.

Usar o kubectl

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

  • .spec.schedule: leva uma cadeia no formato Cron, por exemplo, 0 * * * * ou @hourly, como horário de programação das tarefas a serem criadas e executadas.
  • .spec.jobTemplate: especifica as tarefas a serem executadas e tem o mesmo esquema de quando você está em Criação de uma tarefa usando kubectl.
  • .spec.startingDeadlineSeconds: especifica o prazo para iniciar uma tarefa.
  • .spec.concurrencyPolicy: especifica como tratar execuções simultâneas de uma tarefa criada pela tarefa cronometrada. As seguintes opções são compatíveis:
    • Allow (valor padrão): permite tarefas em execução simultânea.
    • Forbid: proíbe corridas simultâneas, pulando a próxima execução se a anterior ainda não tiver terminado.
    • Replace: cancela a tarefa em execução no momento e a substitui por uma nova.

Segue-se um exemplo de tarefa cronometrada, que é guardado no ficheiro cronjob.yaml.

Em clusters v1.21 ou posterior, CronJob apiVersion é batch/v1.

Em clusters anteriores à v1.21, CronJob apiVersion é batch/v1beta1.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
          imagePullSecrets:
            - name: default-secret

Execute a tarefa.

  1. Crie uma tarefa cronometrada.

    kubectl create -f cronjob.yaml

    Informação semelhante à seguinte é exibida:

    cronjob.batch/hello created

  2. Consulte o status de execução da tarefa cronometrada:

    kubectl get cronjob

    NAME      SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
    hello     */1 * * * *   False     0         <none>          9s

    kubectl get jobs

    NAME               COMPLETIONS   DURATION   AGE
    hello-1597387980   1/1           27s        45s

    kubectl get pod

    NAME                           READY     STATUS      RESTARTS   AGE
    hello-1597387980-tjv8f         0/1       Completed   0          114s
    hello-1597388040-lckg9         0/1       Completed   0          39s

    kubectl logs hello-1597387980-tjv8f

    Fri Aug 14 06:56:31 UTC 2020
    Hello from the Kubernetes cluster

    kubectl delete cronjob hello

    cronjob.batch "hello" deleted

    Quando uma CronJob é excluída, as tarefas e pods relacionados são excluídos de acordo.

Operações relacionadas

Depois que uma CronJob é criada, você pode executar as operações listadas em Tabela 1.

Tabela 1 Outras operações

Operação

Descrição

Editar um arquivo YAML

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

Parar uma CronJob

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

Excluir uma CronJob

  1. Selecione a CronJob a ser excluída e clique em More > Delete na coluna Operation.
  2. Clique em Yes.

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