Trabalhando com o complemento CoreDNS do Amazon EKS
O CoreDNS é um servidor DNS flexível e extensível que pode servir como DNS de cluster do Kubernetes. Quando você executa um cluster do Amazon EKS com pelo menos um nó, duas réplicas da imagem do CoreDNS são implantadas por padrão, independentemente do número de nós implantados em seu cluster. Os CoreDNS Pods fornecem resolução de nomes para todos os Pods no cluster. Os Pods do CoreDNS poderão ser implantados em nós do Fargate se o seu cluster incluir Perfil do AWS Fargate com um namespace correspondente ao namespace para a deployment
do CoreDNS. Para obter mais informações sobre o CoreDNS, consulte Uso do CoreDNS para descoberta de serviço
A tabela a seguir lista a versão mais recente do tipo de complemento do Amazon EKS para cada versão do Kubernetes.
Versão do Kubernetes | 1.29 |
1.28 |
1.27 |
1.26 |
1.25 |
1.24 |
1.23 |
---|---|---|---|---|---|---|---|
v1.11.1-eksbuild.6 |
v1.10.1-eksbuild.7 |
v1.10.1-eksbuild.7 |
v1.9.3-eksbuild.11 |
v1.9.3-eksbuild.11 |
v1.9.3-eksbuild.11 |
v1.8.7-eksbuild.10 |
Importante
Se você estiver gerenciando esse complemento automaticamente, as versões na tabela podem não ser as mesmas que as versões autogerenciadas disponíveis. Para obter mais informações sobre como atualizar o tipo autogerenciado desse complemento, consulte Atualização do complemento autogerenciado.
Considerações importantes sobre o upgrade do CoreDNS
-
Para melhorar a estabilidade e a disponibilidade do CoreDNS Deployment, as versões
v1.9.3-eksbuild.5
e posteriores e ov1.10.1-eksbuild.2
são implantados com umPodDisruptionBudget
. Se você implantou umPodDisruptionBudget
existente, sua atualização para essas versões pode falhar. Se a atualização falhar, concluir uma das seguintes tarefas deve resolver o problema:-
Ao fazer a atualização do complemento do Amazon EKS, opte por substituir as configurações existentes como sua opção de resolução de conflitos. Se você fez outras configurações personalizadas no Deployment, certifique-se de fazer backup de suas configurações antes de atualizar para poder reaplicar as demais configurações personalizadas após a atualização.
-
Remova o
PodDisruptionBudget
existente e tente fazer a atualização novamente.
-
-
Nas versões complementares do EKS
v1.9.3-eksbuild.3
e posterioresv1.10.1-eksbuild.6
e posteriores, ele CoreDNS Deployment define oreadinessProbe
para usar o/ready
endpoint. Esse endpoint está habilitado noCorefile
arquivo de configuração do CoreDNS.Se você usar um personalizado
Corefile
, deverá adicionar oready
plug-in à configuração, para que o/ready
endpoint fique ativo CoreDNS para o teste ser usado. -
Nas versões complementares do EKS
v1.9.3-eksbuild.7
e posteriores ev1.10.1-eksbuild.4
e posteriores, você pode alterar oPodDisruptionBudget
. Você pode editar o complemento e alterar essas configurações nas configurações opcionais usando os campos no exemplo a seguir. Este exemplo mostra o padrãoPodDisruptionBudget
.{ "podDisruptionBudget": { "enabled": true, "maxUnavailable": 1 } }
Você pode definir
maxUnavailable
ouminAvailable
, mas não pode definir os dois em um únicoPodDisruptionBudget
. Para obter mais informações sobrePodDisruptionBudgets
, consulte ReplicaSetPodDisruptionBudget
na Kubernetes documentação. Observe que se você definir
enabled
comofalse
, oPodDisruptionBudget
não será removido. Depois de definir esse campo comofalse
, você deve excluir oPodDisruptionBudget
objeto. Da mesma forma, se você editar o complemento para usar uma versão mais antiga do complemento (rebaixar o complemento) depois de atualizar para uma versão com umPodDisruptionBudget
, o não será removidoPodDisruptionBudget
. Para excluir oPodDisruptionBudget
, você pode executar o comando a seguir:kubectl delete poddisruptionbudget coredns -n kube-system
-
No complemento do EKS versão
v1.10.1-eksbuild.5
e posteriores, altere a tolerância padrão denode-role.kubernetes.io/master:NoSchedule
paranode-role.kubernetes.io/control-plane:NoSchedule
para manter a conformidade com o KEP 2067. Para obter mais informações sobre o KEP 2067, consulte KEP-2067: renomear o rótulo "master" e taint kubeadmnas Propostas de aprimoramento do Kubernetes (KEPs) no GitHub. No complemento do EKS versão
v1.8.7-eksbuild.8
e posteriores ev1.9.3-eksbuild.9
e posteriores, ambas as tolerâncias são configuradas para serem compatíveis com todas as versões do Kubernetes. -
No complemento do EKS versão
v1.9.3-eksbuild.11
ev1.10.1-eksbuild.7
e posteriores, o CoreDNS Deployment define um valor padrão paratopologySpreadConstraints
. O valor padrão garante que os Pods do CoreDNS estejam espalhados pelas zonas de disponibilidade se houver nós em várias zonas de disponibilidade disponíveis. Você pode definir um valor personalizado que será usado em vez do valor padrão. O valor padrão é:topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: k8s-app: kube-dns
Considerações sobre upgrade do CoreDNS v1.11
-
No complemento do EKS versão
v1.11.1-eksbuild.4
e posteriores, a imagem de contêiner é baseada em uma imagem de base mínimamantida pelo Amazon EKS Distro, que contém pacotes mínimos e não tem shells. Para obter mais informações, consulte Amazon EKS Distro . O uso e a solução de problemas da imagem do CoreDNS permanecem os mesmos.
Criar o complemento do Amazon EKS
Crie o tipo do Amazon EKS do complemento. Verificar
Pré-requisitos
-
Um cluster existente do Amazon EKS. Para implantar, consulte Conceitos básicos do Amazon EKS.
-
Veja qual versão do complemento está atualmente instalada no cluster.
kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3
Veja um exemplo de saída abaixo.
v1.10.1-eksbuild.7
-
Veja qual tipo de complemento está atualmente instalado no cluster. Dependendo da ferramenta com a qual você criou o cluster, talvez você não tenha o tipo de complemento do Amazon EKS instalado em seu cluster atualmente. Substitua
my-cluster
pelo nome do cluster.aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns --query addon.addonVersion --output textSe um número de versão for retornado, você tem o tipo de complemento do Amazon EKS instalado no cluster, e não precisa completar as etapas restantes deste procedimento. Se um erro for retornado, você não tem o tipo de complemento do Amazon EKS instalado no cluster. Conclua as etapas restantes desse procedimento para instalá-lo.
-
Salve a configuração do complemento instalado atualmente.
kubectl get deployment coredns -n kube-system -o yaml >
aws-k8s-coredns-old.yaml
-
Crie o complemento usando o AWS CLI. Se você quiser usar o AWS Management Console ou
eksctl
para criar o complemento, consulte Criar um complemento e especifiquecoredns
como o nome do complemento. Copie o conteúdo a seguir no seu dispositivo. Faça as seguintes modificações no comando, conforme necessário, e execute o comando modificado.-
Substitua o
pelo nome do cluster.my-cluster
-
Substitua
v1.11.1-eksbuild.6
pela versão mais recente listada na tabela das versões mais recentes da versão do seu cluster.
aws eks create-addon --cluster-name
my-cluster
--addon-name coredns --addon-versionv1.11.1-eksbuild.6
Se você aplicou configurações personalizadas ao seu complemento atual que entrem em conflito com as configurações padrão do complemento Amazon EKS, a criação poderá falhar. Se a criação falhar, você receberá um erro que poderá ajudar a resolver o problema. Como alternativa, você pode adicionar
--resolve-conflicts OVERWRITE
ao comando anterior. Isso permite que o complemento substitua todas as configurações personalizadas existentes. Depois de criar o complemento, você pode atualizá-lo com suas configurações personalizadas. -
-
Confirme se a versão mais recente do complemento para a versão Kubernetes do seu cluster foi adicionada ao cluster. Substitua o
pelo nome do cluster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns --query addon.addonVersion --output textPode levar alguns segundos para que a criação do complemento seja concluída.
Veja um exemplo de saída abaixo.
v1.11.1-eksbuild.6
-
Se você fez configurações personalizadas no complemento original, antes de criar o complemento Amazon EKS, use a configuração que você salvou em uma etapa anterior para atualizar o complemento Amazon EKS com as configurações personalizadas.
Atualizar o complemento do Amazon EKS
Atualize o tipo do Amazon EKS do complemento. Se você não adicionou o tipo Amazon EKS do complemento ao cluster, adicione-o ou consulte Atualização do complemento autogerenciado, em vez de concluir esse procedimento.
-
Veja qual versão do complemento está atualmente instalada no cluster. Substitua
pelo nome do cluster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns --query "addon.addonVersion" --output textVeja um exemplo de saída abaixo.
v1.10.1-eksbuild.7
Se a versão retornada for a mesma da versão do Kubernetes do cluster na tabela de versões mais recente, você já tem a versão mais recente instalada no cluster e não precisa concluir o restante desse procedimento. Se você receber um erro, em vez de um número de versão no resultado, você não tem o tipo Amazon EKS do complemento instalado no cluster. Você precisa criar o complemento antes de poder atualizá-lo com este procedimento.
-
Salve a configuração do complemento instalado atualmente.
kubectl get deployment coredns -n kube-system -o yaml >
aws-k8s-coredns-old.yaml
-
Atualize o complemento usando a AWS CLI. Se você quiser usar o AWS Management Console ou
eksctl
para atualizar o complemento, consulte Atualizar um complemento. Copie o conteúdo a seguir no seu dispositivo. Faça as seguintes modificações no comando, conforme necessário, e execute o comando modificado.-
Substitua o
pelo nome do cluster.my-cluster
-
Substitua
v1.11.1-eksbuild.6
pela versão mais recente listada na tabela das versões mais recentes da versão do seu cluster. -
A opção
PRESERVE
de--resolve-conflicts
mantém os valores de configuração existentes para o complemento. Se você definiu valores personalizados para as configurações do complemento e não usar essa opção, o Amazon EKS sobrescreverá seus valores pelos valores padrão. Se você usar essa opção, recomendamos testar qualquer alteração de campo e valor em um cluster que não seja de produção antes de atualizar o complemento no cluster de produção. Se você alterar esse valor paraOVERWRITE
, todas as configurações serão alteradas para os valores padrão do Amazon EKS. Se você definiu valores personalizados para qualquer configuração, eles poderão ser sobrescritos pelos valores padrão do Amazon EKS. Se você alterar esse valor paranone
, o Amazon EKS não alterará o valor de nenhuma configuração, mas a atualização poderá falhar. Se a atualização falhar, você receberá uma mensagem de erro para ajudar a resolver o conflito. -
Se você não estiver atualizando uma configuração, remova
--configuration-values '{
do comando. Se você estiver atualizando uma definição de configuração, substitua"replicaCount":3
}'"replicaCount":3
pela definição que deseja definir. Neste exemplo, o número de réplicas de CoreDNS é definido como3
. O valor que você especificar deve ser válido para o esquema da configuração. Se não souber qual é o esquema de configuração, executeaws eks describe-addon-configuration --addon-name coredns --addon-version
, substituindov1.11.1-eksbuild.6
v1.11.1-eksbuild.6
pelo número da versão do complemento cuja configuração você deseja ver. O esquema é retornado na saída. Se você tiver alguma configuração personalizada existente que deseja remover e definir os valores de todas as configurações de volta aos padrões do Amazon EKS, remova"replicaCount":3
do comando para que você tenha arquivos vazios
. Para obter mais informações sobre as configurações do CoreDNS, consulte Personalizando o Serviço DNS{}
na documentação do Kubernetes. aws eks update-addon --cluster-name
my-cluster
--addon-name coredns --addon-versionv1.11.1-eksbuild.6
\ --resolve-conflictsPRESERVE
--configuration-values '{"replicaCount":3
}'Pode levar alguns segundos para que a atualização seja concluída.
-
-
Confirme se a versão do complemento foi atualizada. Substitua o
pelo nome do cluster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name corednsPode levar alguns segundos para que a atualização seja concluída.
Veja um exemplo de saída abaixo.
{ "addon": { "addonName": "coredns", "clusterName": "
my-cluster
", "status": "ACTIVE", "addonVersion": "v1.11.1-eksbuild.6
", "health": { "issues": [] }, "addonArn": "arn:aws:eks:region
:111122223333
:addon/my-cluster
/coredns/d2c34f06-1111-2222-1eb0-24f64ce37fa4", "createdAt": "2023-03-01T16:41:32.442000+00:00", "modifiedAt": "2023-03-01T18:16:54.332000+00:00", "tags": {},"configurationValues": "{\"replicaCount\":3}"
} }
Atualização do complemento autogerenciado
Importante
Recomendamos adicionar o tipo Amazon EKS do complemento ao seu cluster em vez de usar o tipo autogerenciado do complemento. Se você não estiver familiarizado com a diferença entre os tipos, consulte Complementos do Amazon EKS. Para obter mais informações sobre como adicionar um complemento do Amazon EKS ao cluster, consulte Criar um complemento. Se você não conseguir usar o complemento do Amazon EKS, recomendamos que você envie um problema sobre o motivo pelo qual não pode usar o repositório GitHub para roteiro de contêineres
-
Confirme que tem o tipo autogerenciado de complemento instalado em seu cluster. Substitua
my-cluster
pelo nome do cluster.aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns --query addon.addonVersion --output textSe receber uma mensagem de erro, você tem o tipo autogerenciado do complemento instalado no cluster. Conclua as etapas restantes neste procedimento. Se receber um número de versão, você tem o tipo de complemento do Amazon EKS instalado no cluster. Para atualizar o tipo de complemento do Amazon EKS, use o procedimento em Atualizar o complemento do Amazon EKS, em vez de usar este procedimento. Se não estiver familiarizado com a diferença entre os tipos de complemento, consulte Complementos do Amazon EKS.
-
Veja qual versão da imagem do contêiner está atualmente instalada em seu cluster.
kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3
Veja um exemplo de saída abaixo.
v1.8.7-eksbuild.2
-
Se a versão atual do CoreDNS for
v1.5.0
ou superior, mas anterior à versão listada na tabela Versões do CoreDNS, ignore esta etapa. Se a sua versão atual for anterior à1.5.0
, você precisa modificar oConfigMap
para que o CoreDNS use o complemento de encaminhamento, em vez do complemento de proxy.-
Abra o arquivo configmap com o seguinte comando.
kubectl edit configmap coredns -n kube-system
-
Substitua
proxy
na linha a seguir peloforward
. Salve o arquivo e saia do editor.
. /etc/resolv.confproxy
-
-
Se você implantou originalmente o cluster no Kubernetes
1.17
ou anterior, talvez seja necessário remover uma linha descontinuada do manifesto do CoreDNS.Importante
Você deve concluir essa etapa antes de atualizar para o CoreDNS versão
1.7.0
, mas é recomendável concluir essa etapa mesmo se estiver atualizando para uma versão anterior.-
Verifique se o manifesto do CoreDNS tem a linha.
kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream
Se nenhum resultado for retornado, o manifesto não terá a linha e você poderá prosseguir para a próxima etapa para atualizar o CoreDNS. Se um resultado for retornado, você precisará remover a linha.
-
Edite o
ConfigMap
com o comando a seguir, removendo a linha no arquivo que inclui a palavraupstream
em seu nome. Não altere mais nada no arquivo. Depois que a linha for removida, salve as alterações.kubectl edit configmap coredns -n kube-system -o yaml
-
-
Recupere a imagem atual do CoreDNS:
kubectl describe deployment coredns -n kube-system | grep Image
Veja um exemplo de saída abaixo.
602401143452
.dkr.ecr.region-code
.amazonaws.com/eks/coredns:v1.8.7-eksbuild.2
-
Se você estiver atualizando para o CoreDNS
1.8.3
ou posterior, será necessário adicionar a permissão deendpointslices
àclusterrole
dosystem:coredns
do Kubernetes.kubectl edit clusterrole system:coredns -n kube-system
Adicione as linhas a seguir abaixo das linhas de permissões existentes na seção
rules
do arquivo.[...]
- apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch
[...] -
Atualize o complemento CoreDNS substituindo
e602401143452
pelos valores da saída retornados em uma etapa anterior. Substituaregion-code
pela versão do CoreDNS listada na tabela de versões mais recentes para sua versão do Kubernetes.v1.11.1-eksbuild.6
kubectl set image deployment.apps/coredns -n kube-system coredns=
602401143452
.dkr.ecr.region-code
.amazonaws.com/eks/coredns:v1.11.1-eksbuild.6
Veja um exemplo de saída abaixo.
deployment.apps/coredns image updated
-
Verifique a versão da imagem do contêiner novamente para confirmar que ela foi atualizada para a versão que você especificou na etapa anterior.
kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3
Veja um exemplo de saída abaixo.
v1.11.1-eksbuild.6