Os clusters de workflow baseiam-se no Argo Workflows open-source e oferecem suporte a pipelines de CI/CD, processamento de dados, machine learning e cálculos de simulação. Este tópico mostra como instale a Alibaba Cloud Argo CLI, crie e envie um workflow hello-world, verifique seu status e configure recursos de CPU e memória.
Pré-requisitos
Antes de começar, verifique se você tem:
Instale a Alibaba Cloud Argo CLI
A Alibaba Cloud Argo CLI é totalmente compatível com a Argo CLI open-source e adiciona métricas aprimoradas e recursos de log. Use-a para:
Consultar o uso de CPU, o uso de memória e o custo operacional de um workflow.
Recuperar logs de pods já excluídos.
Baixe o binário para o seu sistema operacional:
Darwin: argo-cli-aliyun-darwin
Linux: argo-cli-aliyun-linux
Os exemplos a seguir usam Linux.
-
Baixe o binário.
wget https://ack-one.oss-cn-hangzhou.aliyuncs.com/cli/v3.4.12/argo-cli-aliyun-linux -
Torne-o executável.
chmod +x argo-cli-aliyun-linux -
Mova-o para um diretório em seu PATH.
mv argo-cli-aliyun-linux /usr/local/bin/argo -
Verifique a instalação.
argo version
Contas de serviço de workflow
Workflows podem referenciar contas de serviço para acessar outros recursos do Kubernetes. O cluster de workflow concede automaticamente as permissões necessárias às contas de serviço criadas por você. Se uma conta de serviço tiver permissões insuficientes, entre no grupo 35688562 do DingTalk para solicitar suporte técnico.
Crie um workflow
Usar a Alibaba Cloud Argo CLI
Referência rápida — comandos comuns da Argo CLI
|
Operação |
Comando |
|
Envie um workflow |
|
|
Listar todos os workflows |
|
|
Obter o status de um workflow |
|
-
Crie o arquivo
helloworld-workflow.yamlcom o seguinte conteúdo.apiVersion: argoproj.io/v1alpha1 kind: Workflow # new type of k8s spec metadata: generateName: hello-world- # name prefix for the workflow instance spec: entrypoint: whalesay # first template to run templates: - name: whalesay # name of the template container: image: docker/whalesay command: [cowsay] args: ["hello world"]Campos principais:
Campo
Descrição
kind: WorkflowDeclara um novo tipo de recurso do Kubernetes gerenciado pelo Argo.
generateNameO Kubernetes gera um nome exclusivo para cada execução ao anexar um sufixo aleatório a este prefixo.
spec.entrypointModelo executado primeiro pelo Argo quando o workflow inicia.
spec.templatesDefina o conjunto de modelos disponíveis para o workflow. Cada modelo descreve uma unidade de trabalho.
-
Envie o workflow.
argo submit helloworld-workflow.yaml -
Liste todos os workflows para confirme o envio.
argo listSaída esperada:
NAME STATUS AGE DURATION PRIORITY hello-world-lgdpp Succeeded 2m 37s 0 -
Obtenha o status detalhado do workflow.
argo get hello-world-lgdppSaída esperada:
Name: hello-world-lgdpp Namespace: default ServiceAccount: unset (will run with the default ServiceAccount) Status: Succeeded Conditions: PodRunning False Completed True .... Duration: 37 seconds Progress: 1/1 ResourcesDuration: 17s*(1 cpu),17s*(100Mi memory) STEP TEMPLATE PODNAME DURATION MESSAGE ✔ hello-world-lgdpp whalesay hello-world-lgdpp 27sO campo
ResourcesDurationexibe a CPU e a memória consumidas pelo workflow. Use essa informação para monitorar custos.
Usar kubectl
Após configure o arquivo kubeconfig, use o kubectl para gerencie clusters de workflow. Algumas operações têm restrições em comparação aos clusters Kubernetes padrão. A tabela a seguir descreve as permissões disponíveis para cada tipo de recurso.
| Recurso | Permissões |
|---|---|
priorityclasses | Gerencie PriorityClasses e personalize a prioridade de agendamento de pods. |
namespaces | Crie namespaces e tenha permissões totais sobre todos os recursos em namespaces autogerenciados. O acesso a namespaces de sistema (nomes iniciados com kube-) é bloqueado. Importante O namespace com o nome igual ao ID do cluster é o namespace de sistema do Argo — você pode gerenciá-lo. Por exemplo, modifique as configurações de workflow do Argo em |
persistentvolumes | Permissões totais. |
persistentvolumeclaims | Permissões totais sobre recursos em namespaces autogerenciados. |
secrets, configmaps, serviceaccounts | Permissões totais sobre recursos em namespaces autogerenciados. |
pods | Permissões de leitura sobre recursos em namespaces autogerenciados. |
pods/log, events | Permissões de leitura sobre recursos em namespaces autogerenciados. |
pods/exec | Permissões de criação sobre recursos em namespaces autogerenciados. |
Argo: workflows, workflowtasksets, workflowtemplates, cronworkflows | Permissões totais sobre recursos em namespaces autogerenciados. |
Configure solicitações de CPU e memória
Por padrão, os clusters de workflow usam instâncias de container elásticas preemptíveis. Instâncias com pagamento conforme o uso também estão disponíveis para otimização de custos. O período de proteção das instâncias preemptíveis é de 1 hora. Cada etapa do workflow deve ser concluída dentro dessa janela.
Instâncias de container elásticas preemptíveis exigem no mínimo 2 vCPUs:
Se um container não tiver solicitações de recursos ou solicitar menos de 2 vCPUs/4 GiB, o sistema usará o padrão de 2 vCPUs/4 GiB.
Se as solicitações excederem 2 vCPUs/4 GiB, o sistema selecionará automaticamente uma instância que atenda a essas especificações.
Combinações suportadas de CPU e memória (recomendamos manter as solicitações de CPU em até 8 vCPUs):
|
vCPU |
Memória (GiB) |
|
2 |
4, 8 e 16 |
|
4 |
4, 8, 16 e 32 |
|
8 |
4, 8, 16, 32 e 64 |
Forçar uma instância com pagamento conforme o uso
Para evitar o uso de instâncias de container elásticas preemptíveis na execução de tarefas críticas no modo de priorização de custos, force o uso de uma instância de container elástica com pagamento conforme o uso para execute o workflow.
Configure os parâmetros requests e limits na especificação do container, conforme o exemplo a seguir:
apiVersion: argoproj.io/v1alpha1
kind: Workflow # new type of k8s spec
metadata:
generateName: hello-world- # name prefix for the workflow instance
spec:
entrypoint: whalesay # first template to run
templates:
- name: whalesay # name of the template
container:
image: docker/whalesay
command: [cowsay]
args: ["hello world"]
resources:
requests:
cpu: 0.5
memory: 1Gi
limits:
cpu: 0.5
memory: 1Gi