Utilizzo del componente aggiuntivo CoreDNS di Amazon EKS - Amazon EKS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo del componente aggiuntivo CoreDNS di Amazon EKS

CoreDNS è un server DNS flessibile ed estensibile che può fungere da DNS del cluster Kubernetes. Quando si avvia un cluster Amazon EKS con almeno un nodo, due repliche dell'immagine CoreDNS vengono implementate per impostazione predefinita, a prescindere dal numero di nodi implementati nel cluster. I Pods CoreDNS forniscono la risoluzione dei nomi per tutti i Pods del cluster. I Pods CoreDNS possono essere implementati sui nodi Fargate se il cluster include un AWS Fargate profilo con uno spazio dei nomi che corrisponde allo spazio per deployment CoreDNS. Per ulteriori informazioni su CoreDNS, consulta Utilizzo di CoreDNS per l'individuazione dei servizi nella documentazione Kubernetes.

La tabella seguente elenca la versione più recente del componente aggiuntivo di Amazon EKS disponibile per ogni versione Kubernetes.

Versione 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 gestisci autonomamente questo componente aggiuntivo, le versioni nella tabella potrebbero non essere le stesse delle versioni autogestite disponibili. Per ulteriori informazioni sull'aggiornamento del componente aggiuntivo del tipo autogestito, consulta Aggiornamento del componente aggiuntivo autogestito.

Considerazioni importanti sull'aggiornamento di CoreDNS

  • Per migliorare la stabilità e la disponibilità di CoreDNS Deployment, le versioni v1.9.3-eksbuild.5 e successive e v1.10.1-eksbuild.2 vengono distribuiti con un PodDisruptionBudget. Se hai implementato un PodDisruptionBudget esistente, l'aggiornamento a queste versioni potrebbe non riuscire. Se l'aggiornamento non riesce, il problema dovrebbe essere risolto eseguendo una delle seguenti operazioni:

    • Quando esegui l'aggiornamento del componente aggiuntivo Amazon EKS, scegli di sovrascrivere le impostazioni esistenti come opzione di risoluzione dei conflitti. Se hai effettuato altre impostazioni personalizzate su Deployment, assicurati di eseguire il backup delle impostazioni prima dell'aggiornamento in modo da poter riapplicare le altre impostazioni personalizzate dopo l'aggiornamento.

    • Rimuovi PodDisruptionBudget esistente e riprova a eseguire l'aggiornamento.

  • Nelle versioni aggiuntive EKS v1.9.3-eksbuild.3 e successive e v1.10.1-eksbuild.6 e successive, il CoreDNS Deployment imposta il readinessProbe per utilizzare l'endpoint /ready. Questo endpoint è abilitato nel file di configurazione Corefile per CoreDNS.

    Se si utilizza un dispositivo personalizzato Corefile, è necessario aggiungere il plugin ready alla configurazione, in modo che l'endpoint /ready sia attivo in CoreDNS e possa essere utilizzato dalla sonda.

  • Nelle versioni aggiuntive EKS v1.9.3-eksbuild.7 e successive e v1.10.1-eksbuild.4 e successive, è possibile modificare il. PodDisruptionBudget È possibile modificare il componente aggiuntivo e modificare queste impostazioni nelle configurazioni facoltative utilizzando i campi dell'esempio seguente. Questo esempio mostra l'impostazione predefinita PodDisruptionBudget.

    { "podDisruptionBudget": { "enabled": true, "maxUnavailable": 1 } }

    È possibile impostare maxUnavailable o minAvailable, ma non è possibile impostare entrambi sullo stesso PodDisruptionBudget. Per ulteriori informazioni su PodDisruptionBudgets, consulta Specifica di un PodDisruptionBudget nella documentazione di Kubernetes.

    Tieni presente che se imposti enabled su false, il PodDisruptionBudget non viene rimosso. Dopo aver impostato questo campo su false, è necessario eliminare l'oggetto PodDisruptionBudget. Allo stesso modo, se modifichi il componente aggiuntivo per utilizzarne una versione precedente (esegui il downgrade del componente aggiuntivo) dopo l'aggiornamento a una versione con un PodDisruptionBudget, questo non viene rimosso PodDisruptionBudget. Esegui il seguente comando per eliminare il PodDisruptionBudget:

    kubectl delete poddisruptionbudget coredns -n kube-system
  • Nelle versioni aggiuntive EKS v1.10.1-eksbuild.5 e successive, modifica la tolleranza predefinita da node-role.kubernetes.io/master:NoSchedule a per conformarla node-role.kubernetes.io/control-plane:NoSchedule a KEP 2067. Per ulteriori informazioni su KEP 2067, consulta KEP-2067: rinominare l'etichetta "master" di kubeadm e la taint nelle KEP (Kubernetes Enhancement Proposal) su GitHub.

    Nelle versioni aggiuntive EKS v1.8.7-eksbuild.8 e successive v1.9.3-eksbuild.9 e successive, entrambe le tolleranze sono impostate per essere compatibili con tutte le versioni. Kubernetes

  • Nelle versioni aggiuntive EKS v1.9.3-eksbuild.11 v1.10.1-eksbuild.7 e successive, CoreDNS Deployment imposta un valore predefinito per. topologySpreadConstraints Il valore predefinito garantisce che CoreDNS Pods siano distribuiti tra le zone di disponibilità se sono disponibili nodi in più zone di disponibilità. È possibile impostare un valore personalizzato che verrà utilizzato al posto del valore predefinito. Il valore predefinito è il seguente:

    topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: k8s-app: kube-dns

CoreDNSv considerazioni sull'1.11aggiornamento

  • Nelle versioni aggiuntive EKS v1.11.1-eksbuild.4 e successive, l'immagine del contenitore si basa su un'immagine di base minima gestita da Amazon EKS Distro, che contiene un numero minimo di pacchetti e non dispone di shell. Per ulteriori informazioni, consultare Amazon EKS Distro. L'utilizzo e la risoluzione dei problemi dell'CoreDNSimmagine rimangono gli stessi.

Creare il componente aggiuntivo di Amazon EKS

Crea il componente aggiuntivo del tipo Amazon EKS. Verifica

Prerequisiti
  1. Scopri qual è la versione del componente aggiuntivo attualmente installata sul cluster.

    kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3

    Di seguito viene riportato un output di esempio:

    v1.10.1-eksbuild.7
  2. Scopri qual è il tipo di componente aggiuntivo attualmente installato sul cluster. A seconda dello strumento con cui hai creato il cluster, al momento potresti non avere il componente aggiuntivo del tipo Amazon EKS installato sul cluster. Sostituisci my-cluster con il nome del cluster.

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text

    Se viene restituito il numero di versione, sul cluster è installato il componente aggiuntivo del tipo Amazon EKS e non è necessario completare i passaggi rimanenti di questa procedura. Se viene restituito un errore, sul cluster non è installato il componente aggiuntivo del tipo Amazon EKS. Completa i passaggi rimanenti di questa procedura per installarlo.

  3. Salva la configurazione del componente aggiuntivo attualmente installato.

    kubectl get deployment coredns -n kube-system -o yaml > aws-k8s-coredns-old.yaml
  4. Crea il componente aggiuntivo utilizzando la AWS CLI. Se desideri utilizzare AWS Management Console o eksctl creare il componente aggiuntivo, consulta Creazione di un componente aggiuntivo e specifica coredns il nome del componente aggiuntivo. Copia il comando seguente sul tuo dispositivo. Apporta le seguenti modifiche al comando, se necessario, quindi esegui il comando modificato.

    aws eks create-addon --cluster-name my-cluster --addon-name coredns --addon-version v1.11.1-eksbuild.6

    Se hai applicato impostazioni personalizzate al tuo attuale componente aggiuntivo che sono in conflitto con le impostazioni predefinite del componente aggiuntivo di Amazon EKS, la creazione potrebbe non riuscire. Se la creazione non riesce, riceverai un errore che può aiutare a risolvere il problema. In alternativa, puoi aggiungere --resolve-conflicts OVERWRITE al comando precedente. Ciò consente al componente aggiuntivo di sovrascrivere le impostazioni personalizzate esistenti. Una volta creato il componente aggiuntivo, puoi aggiornarlo con le tue impostazioni personalizzate.

  5. Verifica che la versione più recente del componente aggiuntivo per la versione Kubernetes del cluster sia stata aggiunta al cluster. Sostituisci my-cluster con il nome del cluster.

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text

    La creazione del componente aggiuntivo potrebbe richiedere alcuni secondi.

    Di seguito viene riportato un output di esempio:

    v1.11.1-eksbuild.6
  6. Se hai creato impostazioni personalizzate per il componente aggiuntivo originale, prima di creare il componente aggiuntivo di Amazon EKS, utilizza la configurazione che hai salvato precedentemente per aggiornare il componente aggiuntivo di Amazon EKS con le tue impostazioni personalizzate.

Aggiornamento del componente aggiuntivo di Amazon EKS

Aggiorna il componente aggiuntivo del tipo Amazon EKS. Se non hai aggiunto il componente aggiuntivo del tipo Amazon EKS al tuo cluster, aggiungilo o consulta Aggiornamento del componente aggiuntivo autogestito, invece di completare questa procedura.

  1. Scopri qual è la versione del componente aggiuntivo attualmente installata sul cluster. Sostituisci my-cluster con il nome del cluster.

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query "addon.addonVersion" --output text

    Di seguito viene riportato un output di esempio:

    v1.10.1-eksbuild.7

    Se la versione restituita è la stessa della versione Kubernetes del cluster nella tabella delle versioni più recenti, la versione più recente è già installata nel cluster e non è necessario completare il resto di questa procedura. Se invece di un numero di versione ricevi un errore, il componente aggiuntivo del tipo Amazon EKS non è installato sul cluster. È necessario creare il componente aggiuntivo prima di poterlo aggiornare con questa procedura.

  2. Salva la configurazione del componente aggiuntivo attualmente installato.

    kubectl get deployment coredns -n kube-system -o yaml > aws-k8s-coredns-old.yaml
  3. Aggiorna il componente aggiuntivo utilizzando la AWS CLI. Se desideri utilizzare o aggiornare il componente aggiuntivo, consulta AWS Management Console . eksctl Aggiornamento di un componente aggiuntivo Copia il comando seguente sul tuo dispositivo. Apporta le seguenti modifiche al comando, se necessario, quindi esegui il comando modificato.

    • Sostituisci my-cluster con il nome del cluster.

    • Sostituisci v1.11.1-eksbuild.6 con la versione più recente elencata nella tabella delle versioni più recenti per la versione del cluster.

    • L'opzione --resolve-conflicts CONSERVA mantiene i valori di configurazione esistenti per il componente aggiuntivo. Se hai impostato valori personalizzati per le impostazioni del componente aggiuntivo e non utilizzi questa opzione, Amazon EKS sovrascrive i tuoi valori con quelli predefiniti. Se utilizzi questa opzione, è preferibile testare eventuali modifiche ai campi e ai valori su un cluster non di produzione prima di aggiornare il componente aggiuntivo sul cluster di produzione. Se modifichi questo valore in OVERWRITE, tutte le impostazioni vengono modificate nei valori predefiniti di Amazon EKS. Se hai impostato valori personalizzati per un'impostazione qualunque, è possibile che vengano sovrascritti con i valori predefiniti di Amazon EKS. Se modifichi questo valore in none, Amazon EKS non modifica il valore di alcuna impostazione, ma l'aggiornamento potrebbe non riuscire. Se l'aggiornamento non riesce, riceverai un messaggio di errore che ti aiuterà a risolvere il conflitto.

    • Se non stai aggiornando un'impostazione di configurazione, rimuovi --configuration-values '{"replicaCount":3}' dal comando. Se stai aggiornando un'impostazione di configurazione, sostituisci "replicaCount":3 con l'impostazione desiderata. In questo esempio, il numero di repliche diCoreDNS è impostato su 3. Il valore specificato deve essere valido per lo schema di configurazione. Se non conosci lo schema di configurazione, aws eks describe-addon-configuration --addon-name coredns --addon-version v1.11.1-eksbuild.6 esegui sostituendo v1.11.1-eksbuild.6 con il numero di versione del componente aggiuntivo di cui vuoi vedere la configurazione. Lo schema viene restituito nell'output. Se disponi di una configurazione personalizzata, desideri rimuoverla e reimpostare i valori di tutte le impostazioni ai valori predefiniti di Amazon EKS, rimuovi "replicaCount":3 dal comando in modo da avere delle {} vuote. Per ulteriori informazioni sulle impostazioni CoreDNS, consulta Personalizzazione del servizio DNS nella documentazione di Kubernetes.

      aws eks update-addon --cluster-name my-cluster --addon-name coredns --addon-version v1.11.1-eksbuild.6 \ --resolve-conflicts PRESERVE --configuration-values '{"replicaCount":3}'

      Il completamento dell'aggiornamento potrebbe richiedere alcuni secondi.

  4. Conferma che la versione del componente aggiuntivo sia stata aggiornata. Sostituisci my-cluster con il nome del cluster.

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns

    Il completamento dell'aggiornamento potrebbe richiedere alcuni secondi.

    Di seguito viene riportato un output di esempio:

    { "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}" } }

Aggiornamento del componente aggiuntivo autogestito

Importante

Consigliamo di aggiungere al cluster il componente aggiuntivo del tipo Amazon EKS anziché quello del tipo autogestito. Se non conosci bene le differenze tra i due tipi, consulta la pagina Componenti aggiuntivi Amazon EKS. Per ulteriori informazioni sull'aggiunta di un componente aggiuntivo di Amazon EKS al cluster, consulta Creazione di un componente aggiuntivo. Se non riesci a utilizzare il componente aggiuntivo di Amazon EKS, ti invitiamo a segnalare il problema in Roadmap dei container GitHub .

  1. Verifica che sul cluster sia installato il componente aggiuntivo del tipo autogestito. Sostituisci my-cluster con il nome del tuo cluster.

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text

    Se viene restituito un messaggio di errore, sul cluster è installato il componente aggiuntivo del tipo autogestito. Completa i passaggi rimanenti di questa procedura. Se viene restituito il numero di versione, sul cluster è installato il tipo Amazon EKS del componente aggiuntivo. Per aggiornare il tipo di Amazon EKS del componente aggiuntivo, utilizza la procedura descritta in Aggiornamento del componente aggiuntivo di Amazon EKS anziché questa. Se non conosci bene le differenze tra i due tipi di componente aggiuntivo, consulta Componenti aggiuntivi Amazon EKS.

  2. Scopri qual è la versione dell'immagine di container attualmente installata sul cluster.

    kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3

    Di seguito viene riportato un output di esempio:

    v1.8.7-eksbuild.2
  3. Se la versione corrente di CoreDNS è v1.5.0 o successiva, ma precedente alla versione elencata nella tabella Versioni CoreDNS, ignorare questa fase. Se la versione corrente è precedente alla 1.5.0, è necessario modificare ConfigMap per CoreDNS al fine di utilizzare il componente aggiuntivo avanzato, anziché il componente aggiuntivo proxy.

    1. Aprire il file tramite il comando seguente:

      kubectl edit configmap coredns -n kube-system
    2. Sostituire proxy nella linea seguente con forward. Salvare il file e uscire dall'editor.

      proxy . /etc/resolv.conf
  4. Se il cluster in origine è stato implementato su Kubernetes 1.17 o versioni precedenti, potrebbe essere necessario rimuovere una riga obsoleta dal manifesto CoreDNS.

    Importante

    Devi completare questo passaggio prima di eseguire l'aggiornamento alla versione 1.7.0 di CoreDNS, ma è preferibile completare questo passaggio anche se esegui l'aggiornamento a una versione precedente.

    1. Verificare se il manifesto CoreDNS presenta la riga di inserimento.

      kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream

      Se non viene restituito alcun output, il manifesto non ha la riga di inserimento ed è possibile passare direttamente alla fase successiva per aggiornare CoreDNS. Se viene restituito l'output, è necessario rimuovere la riga di inserimento.

    2. Modificare ConfigMap con il seguente comando, rimuovendo la riga nel file che ha la parola upstream in esso. Non apportare ulteriori modifiche al file. Una volta rimossa la riga di inserimento, salvare le modifiche.

      kubectl edit configmap coredns -n kube-system -o yaml
  5. Recupera la versione dell'immagine CoreDNS corrente:

    kubectl describe deployment coredns -n kube-system | grep Image

    Di seguito viene riportato un output di esempio:

    602401143452.dkr.ecr.region-code.amazonaws.com/eks/coredns:v1.8.7-eksbuild.2
  6. Se stai eseguendo l'aggiornamento a CoreDNS 1.8.3 o successive, allora dovrai aggiungere l'autorizzazione endpointslices al clusterrole Kubernetes system:coredns.

    kubectl edit clusterrole system:coredns -n kube-system

    Aggiungere le seguenti righe sotto le righe di autorizzazioni esistenti nella sezione rules del file.

    [...] - apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch [...]
  7. Aggiorna il componente aggiuntivo CoreDNS sostituendo 602401143452 e region-code con i valori dell'output restituiti in un passaggio precedente. Sostituisci v1.11.1-eksbuild.6 con la versione CoreDNSriportata nella tabella delle ultime versioni per la versione del Kubernetes.

    kubectl set image deployment.apps/coredns -n kube-system coredns=602401143452.dkr.ecr.region-code.amazonaws.com/eks/coredns:v1.11.1-eksbuild.6

    Di seguito viene riportato un output di esempio:

    deployment.apps/coredns image updated
  8. Controlla nuovamente la versione dell'immagine del container per accertarti che sia stata aggiornata alla versione specificata nel passaggio precedente.

    kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3

    Di seguito viene riportato un output di esempio:

    v1.11.1-eksbuild.6