Mettez à jour CoreDNS manuellement lorsque l'option Upgrade n'est pas disponible sur la page Add-ons de la console ACK.
Prérequis
Assurez-vous de disposer des éléments suivants :
Notes relatives à la mise à jour
-
Si kube-proxy utilise le mode IP Virtual Server (IPVS), toutes les requêtes DNS peuvent échouer ou expirer pendant environ 5 minutes après la mise à jour de CoreDNS. Évitez ce problème en appliquant l'une des méthodes suivantes :
Modifiez le délai d'expiration de session UDP IPVS dans la configuration de kube-proxy. Consultez la section Configurer le délai d'expiration UDP pour un cluster IPVS.
Utiliser NodeLocal DNSCache afin d'optimiser la résolution DNS.
La mise à jour dure environ 2 minutes, selon le nombre de réplicas CoreDNS. Les réplicas existants ne sont pas arrêtés ; la résolution des services n'est donc pas affectée.
Interroger la version de CoreDNS
Console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
Sur la page Deployments, définissez Namespace sur kube-system et vérifiez la version de CoreDNS dans la colonne Image.

kubectl
Interrogez la version de CoreDNS :
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"
Sortie attendue :
registry-vpc.cn-hangzhou.aliyuncs.com/acs/coredns:1.6.2 # Version 1.6.2 is used in this example.
Confirmer la version de mise à jour
Le tableau suivant répertorie les versions de CoreDNS compatibles avec chaque version de Kubernetes. Utilisez la dernière version compatible.
Plage de versions Kubernetes | Versions CoreDNS |
1.11 à 1,16 | 1.6.2 (obsolète) |
1.14.8 à 1.22 | 1.6.7 (obsolète) et 1.7.0 |
1.20.4 et versions ultérieures | 1.8.4 et 1.9.3 Important Les versions v1.8.4 et v1.9.3 comportent plusieurs versions mineures, telles que |
1.21 et versions ultérieures | 1.11.3 |
Effectuer une mise à jour manuelle
Console
-
(Facultatif) Remplacez le champ
proxypar le champforward.Le plug-in Proxy a été déprécié dans CoreDNS v1.6.2. Si vous effectuez une mise à niveau depuis une version antérieure, modifiez la configuration CoreDNS comme suit.
-
Modifiez la version de l'image de CoreDNS.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
Sur la page Deployments, définissez Namespace sur kube-system. Recherchez coredns et choisissez dans la colonne Actions.
-
Dans la boîte de dialogue Edit YAML, modifiez le numéro de version dans le champ
imageet cliquez sur Update.
Dans la boîte de dialogue d'édition YAML, localisez la configuration du déploiement CoreDNS et confirmez la version de l'image dans le champ
image(par exemple,1.6.2). Extrait YAML clé :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: ...
-
Vérifiez la mise à jour.
-
Interrogez la version de CoreDNS :
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"Sortie attendue :
registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun -
Vérifiez que tous les pods CoreDNS sont dans l'état Running :
kubectl get pods -n kube-system | grep corednsSortie attendue :
coredns-78d4b8****-6g62w 1/1 Running 0 9d coredns-78d4b8****-n6wjm 1/1 Running 0 9d
-
kubectl
-
(Facultatif) Remplacez le champ
proxypar le champforward.Le plug-in Proxy a été déprécié dans CoreDNS v1.6.2. Si vous effectuez une mise à niveau depuis une version antérieure, modifiez la configuration CoreDNS comme suit.
-
Modifiez le numéro de version dans le champ
imagedu déploiement CoreDNS, puis enregistrez et quittez :kubectl edit deployment/coredns -n kube-system -
Vérifiez la mise à jour.
-
Interrogez la version de CoreDNS :
kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"Sortie attendue :
registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun -
Vérifiez que tous les pods CoreDNS sont dans l'état Running :
kubectl get pods -n kube-system | grep corednsSortie attendue :
coredns-78d4b8****-6g62w 1/1 Running 0 9d coredns-78d4b8****-n6wjm 1/1 Running 0 9d
-
Configurer le délai d'expiration UDP pour un cluster IPVS
Si votre cluster utilise kube-proxy en mode IPVS, réduisez le délai d'expiration de persistance de session UDP IPVS à 10 secondes afin de limiter les échecs DNS après la mise à niveau.
Si votre cluster exécute des services basés sur UDP, évaluez l'impact de la réduction du délai d'expiration UDP avant de poursuivre.
Kubernetes 1.18 ou version ultérieure
Utilisation de la console
Connectez-vous à la console ACK et cliquez sur Clusters dans le volet de navigation de gauche.
Sur la page Clusters, cliquez sur le nom du cluster. Choisissez Configurations > ConfigMaps dans le volet de navigation de gauche.
Sur la page ConfigMaps, sélectionnez le namespace kube-system, recherchez kube-proxy-worker et cliquez sur Edit YAML dans la colonne Actions.
-
Dans le panneau Edit YAML, ajoutez
udpTimeout: 10ssous le champipvset cliquez sur 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 -
Recréez tous les pods kube-proxy-worker.
Sur la page des détails du cluster, choisissez Workloads > DaemonSets dans le volet de navigation de gauche.
Dans la liste DaemonSet, cliquez sur kube-proxy-worker.
Sur la page kube-proxy-worker, cliquez sur l'onglet Pods. Pour chaque pod, choisissez More > Delete et cliquez sur OK. Le système les recrée automatiquement.
-
Vérifiez la configuration du délai d'expiration UDP.
-
Installez
ipvsadm:sudo yum install -y ipvsadm -
Sur n'importe quel nœud ECS du cluster, exécutez :
sudo ipvsadm -L --timeoutSi le troisième chiffre de la sortie est
10, le délai d'expiration UDP est correctement configuré.Important: Après avoir configuré le délai d'expiration, attendez au moins cinq minutes avant de mettre à niveau CoreDNS.
-
Utilisation de la ligne de commande
-
Modifiez le ConfigMap kube-proxy-worker :
kubectl -n kube-system edit configmap kube-proxy-worker -
Ajoutez
udpTimeout: 10ssous le champipvs, puis enregistrez et quittez.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 -
Recréez tous les pods kube-proxy-worker.
-
Répertoriez les pods kube-proxy-worker :
kubectl -n kube-system get pod -o wide | grep kube-proxy-worker -
Supprimez chaque pod. Le système les recrée automatiquement.
kubectl -n kube-system delete pod <kube-proxy-worker-****>Remplacez
<kube-proxy-worker-****>par les noms des pods obtenus à l'étape précédente.
-
-
Vérifiez la configuration du délai d'expiration UDP.
-
Installez
ipvsadm:sudo yum install -y ipvsadm -
Sur n'importe quel nœud ECS du cluster, exécutez :
sudo ipvsadm -L --timeoutSi le troisième chiffre de la sortie est
10, le délai d'expiration UDP est correctement configuré.Important: Après avoir configuré le délai d'expiration, attendez au moins cinq minutes avant de mettre à niveau CoreDNS.
-
Kubernetes 1.16 ou version antérieure
kube-proxy dans les clusters exécutant Kubernetes 1.16 ou une version antérieure ne prend pas en charge le paramètre udpTimeout. Utilisez Operation Orchestration Service (OOS) pour exécuter ces commandes ipvsadm par lots sur tous les nœuds du 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
Consultez la rubrique Instances d'opération par lot pour exécuter des opérations par lots dans OOS.
Étapes suivantes
Après la mise à jour, optimisez les configurations CoreDNS pour votre charge de travail.
