Configurazione del provider DNS del cluster

A ogni servizio nel tuo cluster IBM Cloud® Kubernetes Service viene assegnato un nome DNS (Domain Name System) che il provider DNS del cluster registra per risolvere le richieste DNS. Per ulteriori informazioni sul DNS per i servizi e i pod, consultare la documentazione " Kubernetes ".

Il provider DNS del cluster è CoreDNS, un server DNS autorevole e multiuso che offre un’integrazione retrocompatibile, ma estensibile, con Kubernetes. Poiché CoreDNS è un singolo eseguibile e un singolo processo, ha meno dipendenze e parti mobili che potrebbero presentare problemi rispetto ad altri provider DNS del cluster. Il progetto è scritto con lo stesso linguaggio del progetto Kubernetes, Go, che aiuta a proteggere la memoria. Infine, CoreDNS supporta casi d'uso più flessibili rispetto ad altri provider di DNS a cluster, poiché consente di creare voci DNS personalizzate, come quelle illustrate nelle configurazioni standard riportate nella documentazione all'indirizzo CoreDNS.

CoreDNS e modifiche alla NodeLocal configurazione della cache DNS nella versione 1.34 e successive
Il tempo di cache DNS predefinito nelle configurazioni DNS NodeLocal e CoreDNS è stato aumentato da 30 secondi a 120 secondi. Questa modifica si applica alle ConfigMap impostazioni per la cache DNS. Alcuni utenti hanno raggiunto i limiti di traffico di pDNS (o UDP ) a causa delle frequenti ricerche DNS causate dalla breve durata della cache. Un intervallo di cache di 30 secondi è raramente necessario, tranne che per i record DNS che cambiano molto frequentemente, ad esempio gli endpoint di controllo dello stato. Per la maggior parte dei carichi di lavoro, una cache predefinita di 120 secondi offre prestazioni migliori e riduce il traffico DNS non necessario. Gli utenti che necessitano di tempi di cache più brevi per casi d'uso specifici possono sovrascrivere questa impostazione.

Ridimensionamento automatico del provider DNS del cluster

Per impostazione predefinita, CoreDNS include una distribuzione per ridimensionare automaticamente i pod CoreDNS in risposta al numero di nodi di lavoro e core all'interno del cluster. Puoi ottimizzare i parametri dell'autoscaler CoreDNS modificando la mappa di configurazione del ridimensionamento automatico CoreDNS. Ad esempio, se le tue applicazioni fanno un uso elevato del provider DNS del cluster, potresti dover aumentare il numero minimo di pod CoreDNS per supportare l'applicazione. Per ulteriori informazioni, consultare la documentazione relativa a “ Kubernetes ”.

Prima di iniziare: Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  1. Verifica che la distribuzione dell'autoscaler CoreDNS sia disponibile. Nel tuo output della CLI, verifica che una distribuzione sia disponibile (AVAILABLE).

    kubectl get deployment -n kube-system coredns-autoscaler
    

    Output di esempio

    NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
    coredns-autoscaler   1/1     1            1           69d
    
  2. Modifica le impostazioni predefinite per l'autoscaler CoreDNS. Cerca il campo data.linear, che per impostazione predefinita utilizza un pod CoreDNS per 16 nodi di lavoro o 256 core, con un minimo di due pod CoreDNS indipendentemente dalla dimensione del cluster (preventSinglePointFailure: true). Per ulteriori informazioni, vedi la documentazione di Kubernetes.

    kubectl edit configmap -n kube-system coredns-autoscaler
    

    Output di esempio

    apiVersion: v1
    data:
      linear: '{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}'
    kind: ConfigMap
    metadata:
    ...
    

Personalizzazione del provider DNS del cluster

Puoi personalizzare CoreDNS modificando la relativa mappa di configurazione. Ad esempio, potresti voler configurare dei domini stub e dei server DNS upstream per risolvere i servizi che puntano ad host esterni. Inoltre, è possibile configurare più file Corefile all'indirizzo CoreDNS ConfigMap. Per ulteriori informazioni, consultare la documentazione relativa a “ Kubernetes ”.

NodeLocal La cache DNS si basa su CoreDNS per mantenere la cache delle risoluzioni DNS. Mantenere invariate la cache DNS NodeLocal applicabile e CoreDNS le configurazioni quali i domini stub per garantire la coerenza della risoluzione DNS.

Prima di iniziare: Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  1. Verifica che la distribuzione CoreDNS sia disponibile. Nel tuo output della CLI, verifica che una distribuzione sia disponibile (AVAILABLE).

    kubectl get deployment -n kube-system coredns
    

    Output di esempio

    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    coredns   3/3     3            3           69d
    
  2. Modifica le impostazioni predefinite per la mappa di configurazione di CoreDNS. Utilizza un Corefile nella sezione data della mappa di configurazione per personalizzare i domini stub e i server DNS upstream. Per ulteriori informazioni, consultare la documentazione relativa a “ Kubernetes ”.

    Il CoreDNSproxy plug-in è deprecato e sostituito dal forward plug-in. Se aggiorni la mappa di configurazione CoreDNS, assicurati di sostituire tutte le istanze proxy con forward.

    kubectl edit configmap -n kube-system coredns
    

    CoreDNS esempio di output

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: coredns
    namespace: kube-system
      data:
        Corefile: |
          import <MyCorefile>
          .:53 {
              errors
              health {
                lameduck 10s
              }
              ready
              kubernetes cluster.local in-addr.arpa ip6.arpa {
                 pods insecure
                 fallthrough in-addr.arpa ip6.arpa
                 ttl 30
              }
              prometheus :9153
              forward . /etc/resolv.conf {
                  max_concurrent 1000
              }
              cache 30 {
                  disable success cluster.local
                  disable denial cluster.local
              }
              loop
              reload
              loadbalance
          }
        <MyCorefile>: |
          abc.com:53 {
            errors
            cache 30
            loop
            forward . 1.2.3.4
            }
    
  3. Facoltativo: aggiungi i Corefile personalizzati alla mappa di configurazione di CoreDNS. Nell'esempio seguente, includi il file import nella sezione data.Corefile e completa la sezione data. con le informazioni personalizzate relative al tuo Corefile. Per ulteriori informazioni, consultare la documentazione sull'importazione di Corefile.

    Il CoreDNSproxy plug-in è deprecato e sostituito dal forward plug-in. Se aggiorni la mappa di configurazione CoreDNS, assicurati di sostituire tutte le istanze proxy con forward.

    kubectl edit configmap -n kube-system coredns
    

    Output dell'esempio Corefile personalizzato

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns
      namespace: kube-system
    data:
      Corefile: |
        import <MyCorefile>
        .:53 {
            errors
            health
            kubernetes cluster.local in-addr.arpa ip6.arpa {
               pods insecure
               upstream 172.16.0.1
               fallthrough in-addr.arpa ip6.arpa
            }
            prometheus :9153
            forward . /etc/resolv.conf {
                max_concurrent 1000
            }
            cache 30 {
                disable success cluster.local
                disable denial cluster.local
            }
            loop
            reload
            loadbalance
        }
      <MyCorefile>: |
        abc.com:53 {
          errors
          cache 30
          loop
          forward . 1.2.3.4
        }
    
  4. Dopo qualche minuto, i pod CoreDNS rilevano le modifiche della mappa di configurazione.

Configurazione della cache DNS NodeLocal

Configura l'agent di memorizzazione nella cache DNS NodeLocal su determinati nodi di lavoro per migliorare le prestazioni e la disponibilità del DNS nel tuo cluster IBM Cloud Kubernetes Service. Per ulteriori informazioni, consultare la documentazione di Kubernetes.

Per impostazione predefinita, le richieste DNS del cluster relative ai pod che utilizzano una politica DNS " ClusterFirst " vengono inviate al servizio DNS del cluster. Se abiliti la memorizzazione nella cache DNS NodeLocal su un nodo di lavoro, le richieste DNS del cluster per questi pod che si trovano sul nodo di lavoro vengono inviate invece alla cache DNS locale, che è in ascolto sull'indirizzo IP locale di collegamento 169.254.20.10. La cache DNS ascolta anche l'IP cluster del servizio kube-dns nello spazio dei nomi kube-system.

Non aggiungere l'etichetta della cache DNS se nel cluster si utilizza già un DNS "zone-aware". Inoltre, la cache NodeLocal DNS si basa su CoreDNS per mantenere la cache delle risoluzioni DNS. Mantenere invariate la cache DNS NodeLocal applicabile e CoreDNS le configurazioni quali i domini stub per garantire la coerenza della risoluzione DNS.

Versione 1.34 e e precedenti
NodeLocal La cache DNS è opt-in. È necessario abilitarlo manualmente aggiungendo l'etichetta ibm-cloud.kubernetes.io/node-local-dns-enabled=true ai nodi worker.
Versione 1.35 e e successive
NodeLocal La cache DNS è abilitata per impostazione predefinita su tutti i nodi worker. Nei cluster aggiornati alla versione 1.35 il DNS di NodeLocal è abilitato automaticamente, a meno che non si scelga di non farlo. Per evitare l'abilitazione automatica, applicare l'etichetta ibm-cloud.kubernetes.io/node-local-dns-disabled=true ai nodi worker prima di eseguire l'aggiornamento.

Per ulteriori informazioni sulle modifiche alla versione 1.35, consultare le informazioni sulla versione 1.35.

Abilita la cache DNS NodeLocal

Abilita la cache DNS NodeLocal per uno o più nodi di lavoro nel tuo cluster Kubernetes.

Versione 1.35 e e successive
NodeLocal Il DNS è abilitato per impostazione predefinita su tutti i nodi worker. Seguire questi passaggi solo se si è precedentemente disabilitato NodeLocal DNS o se si stanno aggiungendo nuovi nodi worker con NodeLocal DNS disabilitato.
Versione 1.34 e e precedenti
NodeLocal Il DNS è opt-in. Seguite questi passaggi per abilitarlo sui vostri nodi worker.

La seguente procedura aggiorna i pod DNS che vengono eseguiti su specifici nodi di lavoro. Puoi anche etichettare il pool di nodi di lavoro in modo che i nodi futuri ereditino l'etichetta.

Prima di iniziare, aggiorna tutte le politiche di rete relative all'uscita DNS interessate da questa funzionalità, come ad esempio quelle che si basano su selettori di pod o namespace per l'uscita DNS.

kubectl get networkpolicy --all-namespaces -o yaml
  1. Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  2. Se hai personalizzato dei domini stub e dei server DNS upstream per CoreDNS, devi anche personalizzare la cache DNS NodeLocal con questi domini stub e server DNS upstream.

  3. Elenca i nodi nel tuo cluster. I pod dell'agent di memorizzazione in cache DNS NodeLocal fanno parte di un insieme di daemon che viene eseguito su ciascun nodo.

    kubectl get nodes
    
  4. Aggiungi l'etichetta ibm-cloud.kubernetes.io/node-local-dns-enabled=true al nodo di lavoro. L'etichetta avvia il pod dell'agent di memorizzazione in cache DNS sul nodo di lavoro.

    1. Aggiungere l'etichetta a uno o più nodi di lavoro.
    2. Verifica che il nodo abbia l'etichetta controllando che il campo NODE-LOCAL-DNS-ENABLED sia impostato su true.
        kubectl get nodes -L "ibm-cloud.kubernetes.io/node-local-dns-enabled"
        ```
        Output di esempio
    
        ```sh {: screen}
        NAME          STATUS                      ROLES    AGE   VERSION       NODE-LOCAL-DNS-ENABLED
        10.xxx.xx.xxx Ready,SchedulingDisabled    <none>   28h   v1.35+IKS   true
        ```
    3. Verifica che il pod dell'agent di memorizzazione in cache DNS sia in esecuzione sul nodo di lavoro.
    
    ```sh {: pre}
        kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide
        ```
        Output di esempio
    
        ```sh {: screen}
        NAME                   READY   STATUS    RESTARTS   AGE   IP            NODE          NOMINATED NODE   READINESS GATES
        node-local-dns-pvnjn   1/1     Running   0          1m    10.xxx.xx.xxx   10.xxx.xx.xxx  <none>           <none>
        ```
    
  5. Ripeti i passi precedenti per ciascun nodo di lavoro per abilitare la memorizzazione in cache DNS.

Disabilita la cache DNS NodeLocal

Puoi disabilitare la cache DNS NodeLocal per uno o più nodi di lavoro.

Versione 1.35 e e successive

Per disabilitare NodeLocal DNS, che è abilitato per impostazione predefinita, aggiungere l'etichetta ibm-cloud.kubernetes.io/node-local-dns-disabled=true ai nodi worker.

kubectl label node --all --overwrite "ibm-cloud.kubernetes.io/node-local-dns-disabled=true"
Versione 1.34 e e precedenti

Per disabilitare NodeLocal DNS, rimuovere l'etichetta ibm-cloud.kubernetes.io/node-local-dns-enabled dai nodi worker.

  1. Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  2. Rimuovi l'etichetta ibm-cloud.kubernetes.io/node-local-dns-enabled dal nodo di lavoro. Questa azione termina il pod dell'agent di memorizzazione in cache DNS sul nodo di lavoro.

    Esegui il seguente comando per rimuovere l'etichetta da tutti i nodi di lavoro nel cluster.

    kubectl label node --all --overwrite "ibm-cloud.kubernetes.io/node-local-dns-enabled-"
    

    Immetti questo comando per rimuovere l'etichetta da un singolo nodo di lavoro.

    kubectl label node <node_name> "ibm-cloud.kubernetes.io/node-local-dns-enabled-"
    
    1. Verifica che l'etichetta sia stata rimossa controllando che il campo NODE-LOCAL-DNS-ENABLED sia vuoto.
        kubectl get nodes -L "ibm-cloud.kubernetes.io/node-local-dns-enabled"
        ```
        Output di esempio
    
        ```sh {: screen}
        NAME          STATUS                      ROLES    AGE   VERSION       NODE-LOCAL-DNS-ENABLED
        10.xxx.xx.xxx Ready,SchedulingDisabled    <none>   28h   v1.35+IKS   
        ```
    2. Verifica che il pod non sia più in esecuzione sul nodo dove la cache DNS è disabilitata. L'output non mostra alcun pod.
    
    ```sh {: pre}
        kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide
        ```
        Output di esempio
    
        ```sh {: screen}
        No resources found.
        ```
    
  3. Ripeti i passi precedenti per ogni nodo di lavoro per disabilitare la memorizzazione in cache DNS.

Personalizzazione della cache DNS NodeLocal

È possibile personalizzare la cache DNS NodeLocal modificando una delle due mappe di configurazione.

NodeLocal La cache DNS si basa su CoreDNS per mantenere la cache delle risoluzioni DNS. Mantenere invariate la cache DNS NodeLocal applicabile e CoreDNS le configurazioni quali i domini stub per garantire la coerenza della risoluzione DNS.

Modifica di node-local-dns ConfigMap per aggiornamenti di configurazione generali

Modifica il node-local-dnsConfigMap per personalizzare la configurazione NodeLocal della cache DNS.

Prima di iniziare: Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  1. Verifica che la serie di daemon della cache DNS NodeLocal sia disponibile.

    kubectl get ds -n kube-system node-local-dns
    

    Output di esempio

    NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                                         AGE
    node-local-dns   4         4         4       4            4           ibm-cloud.kubernetes.io/node-local-dns-enabled=true   82d
    
  2. Modificare le impostazioni predefinite o aggiungere i Corefile personalizzati alla NodeLocal cache DNS ConfigMap. Ogni Corefile che importi deve utilizzare il percorso coredns. Per ulteriori informazioni, consultare la documentazione relativa a “ Kubernetes ”.

    Solo una serie limitata di plug-in è supportata per la cache DNS NodeLocal.

    kubectl edit configmap -n kube-system node-local-dns
    

    Output di esempio

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: node-local-dns
      namespace: kube-system
    data:
      Corefile: |
        # Add your NodeLocal DNS customizations as import files under ./coredns directory.
        # Refer to /docs/containers?topic=containers-cluster_dns for details.
        import ./coredns/<MyCorefile>
        cluster.local:53 abc.com:53 {
            errors
            cache {
                    success 9984 30
                    denial 9984 5
            }
            reload
            loop
            bind 169.254.20.10 172.21.0.10
            forward . __PILLAR__CLUSTER__DNS__ {
                    force_tcp
            }
            prometheus :9253
            health 169.254.20.10:8080
            }
        in-addr.arpa:53 {
            errors
            cache 30
            reload
            loop
            bind 169.254.20.10 172.21.0.10
            forward . __PILLAR__CLUSTER__DNS__ {
                    force_tcp
            }
            prometheus :9253
            }
        ip6.arpa:53 {
            errors
            cache 30
            reload
            loop
            bind 169.254.20.10 172.21.0.10
            forward . __PILLAR__CLUSTER__DNS__ {
                    force_tcp
            }
            prometheus :9253
            }
        .:53 {
            errors
            cache 30 {
                  disable success cluster.local
                  disable denial cluster.local
            }
            reload
            loop
            bind 169.254.20.10 172.21.0.10
            forward . __PILLAR__UPSTREAM__SERVERS__ {
                    force_tcp
            }
            prometheus :9253
            }
      <MyCorefile>: |
        # Add custom corefile content ...
    
  3. Dopo pochi minuti, i pod della cache DNS NodeLocal rilevano le modifiche della mappa di configurazione.

Modifica di node-local-dns-config ConfigMap per l'estensione con domini stub o server upstream

Modifica il node-local-dns-configConfigMap per estendere la configurazione NodeLocal della cache DNS, ad esempio personalizzando i domini stub o i server DNS upstream. Per ulteriori informazioni, consultare la documentazione relativa a “ Kubernetes ”.

Prima di iniziare: Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  1. Verifica che la serie di daemon della cache DNS NodeLocal sia disponibile.

    kubectl get ds -n kube-system node-local-dns
    

    Output di esempio

    NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                                         AGE
    node-local-dns   4         4         4       4            4           ibm-cloud.kubernetes.io/node-local-dns-enabled=true   82d
    
  2. Conferma che la cache DNS NodeLocal abbia una mappa di configurazione.

    1. Determina se la mappa di configurazione della cache DNS NodeLocal DNS esiste.
        kubectl get cm -n kube-system node-local-dns-config
        ```
        Esempio di output nel caso in cui non esista alcun file “ ConfigMap ”
    
        ```sh {: screen}
        Error from server (NotFound): ConfigMaps "node-local-dns-config" not found
        ```
    2. Se la mappa di configurazione non esiste, crea una mappa di configurazione della cache DNS `NodeLocal`.
    
    ```sh {: pre}
        kubectl create cm -n kube-system node-local-dns-config
        ```
        Output di esempio
    
        ```sh {: screen}
        configmap/node-local-dns-config created
        ```
    
  3. Modifica la mappa di configurazione della cache DNS NodeLocal. La mappa di configurazione utilizza la sintassi KubeDNS per personalizzare i domini stub e i server DNS upstream. Per ulteriori informazioni, consultare la documentazione relativa a “ Kubernetes ”.

    kubectl edit cm -n kube-system node-local-dns-config
    

    Output di esempio

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: node-local-dns-config
      namespace: kube-system
    data:
      stubDomains: |
          {"abc.com" : ["1.2.3.4"]}
    
  4. Dopo pochi minuti, i pod della cache DNS NodeLocal rilevano le modifiche della mappa di configurazione.

Configurazione di DNS con zone

Configura il DNS con riconoscimento della zona per migliorare le prestazioni e la disponibilità del DNS del cluster nel tuo cluster IBM Cloud Kubernetes Service multizona. Questa configurazione estende la cache DNS NodeLocal per preferire il traffico DNS del cluster all'interno della stessa zona.

Per impostazione predefinita, il tuo cluster è configurato con risorse DNS a livello di cluster e non con risorse DNS con riconoscimento della zona. Anche dopo aver configurato il DNS con riconoscimento della zona, le risorse DNS a livello di cluster rimangono in esecuzione come DNS di backup. Le tue risorse DNS con riconoscimento della zona sono separate dal DNS a livello di cluster e la modifica del DNS con riconoscimento della zona non influisce sul DNS a livello di cluster.

Non utilizzare l'etichetta della cache DNS quando si utilizza il DNS "zone-aware" nel proprio cluster.

Configurazione di DNS con zone

Completa il seguente passo per configurare il DNS consapevole della zona nel tuo cluster multizona.

  1. Aggiornare tutte le politiche di rete in uscita DNS interessate dal DNS "zone-aware", come ad esempio quelle che si basano su selettori di pod o di namespace per l'uscita DNS. Esegui il seguente comando per visualizzare l'elenco delle tue politiche di rete.

    kubectl get networkpolicy --all-namespaces -o yaml
    
  2. Etichettare coredns ConfigMap nello spazio dei nomi kube-system con ibm-cloud.kubernetes.io/deploy-zone-aware-dns=true.

    kubectl label cm -n kube-system coredns --overwrite "ibm-cloud.kubernetes.io/deploy-zone-aware-dns=true"
    
  3. Aggiorna il master cluster per distribuire le risorse DNS sensibili alla zona.

    ibmcloud ks cluster master refresh -c CLUSTER_NAME_OR_ID
    
  4. Controlla il completamento dell'operazione di aggiornamento esaminando il campo Master Health nei dettagli del cluster.

    ibmcloud ks cluster get -c CLUSTER_NAME_OR_ID
    
  5. Se hai personalizzato dei domini stub e dei server DNS upstream per CoreDNS, devi anche personalizzare la cache DNS NodeLocal con questi domini stub e server DNS upstream.

  6. Imposta una variabile di ambiente per le zone del cluster.

    ZONES=$(kubectl get nodes --no-headers --ignore-not-found=true -o jsonpath='{range .items[*]}{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}{end}' | uniq)
    
  7. Avvia i pod CoreDNS e dell'autoscaler CoreDNS in tutte le zone.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-autoscaler-${ZONE}" --replicas=1
    done
    
  8. Verifica che i pod CoreDNS e dell'autoscaler CoreDNS siano in esecuzione in tutte le zone.

    for ZONE in ${ZONES}; do
        kubectl get pods -n kube-system -l "k8s-app=coredns-autoscaler-${ZONE}" -o wide
        kubectl get pods -n kube-system -l "k8s-app=coredns-${ZONE}" -o wide
    done
    
  9. Avvia i pod della cache DNS NodeLocal su tutti i nodi di lavoro.

    kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true"
    
  10. Verifica che i pod della cache DNS NodeLocal siano in esecuzione su tutti i nodi di lavoro.

    for ZONE in ${ZONES}; do
        kubectl get pods -n kube-system -l "k8s-app=node-local-dns-${ZONE}" -o wide
    done
    
  11. Etichetta i tuoi pool di nodi di lavoro in modo che i futuri nodi di lavoro ereditino l'etichetta ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true.

Disabilitazione ed eliminazione del DNS con riconoscimento della zona

Per rimuovere il DNS con riconoscimento della zona, devi prima disabilitarlo in ogni zona del tuo cluster multizona. Quindi, elimina le risorse DNS con riconoscimento della zona.

  1. Rimuovi l'etichetta ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true dal tuo pool di nodi di lavoro.

  2. Imposta una variabile di ambiente per le zone nel cluster.

    ZONES=$(kubectl get nodes --no-headers --ignore-not-found=true -o jsonpath='{range .items[*]}{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}{end}' | uniq)
    
  3. Arresta i pod della cache DNS NodeLocal su tutti i nodi di lavoro.

    kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled-"
    
  4. Arresta i pod dell'autoscaler CoreDNS in tutte le zone.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-autoscaler-${ZONE}" --replicas=0
    done
    
  5. Verifica che i pod dell'autoscaler CoreDNS non siano più in esecuzione in tutte le zone.

    for ZONE in ${ZONES}; do
        kubectl get pods -n kube-system -l "k8s-app=coredns-autoscaler-${ZONE}"
    done
    
  6. Arresta i pod CoreDNS in tutte le zone.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-${ZONE}" --replicas=0
    done
    
  7. Rimuovi l'etichetta ibm-cloud.kubernetes.io/deploy-zone-aware-dns=true dalla mappa di configurazione coredns nello spazio dei nomi kube-system.

    kubectl label cm -n kube-system coredns --overwrite "ibm-cloud.kubernetes.io/deploy-zone-aware-dns-"
    
  8. Aggiorna il master cluster per eliminare le risorse DNS con riconoscimento della zona.

    ibmcloud ks cluster master refresh --cluster CLUSTER_NAME_OR_ID
    
  9. Controlla il completamento dell'operazione di aggiornamento esaminando il campo Master Health nei dettagli del cluster.

    ibmcloud ks cluster get -c CLUSTER_NAME_OR_ID