Atualize o CoreDNS manualmente quando a opção Upgrade não estiver disponível na página Add-ons do console ACK.
Pré-requisitos
Você precisa de:
Observações sobre a atualização
-
Se o kube-proxy usar o modo IP Virtual Server (IPVS), as consultas DNS poderão falhar ou atingir o tempo limite por cerca de 5 minutos após a atualização do CoreDNS. Evite esse problema com um dos métodos a seguir:
Modifique o tempo limite de sessão UDP do IPVS na configuração do kube-proxy. Consulte Configure the UDP timeout for an IPVS cluster.
Use NodeLocal DNSCache para otimizar a resolução de DNS.
A atualização leva aproximadamente 2 minutos, dependendo do número de réplicas do CoreDNS. As réplicas existentes não são encerradas; portanto, a resolução de services não é afetada.
Visualizar a versão do CoreDNS
Console
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Deployments, defina o Namespace como kube-system e verifique a versão do CoreDNS na coluna Image.

kubectl
Consulte a versão do CoreDNS:
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"
Saída esperada:
registry-vpc.cn-hangzhou.aliyuncs.com/acs/coredns:1.6.2 # Version 1.6.2 is used in this example.
Confirmar a versão de atualização
A tabela a seguir lista as versões do CoreDNS compatíveis com cada versão do Kubernetes. Utilize sempre a versão compatível mais recente.
Faixa de versão do Kubernetes | Versão(ões) do CoreDNS |
1.11 a 1,16 | 1.6.2 (descontinuada) |
1.14.8 a 1.22 | 1.6.7 (descontinuada) e 1.7.0 |
1.20.4 e posteriores | 1.8.4 e 1.9.3 Importante As versões v1.8.4 e v1.9.3 possuem múltiplas subversões, como |
1.21 e posteriores | 1.11.3 |
Atualizar manualmente
Console
-
(Opcional) Substitua o campo
proxypelo campoforward.O plugin Proxy foi descontinuado no CoreDNS v1.6.2. Caso esteja atualizando de uma versão anterior, modifique a configuração do CoreDNS conforme descrito abaixo.
-
Altere a versão da imagem do CoreDNS.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Deployments, defina o Namespace como kube-system. Encontre o coredns e escolha na coluna Actions.
-
Na caixa de diálogo Edit YAML, altere o número da versão no campo
imagee clique em Update.
Na caixa de diálogo de edição YAML, localize a configuração do Deployment do CoreDNS e confirme a versão da imagem no campo
image(por exemplo,1.6.2). Trecho principal do YAML:labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: kubernetes.io/hostname weight: 100 containers: - args: - '-conf' - /etc/coredns/Corefile image: 'registry-vpc.cn-hangzhou.aliyuncs.com/acs/coredns:1.6.2' imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 5 httpGet: ...
-
Verifique a atualização.
-
Consulte a versão do CoreDNS:
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"Saída esperada:
registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun -
Verifique se todos os pods do CoreDNS estão no estado Running:
kubectl get pods -n kube-system | grep corednsSaída esperada:
coredns-78d4b8****-6g62w 1/1 Running 0 9d coredns-78d4b8****-n6wjm 1/1 Running 0 9d
-
kubectl
-
(Opcional) Substitua o campo
proxypelo campoforward.O plugin Proxy foi descontinuado no CoreDNS v1.6.2. Caso esteja atualizando de uma versão anterior, modifique a configuração do CoreDNS conforme descrito abaixo.
-
Altere o número da versão no campo
imagedo Deployment do CoreDNS, salve e saia:kubectl edit deployment/coredns -n kube-system -
Verifique a atualização.
-
Consulte a versão do CoreDNS:
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"Saída esperada:
registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun -
Verifique se todos os pods do CoreDNS estão no estado Running:
kubectl get pods -n kube-system | grep corednsSaída esperada:
coredns-78d4b8****-6g62w 1/1 Running 0 9d coredns-78d4b8****-n6wjm 1/1 Running 0 9d
-
Configurar o tempo limite UDP para um cluster IPVS
Se o seu cluster utilizar kube-proxy no modo IPVS, reduza o tempo limite 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 services baseados em UDP, avalie o impacto da redução do tempo limite UDP antes de prosseguir.
Kubernetes 1.18 ou posterior
Pelo console
Faça login no console 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, encontre kube-proxy-worker e clique em Edit YAML na coluna Actions.
-
No painel Edit YAML, adicione
udpTimeout: 10ssob o 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 tempo limite 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 tempo limite UDP está configurado corretamente.Important: Após configurar o tempo limite, 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: 10ssob o 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 tempo limite 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 tempo limite UDP está configurado corretamente.Important: Após configurar o tempo limite, 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 Batch operation instances para executar operações em lote no OOS.
Próximos passos
Após a atualização, optimize CoreDNS configurations para sua carga de trabalho.
