Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Automatically upgrade unmanaged CoreDNS

Última atualização: Jun 27, 2026

Verifique os pré-requisitos de atualização, mitigue riscos conhecidos e execute uma atualização automática do CoreDNS no ACK.

Pré-requisitos

Você precisa de:

Antes da atualização

Analise as condições e os riscos a seguir antes de iniciar a atualização.

Como funciona

O ACK atualiza o CoreDNS por meio de uma atualização contínua. Novos Pods são iniciados antes que os Pods legados sejam excluídos, mantendo a contagem de réplicas constante. As réplicas legadas são encerradas de forma controlada, em vez de pararem imediatamente. O processo leva cerca de 2 minutos, dependendo da quantidade de réplicas do CoreDNS. Se a atualização falhar, o ACK reverte automaticamente em até 10 minutos.

Durante a atualização contínua, os Pods legados ainda podem processar solicitações de DNS enquanto os novos Pods são iniciados. Para proteger a disponibilidade do DNS, use o componente NodeLocal DNSCache .

Faça backup das configurações personalizadas

Atualizações automáticas substituem personalizações do modelo YAML, incluindo tolerâncias, solicitações e limites de CPU e memória. Faça backup da configuração do Deployment do CoreDNS antes de atualizar:

kubectl get deployment coredns -n kube-system -o yaml > coredns-backup.yaml

Após a atualização, reaplique manualmente suas personalizações.

Ative o plugin ready

Caso tenha atualizado manualmente o CoreDNS para uma versão posterior à 1.5.0, verifique se o plugin ready está ativado no Corefile. Sem ele, o CoreDNS falha ao iniciar durante uma atualização automática.

  1. Faça logon no console do ACK e clique em Clusters no painel de navegação à esquerda.

  2. Na página Clusters, clique no nome do cluster. Escolha Configurations > ConfigMaps no painel de navegação à esquerda.

  3. Na página ConfigMaps, defina Namespace como kube-system, localize coredns e clique em Edit YAML na coluna Actions.

  4. No painel Edit YAML, verifique a presença do campo ready. Se estiver ausente, adicione ready e clique em OK. Alinhe a indentação com o bloco kubernetes.

    apiVersion: v1
    data:
     Corefile: |
      .:53 {
        errors
        health {
          lameduck 15s
        }
        ready # If this line does not exist, add it. Make sure the indent is consistent with kubernetes.
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods verified
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf {
          max_concurrent 1000
        }
        cache 30
        loop
        log
        reload
        loadbalance
      }
  5. Verifique se a nova configuração foi carregada. Procure por plugin/reload na saída, o que confirma o recarregamento dinâmico (leva cerca de 30 segundos):

    kubectl logs coredns-78d4b8bd88-n6wjm -n kube-system

Mitigue falhas de DNS relacionadas ao IPVS

Se o seu cluster utiliza kube-proxy no modo IPVS, a persistência de sessão do IPVS pode causar timeouts ou falhas de DNS em todo o cluster por até cinco minutos após a atualização. Utilize uma das opções a seguir:

Consulte Visualize informações do cluster para verificar se o seu cluster utiliza o modo IPVS.

Atualize o CoreDNS

  1. Faça logon no console do ACK e clique em Clusters no painel de navegação à esquerda.

  2. Na página Clusters, clique no nome do cluster. Clique em Add-ons no painel de navegação à esquerda.

  3. Na página Add-ons, pesquise por CoreDNS e clique em Upgrade.

Configure o timeout UDP para um cluster IPVS

Se o seu cluster utiliza kube-proxy no modo IPVS, reduza o timeout de persistência de sessão UDP do IPVS para 10 segundos a fim de limitar falhas de DNS pós-atualização.

Caso seu cluster possua serviços baseados em UDP, avalie o impacto da redução do timeout UDP antes de prosseguir.

Kubernetes 1.18 ou superior

Pelo console

  1. Faça logon no console do ACK e clique em Clusters no painel de navegação à esquerda.

  2. Na página Clusters, clique no nome do cluster. Escolha Configurations > ConfigMaps no painel de navegação à esquerda.

  3. Na página ConfigMaps, selecione o namespace kube-system, localize kube-proxy-worker e clique em Edit YAML na coluna Actions.

  4. No painel Edit YAML, adicione udpTimeout: 10s abaixo do campo ipvs e clique em OK.

    apiVersion: v1
    data:
      config.conf: |
        apiVersion: kubeproxy.config.k8s.io/v1alpha1
        kind: KubeProxyConfiguration
        # Other irrelevant fields are omitted.
        mode: ipvs
        # If the ipvs key does not exist, add it.
        ipvs:
          udpTimeout: 10s
  5. Recrie todos os Pods kube-proxy-worker.

    1. Na página de detalhes do cluster, escolha Workloads > DaemonSets no painel de navegação à esquerda.

    2. Na lista de DaemonSets, clique em kube-proxy-worker.

    3. Na página kube-proxy-worker, clique na aba Pods. Para cada Pod, escolha More > Delete e clique em OK. O sistema os recriará automaticamente.

  6. Verifique a configuração do timeout UDP.

    1. Instale o ipvsadm:

      sudo yum install -y ipvsadm
    2. Em qualquer nó ECS do cluster, execute:

      sudo ipvsadm -L --timeout

      Se o terceiro número na saída for 10, o timeout UDP está configurado corretamente.

      Important: Após configurar o timeout, aguarde pelo menos cinco minutos antes de atualizar o CoreDNS.

Pela linha de comando

  1. Edite o ConfigMap kube-proxy-worker:

    kubectl -n kube-system edit configmap kube-proxy-worker
  2. Adicione udpTimeout: 10s abaixo do campo ipvs, salve e saia.

    apiVersion: v1
    data:
      config.conf: |
        apiVersion: kubeproxy.config.k8s.io/v1alpha1
        kind: KubeProxyConfiguration
        # Other irrelevant fields are omitted.
        mode: ipvs
        # If the ipvs key does not exist, add it.
        ipvs:
          udpTimeout: 10s
  3. Recrie todos os Pods kube-proxy-worker.

    1. Liste os Pods kube-proxy-worker:

      kubectl -n kube-system get pod -o wide | grep kube-proxy-worker
    2. Exclua cada Pod. O sistema os recriará automaticamente.

      kubectl -n kube-system delete pod <kube-proxy-worker-****>

      Substitua <kube-proxy-worker-****> pelos nomes dos Pods obtidos na etapa anterior.

  4. Verifique a configuração do timeout UDP.

    1. Instale o ipvsadm:

      sudo yum install -y ipvsadm
    2. Em qualquer nó ECS do cluster, execute:

      sudo ipvsadm -L --timeout

      Se o terceiro número na saída for 10, o timeout UDP está configurado corretamente.

      Important: Após configurar o timeout, aguarde pelo menos cinco minutos antes de atualizar o CoreDNS.

Kubernetes 1.16 ou anterior

O kube-proxy em clusters executando Kubernetes 1.16 ou anterior não suporta o parâmetro udpTimeout. Utilize o Operation Orchestration Service (OOS) para executar estes comandos ipvsadm em lote em todos os nós do cluster:

sudo yum install -y ipvsadm
sudo ipvsadm -L --timeout > /tmp/ipvsadm_timeout_old
sudo ipvsadm --set 900 120 10
sudo ipvsadm -L --timeout > /tmp/ipvsadm_timeout_new
diff /tmp/ipvsadm_timeout_old /tmp/ipvsadm_timeout_new

Consulte Operações em lote em instâncias para executar operações em lote no OOS.

Próximas etapas

Após a atualização, otimize sua configuração do CoreDNS.