[Cloud Native] O uso de DaemonSet e Job no controlador Kubernetes

 

 

Índice

DaemonSet

1 O que é DaemonSet

2 Usando o DaemonSet

Trabalho

1 O que é Trabalho

2 usando Trabalho

3 trabalhos que são limpos automaticamente

O controlador não pode resolver o problema


DaemonSet

1 O que é DaemonSet

DaemonSet | Kubernetes

DaemonSet garante que todos (ou alguns) nós executem uma cópia de um pod. Quando os nós ingressarem no cluster, um pod será adicionado para eles. Esses pods também são reciclados quando um nó é removido do cluster. A exclusão de um DaemonSet excluirá todos os pods criados por ele.

Alguns usos típicos do DaemonSet:

  • Execute daemons de cluster em cada nó

  • Execute um daemon de coleta de log em cada nó

  • Execute um daemon de monitoramento em cada nó

Um uso simples é iniciar um DaemonSet em todos os nós para cada tipo de daemon. Um uso um pouco mais complexo é implantar vários DaemonSets para o mesmo tipo de daemon; cada um com sinalizadores diferentes e memória diferente, requisitos de CPU para diferentes tipos de hardware.

2 Usando o DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.19
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
      restartPolicy: Always

Trabalho

1 O que é Trabalho

Trabalho | Kubernetes

Um Job cria um ou mais Pods e continuará a repetir a execução de Pods até que o número especificado de Pods termine com sucesso. À medida que os pods são concluídos com êxito, o trabalho registra quantos pods foram concluídos com êxito. Quando o número atinge o limite de sucesso especificado, a tarefa (ou seja, trabalho) termina. A exclusão de um trabalho limpará todos os pods criados. A operação de suspensão do Job excluirá todos os pods ativos do Job até que o Job seja retomado novamente.

Em um caso de uso simples, você criaria um objeto Job para executar um pod até a conclusão de maneira confiável. O objeto Job inicia um novo Pod quando o primeiro Pod falha ou é excluído (por exemplo, devido a uma falha ou reinicialização do hardware do nó).

Você também pode usar Jobs para executar vários pods em paralelo.

2 usando Trabalho

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  # 当前任务出现失败 最大的重试次数
  backoffLimit: 4

3 trabalhos que são limpos automaticamente

Os trabalhos concluídos geralmente não precisam ser mantidos no sistema. Mantê-los no sistema o tempo todo coloca pressão extra no servidor da API. Se o trabalho for gerenciado por algum controlador de nível superior, como CronJob , o trabalho poderá ser limpo pelo CronJob com base em uma política de limpeza baseada em capacidade específica.

  • O mecanismo TTL do trabalho concluído

    • Outra maneira de limpar automaticamente os trabalhos concluídos (status Completeou Failed) é usar o mecanismo TTL fornecido pelo controlador TTL. Ao definir o .spec.ttlSecondsAfterFinishedcampo Job, o controlador pode limpar os recursos concluídos. Quando o controlador TTL limpar o Trabalho, ele excluirá o objeto Trabalho em cascata. Em outras palavras, ele exclui todos os objetos dependentes, incluindo os próprios Pods e Jobs. Observe que, quando um Job é excluído, o sistema leva em consideração suas garantias de ciclo de vida, como seus Finalizadores.

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-ttl
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

Um trabalho pi-with-ttlpode ser excluído automaticamente 100 segundos após seu término. Se este campo for definido como 0, o Trabalho se tornará automaticamente deletável imediatamente após sua conclusão. Se este campo não for definido, o trabalho não será automaticamente limpo pelo controlador TTL após a conclusão.

O controlador não pode resolver o problema

  • Como fornecer serviços de rede para pods

  • Como obter balanceamento de carga entre vários pods

Acho que você gosta

Origin blog.csdn.net/weixin_53678904/article/details/132233724
Recomendado
Clasificación