DaemonSet

Nesta página, descrevemos os objetos DaemonSet do Kubernetes e o uso deles no Google Kubernetes Engine.

O que é um DaemonSet?

Assim como outros objetos de carga de trabalho, os DaemonSets gerenciam grupos de Pods replicados. No entanto, DaemonSets tentam aderir a um modelo de um pod por node, seja em todo o cluster ou em um subconjunto de nodes. À medida que você adiciona nodes a um pool de nodes, o DaemonSets adiciona automaticamente os pods aos novos nodes, conforme necessário.

Os DaemonSets usam um modelo de Pod que contém uma especificação os respectivos pods. A especificação de pod determina como será cada pod: quais aplicativos são executados dentro dos contêineres, quais volumes ele ativa, os marcadores e seletores dele e muito mais.

Padrões de uso

DaemonSets são úteis para implantar tarefas contínuas de segundo plano que você precisa executar em todos ou determinados nodes e que não exigem intervenção do usuário. Exemplos dessas funções incluem daemons de armazenamento como ceph, daemons de coleta de registros como fluentd e daemons de monitoramento de node como collectd.

Por exemplo, você poderia ter DaemonSets para cada tipo de daemon executado em todos os nodes. Como alternativa, você pode executar vários DaemonSets para um único tipo de daemon, mas fazer com que eles usem configurações diferentes para diferentes tipos de hardware e necessidades de recursos.

Como criar DaemonSets

Crie um DaemonSet usando kubectl apply ou kubectl create.

Veja a seguir um exemplo de um arquivo de manifesto de DaemonSet:

apiVersion: v1/beta2 # For Kubernetes version 1.9 and later, use apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
      matchLabels:
        name: fluentd # Label selector that determines which Pods belong to the DaemonSet
  template:
    metadata:
      labels:
        name: fluentd # Pod template's label selector
    spec:
      nodeSelector:
        type: prod # Node label selector that determines on which nodes Pod should be scheduled
                   # In this case, Pods are only scheduled to nodes bearing the label "type: prod"
      containers:
      - name: fluentd
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi

Neste exemplo:

  • Um DaemonSet denominado fluentd é criado, indicado pelo campo metadata: name.
  • O pod de DaemonSet é marcado com fluentd.
  • Um seletor de rótulo de nó (type: prod) declara em quais nós rotulados o DaemonSet programa o pod.
  • O contêiner do pod extrai a imagem de fluentd-elasticsearch na versão 1.20. A imagem do contêiner é hospedada pelo Container Registry.
  • O contêiner solicita 100 m de CPU e 200 Mi de memória, limitando-se a um total de 200 Mi de uso de memória.

Em suma, a especificação do pod contém as seguintes instruções:

  • Marcar o pod como fluentd.
  • Usar o seletor de rótulo de nó type: prod para programar o pod para nós correspondentes e não programar em nós que não tenham o seletor de rótulo. Outra opção é omitir o campo nodeSelector para programar em todos os nós.
  • Execute fluentd-elasticsearch na versão 1.20.
  • Solicite alguns recursos de memória e CPU.

Para mais informações sobre configurações de DaemonSet, consulte a referência da DaemonSet API.

Como atualizar DaemonSets

Você pode atualizar DaemonSets alterando a respectiva especificação de pod, solicitações e limites de recursos, marcadores e anotações.

Para decidir como gerenciar atualizações, o DaemonSet usa uma estratégia de atualização definida em spec: updateStrategy. Há duas estratégias, OnDelete e RollingUpdate:

  • O OnDelete não exclui e recria automaticamente os pods do DaemonSet quando a configuração do objeto é alterada. Em vez disso, é preciso excluir manualmente os pods para que o controlador crie novos pods que reflitam as alterações.
  • O RollingUpdate exclui e recria automaticamente os pods do DaemonSet. Com essa estratégia, as alterações válidas acionam automaticamente uma implementação. Essa é a estratégia de atualização padrão para DaemonSets.

As implementações de atualização podem ser monitoradas executando-se o seguinte comando:

kubectl rollout status ds [DAEMONSET_NAME]

Para mais informações sobre a atualização de DaemonSets, consulte Executar uma atualização contínua em um DaemonSet na documentação do Kubernetes.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine