CoreDNS 组件升级前,平台会自动执行预检,检测可能影响升级的配置问题。预检结果分为两个级别:
Fatal:阻断升级,必须处理后才能继续。
Warning:不阻断升级,建议处理;如确认无影响,可在升级时勾选“跳过 Warning”。
以下按需要修改的对象分类,说明各预检项的含义和处理方法。
Corefile 配置相关
以下预检项需要修改 CoreDNS 的 Corefile 配置。操作方式:
kubectl edit configmap coredns -n kube-system
1. Corefile 不存在(Fatal)
预检项:
Coredns_Corefile_Not_Exist说明:CoreDNS ConfigMap 中缺少
Corefile 配置项,升级无法继续。解决方案:确认 kube-system 命名空间下存在名为
coredns 的 ConfigMap,且包含 Corefile 字段。如缺失,需手动补充标准 Corefile 配置。2. Corefile 语法错误(Fatal)
预检项:
CoreDNS_Corefile_Format_Error说明:Corefile 内容存在语法错误,无法被正确解析。
解决方案:检查 Corefile 语法,常见问题包括花括号不匹配、缩进错误、指令拼写错误等。
3. 缺少 health 插件(Fatal)
预检项:
Coredns_Plugin_Health_Not_Exist说明:Corefile 中未配置
health 插件。CoreDNS 需要通过 health 插件提供健康检查端点,缺失会导致升级后 Pod 存活检查失败而被反复重启。解决方案:在 Corefile 的 server block 中添加
health 插件:.:53 {healthreadykubernetes cluster.local in-addr.arpa ip6.arpa {...}forward . /etc/resolv.conf...}
4. proxy 和 forward 插件共存(Fatal)
预检项:
Coredns_Plugin_Proxy_Forward_Coexist说明:同一个 server block 中同时配置了
proxy 和 forward 插件。新版 CoreDNS 已移除 proxy 插件,两者不能共存。解决方案:删除
proxy 配置,统一使用 forward:.:53 {- proxy . /etc/resolv.conf+ forward . /etc/resolv.conf}
5. rewrite 插件兼容性问题(Fatal)
预检项:
Coredns_Plugin_Rewrite_Compatibility_Issues说明:升级到 1.8.4 版本时,
rewrite 插件的语法发生了不兼容变更,当前配置需要调整。6. 上游 DNS 包含不可达地址(Fatal)
预检项:
Coredns_Plugin_Forward_Bad_Resolve_On_Node说明:CoreDNS 的上游 DNS 地址中包含
127.0.0.53。该地址是部分 Ubuntu 系统的本地 DNS 代理地址,在容器环境中不可达,会导致 DNS 转发失败。该地址可能来自 Corefile 中直接配置的上游,也可能来自节点 /etc/resolv.conf(当 Corefile 配置 forward . /etc/resolv.conf 时)。解决方案:在 Corefile 中将上游 DNS 改为显式指定可达的 DNS 服务器地址:
.:53 {- forward . /etc/resolv.conf+ forward . 183.60.83.19 183.60.82.98}
其中
183.60.83.19、183.60.82.98 为腾讯云公共 DNS 服务地址,也可替换为业务自有的 DNS 服务器。7. 上游 DNS 不支持 EDNS(Fatal)
预检项:
Coredns_Plugin_Forward_Upstream_Error说明:CoreDNS 配置的上游 DNS 服务器不支持 EDNS(DNS 扩展机制)。新版 CoreDNS 默认启用 EDNS,转发到不支持 EDNS 的上游会导致解析异常。
解决方案:在 Corefile 中将上游 DNS 改为支持 EDNS 的服务器:
.:53 {- forward . /etc/resolv.conf+ forward . 183.60.83.19 183.60.82.98}
8. health 插件 lameduck 超时过长(Warning)
预检项:
Coredns_Plugin_Health_LameDuck_Error说明:
health 插件的 lameduck 参数超过 30 秒,可能导致滚动更新时旧 Pod 退出缓慢,拖长升级耗时。解决方案:将 lameduck 调整为 30 秒以内:
health {lameduck 15s}
Deployment 配置相关
以下预检项需要修改 CoreDNS 的 Deployment 配置。操作方式:
kubectl edit deployment coredns -n kube-system
1. 容器名称不标准(Fatal)
预检项:
Coredns_Container_Not_Standard说明:CoreDNS Deployment 中不存在名为
coredns 的容器。平台通过该名称定位需要更新的容器,名称不匹配将无法执行升级。解决方案:将 CoreDNS 容器的
name 字段修改为 coredns。2. 存活探针配置不一致(Fatal)
预检项:
Coredns_LivenessProbe_Inconsistent说明:Deployment 中 LivenessProbe 的配置(端口、路径或协议)与 Corefile 中
health 插件的实际监听地址不匹配,会导致健康检查持续失败,Pod 被反复重启。解决方案:修改 Deployment 的 LivenessProbe,确保与 Corefile 中 health 插件的端口一致(默认 8080):
livenessProbe:httpGet:path: /healthport: 8080scheme: HTTP
3. 就绪探针配置不一致(Fatal)
预检项:
Coredns_ReadinessProbe_Inconsistent说明:Deployment 中 ReadinessProbe 的配置与 Corefile 中
ready 插件的实际监听地址不匹配。解决方案:修改 Deployment 的 ReadinessProbe,确保与 Corefile 中 ready 插件的端口一致(默认 8181):
readinessProbe:httpGet:path: /readyport: 8181scheme: HTTP
集群环境与组件相关
以下预检项涉及集群节点、Kubernetes 版本或 kube-proxy 组件等集群层面的配置。
1. 可调度节点不足(Fatal)
预检项:
CoreDNS_Insufficient_Cluster_Resources说明:集群中可调度节点数量不足(少于 2 个),无法保证升级过程中 CoreDNS 服务的连续性。如果集群包含超级节点(弹性容器),此项自动通过。
解决方案:
添加新节点到集群。
解除已有节点的调度封锁:
kubectl uncordon <node-name>2. 版本不兼容(Fatal)
预检项:
Coredns_Incompatible_Version说明:目标 CoreDNS 版本与当前集群环境存在兼容性约束:
约束条件 | 说明 |
CoreDNS ≥ 1.10.1 | 要求 Kubernetes 版本 ≥ 1.22.4 |
CoreDNS ≥ 1.11.0 | 不支持 Docker 作为容器运行时,需使用 containerd |
解决方案:
Kubernetes 版本过低:先升级集群版本
容器运行时不兼容:将运行时从 Docker 切换为 containerd
3. 非标准版本(Fatal)
预检项:
Coredns_Non-standard_Version说明:当前 CoreDNS 版本或目标版本不在平台支持的升级路径中。
平台支持的版本升级路径:
当前版本 | 可升级到 |
1.2.2 | 1.6.2 |
1.6.2 | 1.8.4、1.11.1、1.11.1-tke.1 |
1.7.0 | 1.8.4、1.11.1、1.11.1-tke.1 |
1.8.4 | 1.11.1、1.11.1-tke.1 |
1.8.5 | 1.11.1、1.11.1-tke.1 |
1.11.1 | 1.11.1-tke.1 |
跨多个版本时,平台会自动分步执行(例如 1.2.2 → 1.11.1 会依次经过 1.2.2 → 1.6.2 → 1.11.1)。
解决方案:如当前版本不在上述列表中,需先手动将 CoreDNS 镜像版本调整到支持的版本。
4. iptables 后端冲突(Fatal)
预检项:
Coredns_KubeProxy_Iptables_Backend_Warning说明:集群节点上同时存在 iptables-nft 和 iptables-legacy 两种后端的规则,会导致 Service 流量异常,可能影响 DNS 解析。
解决方案:将 kube-proxy 升级到已修复此问题的版本:
Kubernetes 版本 | 最低修复版本 |
1.14.x | v1.14.3-tke.33-rc2 |
1.16.x | v1.16.3-tke.42-rc2 |
1.18.x | v1.18.4-tke.49-rc1 |
1.20.x | v1.20.6-tke.52 |
1.22.x | v1.22.5-tke.33 |
1.24.x | v1.24.4-tke.24 |
≥ 1.26 | 所有版本已修复 |
5. 节点 DNS 配置不一致(Warning)
预检项:
Coredns_Plugin_Forward_Upstream_Inconsistent_Each_Node说明:集群各节点的
/etc/resolv.conf 中 nameserver 配置不一致。当 Corefile 配置 forward . /etc/resolv.conf 时,CoreDNS 在不同节点上的转发行为可能不同。解决方案:统一各节点的
/etc/resolv.conf 配置,或在 Corefile 中显式指定 DNS 服务器地址。也可确认风险后选择跳过。6. IPVS UDP 超时设置不合理(Warning)
预检项:
Coredns_KubeProxy_IPVS_Timeout_Warning说明:kube-proxy 使用 IPVS 模式时,
--ipvs-udp-timeout 未设置或超过 10 秒,可能导致 DNS 解析间歇性超时。解决方案:为 kube-proxy 配置启动参数
--ipvs-udp-timeout=10s,或确认风险后选择跳过。无需处理的预检项
以下预检项通常无需用户操作:
预检项 | 说明 |
Coredns_Cluster_Status | 集群状态异常(非 Running),等待集群恢复后重试即可。 |
Coredns_Cluster_APIServer | 平台无法连接集群 API Server,通常为平台侧问题,如持续出现请提交工单。 |
CoreDNS_Already_Update | 当前版本与目标版本一致,无需升级。 |
Coredns_KubeProxy_Binary_Warning | kube-proxy 为二进制部署,平台无法自动检查其配置,建议人工确认(Warning,可跳过)。 |
Coredns_Plugin_Forward_Upstream_Not_Subset_Metrics | CoreDNS 监控指标中出现非预期的上游 DNS 地址,通常为历史残留,一般无影响(Warning,可跳过)。 |