Actualice CoreDNS manualmente cuando la opción Upgrade no esté disponible en la página Add-ons de la consola de ACK.
Requisitos previos
Necesita:
Notas sobre la actualización
-
Si kube-proxy utiliza el modo IP Virtual Server (IPVS), es posible que todas las consultas DNS fallen o se agote su tiempo de espera durante aproximadamente 5 minutos después de actualizar CoreDNS. Evite este problema con uno de los siguientes métodos:
Modifique el tiempo de espera de sesión UDP de IPVS en la configuración de kube-proxy. Consulte Configure the UDP timeout for an IPVS cluster.
Use NodeLocal DNSCache para optimizar la resolución DNS.
La actualización tarda aproximadamente 2 minutos, según el número de réplicas de CoreDNS. Las réplicas existentes no se terminan, por lo que la resolución del servicio no se ve afectada.
Consultar la versión de CoreDNS
Consola
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la página Deployments, establezca Namespace en kube-system y compruebe la versión de CoreDNS en la columna Image.

kubectl
Consulte la versión de CoreDNS:
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"
Salida esperada:
registry-vpc.cn-hangzhou.aliyuncs.com/acs/coredns:1.6.2 # Version 1.6.2 is used in this example.
Confirmar la versión de actualización
La siguiente tabla enumera las versiones de CoreDNS compatibles con cada versión de Kubernetes. Utilice la versión compatible más reciente.
Rango de versiones de Kubernetes | Versiones de CoreDNS |
1.11 a 1.16 | 1.6.2 (descontinuada) |
1.14.8 a 1.22 | 1.6.7 (descontinuada) y 1.7.0 |
1.20.4 y posteriores | 1.8.4 y 1.9.3 Importante v1.8.4 y v1.9.3 tienen varias versiones menores, como |
1.21 y posteriores | 1.11.3 |
Actualizar manualmente
Consola
-
(Opcional) Reemplace el campo
proxypor el campoforward.El plugin Proxy quedó obsoleto en CoreDNS v1.6.2. Si actualiza desde una versión anterior, modifique la configuración de CoreDNS de la siguiente manera.
-
Cambie la versión de la imagen de CoreDNS.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la página Deployments, establezca Namespace en kube-system. Busque coredns y elija en la columna Actions.
-
En el cuadro de diálogo Edit YAML, cambie el número de versión en el campo
imagey haga clic en Update.
En el cuadro de diálogo de edición YAML, localice la configuración del Deployment de CoreDNS y confirme la versión de la imagen en el campo
image(por ejemplo,1.6.2). Fragmento clave de 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: ...
-
Compruebe la actualización.
-
Consulte la versión de CoreDNS:
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"Salida esperada:
registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun -
Compruebe si todos los pods de CoreDNS están en estado Running:
kubectl get pods -n kube-system | grep corednsSalida esperada:
coredns-78d4b8****-6g62w 1/1 Running 0 9d coredns-78d4b8****-n6wjm 1/1 Running 0 9d
-
kubectl
-
(Opcional) Reemplace el campo
proxypor el campoforward.El plugin Proxy quedó obsoleto en CoreDNS v1.6.2. Si actualiza desde una versión anterior, modifique la configuración de CoreDNS de la siguiente manera.
-
Cambie el número de versión en el campo
imagedel Deployment de CoreDNS; luego guarde y salga:kubectl edit deployment/coredns -n kube-system -
Compruebe la actualización.
-
Consulte la versión de CoreDNS:
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"Salida esperada:
registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun -
Compruebe si todos los pods de CoreDNS están en estado Running:
kubectl get pods -n kube-system | grep corednsSalida esperada:
coredns-78d4b8****-6g62w 1/1 Running 0 9d coredns-78d4b8****-n6wjm 1/1 Running 0 9d
-
Configurar el tiempo de espera UDP para un clúster IPVS
Si su clúster utiliza kube-proxy en modo IPVS, reduzca el tiempo de espera de persistencia de sesión UDP de IPVS a 10 segundos para limitar los fallos de DNS posteriores a la actualización.
Si su clúster tiene servicios basados en UDP, evalúe el impacto de reducir el tiempo de espera UDP antes de continuar.
Kubernetes 1.18 o posterior
Mediante la consola
Inicie sesión en la consola de ACK y haga clic en Clusters en el panel de navegación izquierdo.
En la página Clusters, haga clic en el nombre del clúster. Elija Configurations > ConfigMaps en el panel de navegación izquierdo.
En la página ConfigMaps, seleccione el namespace kube-system, busque kube-proxy-worker y haga clic en Edit YAML en la columna Actions.
-
En el panel Edit YAML, agregue
udpTimeout: 10sdebajo del campoipvsy haga clic en 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 -
Vuelva a crear todos los pods de kube-proxy-worker.
En la página de detalles del clúster, elija Workloads > DaemonSets en el panel de navegación izquierdo.
En la lista de DaemonSet, haga clic en kube-proxy-worker.
En la página kube-proxy-worker, haga clic en la pestaña Pods. Para cada pod, elija More > Delete y haga clic en OK. El sistema los vuelve a crear automáticamente.
-
Compruebe la configuración del tiempo de espera UDP.
-
Instale
ipvsadm:sudo yum install -y ipvsadm -
En cualquier nodo ECS del clúster, ejecute:
sudo ipvsadm -L --timeoutSi el tercer número en la salida es
10, el tiempo de espera UDP está configurado correctamente.Important: Después de configurar el tiempo de espera, espere como mínimo cinco minutos antes de actualizar CoreDNS.
-
Mediante la línea de comandos
-
Edite el ConfigMap kube-proxy-worker:
kubectl -n kube-system edit configmap kube-proxy-worker -
Agregue
udpTimeout: 10sdebajo del campoipvs; luego guarde y salga.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 -
Vuelva a crear todos los pods de kube-proxy-worker.
-
Liste los pods de kube-proxy-worker:
kubectl -n kube-system get pod -o wide | grep kube-proxy-worker -
Elimine cada pod. El sistema los vuelve a crear automáticamente.
kubectl -n kube-system delete pod <kube-proxy-worker-****>Reemplace
<kube-proxy-worker-****>con los nombres de los pods del paso anterior.
-
-
Compruebe la configuración del tiempo de espera UDP.
-
Instale
ipvsadm:sudo yum install -y ipvsadm -
En cualquier nodo ECS del clúster, ejecute:
sudo ipvsadm -L --timeoutSi el tercer número en la salida es
10, el tiempo de espera UDP está configurado correctamente.Important: Después de configurar el tiempo de espera, espere como mínimo cinco minutos antes de actualizar CoreDNS.
-
Kubernetes 1.16 o anterior
kube-proxy en clústeres que ejecutan Kubernetes 1.16 o anterior no admite el parámetro udpTimeout. Utilice Operation Orchestration Service (OOS) para ejecutar estos comandos de ipvsadm en lotes en todos los nodos del clúster:
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 ejecutar operaciones por lotes en OOS.
Pasos siguientes
Después de la actualización, optimize CoreDNS configurations para su carga de trabajo.
