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.
Faça logon no console do ACK e clique em Clusters no painel de navegação à esquerda.
Na página Clusters, clique no nome do cluster. Escolha Configurations > ConfigMaps no painel de navegação à esquerda.
Na página ConfigMaps, defina Namespace como kube-system, localize coredns e clique em Edit YAML na coluna Actions.
-
No painel Edit YAML, verifique a presença do campo
ready. Se estiver ausente, adicionereadye clique em OK. Alinhe a indentação com o blocokubernetes.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 } -
Verifique se a nova configuração foi carregada. Procure por
plugin/reloadna 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:
Modifique o timeout de persistência de sessão UDP do IPVS no kube-proxy. Consulte Como modifico o timeout de persistência de sessão UDP do IPVS no kube-proxy?
Utilize o NodeLocal DNSCache. Consulte Melhore a estabilidade com o NodeLocal DNSCache.
Atualize o kernel do nó (apenas Alibaba Cloud Linux 2). Atualize para a versão de kernel 4.19.91-25.1.al7.x86_64 ou superior. Consulte Notas de versão da imagem do Alibaba Cloud Linux 2.
Configure o timeout UDP do IPVS em outros sistemas operacionais. Consulte Configure o timeout UDP para um cluster IPVS abaixo.
Conecte todos os contêineres de aplicação ao NodeLocal DNSCache antes da atualização. Consulte Use o componente NodeLocal DNSCache.
Consulte Visualize informações do cluster para verificar se o seu cluster utiliza o modo IPVS.
Atualize o CoreDNS
Faça logon no console do ACK e clique em Clusters no painel de navegação à esquerda.
Na página Clusters, clique no nome do cluster. Clique em Add-ons no painel de navegação à esquerda.
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
Faça logon no console do ACK e clique em Clusters no painel de navegação à esquerda.
Na página Clusters, clique no nome do cluster. Escolha Configurations > ConfigMaps no painel de navegação à esquerda.
Na página ConfigMaps, selecione o namespace kube-system, localize kube-proxy-worker e clique em Edit YAML na coluna Actions.
-
No painel Edit YAML, adicione
udpTimeout: 10sabaixo do campoipvse 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 -
Recrie todos os Pods kube-proxy-worker.
Na página de detalhes do cluster, escolha Workloads > DaemonSets no painel de navegação à esquerda.
Na lista de DaemonSets, clique em kube-proxy-worker.
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.
-
Verifique a configuração do timeout UDP.
-
Instale o
ipvsadm:sudo yum install -y ipvsadm -
Em qualquer nó ECS do cluster, execute:
sudo ipvsadm -L --timeoutSe 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
-
Edite o ConfigMap kube-proxy-worker:
kubectl -n kube-system edit configmap kube-proxy-worker -
Adicione
udpTimeout: 10sabaixo do campoipvs, 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 -
Recrie todos os Pods kube-proxy-worker.
-
Liste os Pods kube-proxy-worker:
kubectl -n kube-system get pod -o wide | grep kube-proxy-worker -
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.
-
-
Verifique a configuração do timeout UDP.
-
Instale o
ipvsadm:sudo yum install -y ipvsadm -
Em qualquer nó ECS do cluster, execute:
sudo ipvsadm -L --timeoutSe 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.