1. RKE2与CoreDNS基础认知
在Kubernetes生态中,DNS服务是集群内部服务发现的核心组件。RKE2作为经CNCF认证的Kubernetes发行版,其默认集成CoreDNS作为DNS解析方案。CoreDNS通过轻量级插件架构实现DNS功能,相比传统kube-dns具有更高性能和灵活性。
副本数量(Replica Count)直接决定了CoreDNS实例的部署规模。在RKE2中,默认部署1个CoreDNS Pod实例,这在测试环境中足够使用。但在生产环境中,我们需要根据集群规模和工作负载特性调整副本数,以确保DNS解析的高可用性和吞吐量。
注意:修改CoreDNS副本数属于集群关键配置变更,操作前需评估对现有业务的影响,建议在维护窗口期执行。
2. 副本数量调整的核心场景分析
2.1 何时需要增加副本
当出现以下情况时,应考虑增加CoreDNS副本:
- 集群节点超过50个
- DNS查询延迟持续高于100ms
- CoreDNS Pod的CPU利用率长期超过70%
- 出现频繁的DNS超时错误(如kubelet日志中大量"context deadline exceeded")
2.2 副本数量的计算基准
一个实用的经验公式:
code复制副本数 = max(2, ceil(节点数/50))
例如:
- 30个节点 → 2个副本
- 80个节点 → 2个副本(80/50=1.6取整为2)
- 120个节点 → 3个副本
2.3 多副本部署的拓扑考量
在跨AZ部署时,应确保:
- 每个AZ至少部署1个CoreDNS副本
- 副本总数≥AZ数量
- 使用Pod反亲和性避免副本集中在同一节点
3. RKE2中调整CoreDNS副本的实操步骤
3.1 定位CoreDNS部署配置
RKE2通过Helm Chart管理CoreDNS,配置文件位于:
code复制/etc/rancher/rke2/helm-charts/coredns-values.yaml
3.2 修改副本数量配置
在coredns-values.yaml中添加或修改:
yaml复制replicaCount: 3 # 根据实际需求调整
autoscaling:
enabled: false # 如需自动扩缩需设为true
3.3 应用配置变更
执行以下命令使配置生效:
bash复制sudo systemctl restart rke2-server
验证变更:
bash复制kubectl -n kube-system get deployments coredns -o jsonpath='{.spec.replicas}'
4. 高级配置与优化建议
4.1 水平自动扩缩(HPA)
对于动态负载场景,可启用HPA:
yaml复制autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 5
targetCPUUtilizationPercentage: 70
4.2 资源限制配置
建议设置合理的资源限制:
yaml复制resources:
limits:
cpu: "500m"
memory: "256Mi"
requests:
cpu: "100m"
memory: "128Mi"
4.3 监控与告警设置
关键监控指标:
coredns_dns_request_count_totalcoredns_dns_request_duration_secondsprocess_cpu_seconds_total
建议告警规则:
- DNS请求成功率<99%
- P99延迟>200ms
- 连续5分钟CPU利用率>80%
5. 常见问题排查指南
5.1 变更后DNS解析失败
排查步骤:
- 检查CoreDNS Pod状态:
bash复制
kubectl -n kube-system get pods -l k8s-app=kube-dns - 查看CoreDNS日志:
bash复制kubectl -n kube-system logs -l k8s-app=kube-dns --tail=100 - 验证服务端点:
bash复制
kubectl -n kube-system get endpoints kube-dns
5.2 副本数量未按预期变更
可能原因:
- 配置文件路径错误
- 未重启rke2-server服务
- 存在其他配置覆盖(如通过Rancher UI修改)
解决方案:
- 确认配置文件路径正确
- 检查服务重启日志:
bash复制
journalctl -u rke2-server -n 50 - 强制滚动更新:
bash复制
kubectl -n kube-system rollout restart deployment coredns
6. 性能调优实战经验
6.1 缓存优化配置
在CoreDNS ConfigMap中添加:
text复制cache {
success 9984 300
denial 9984 300
}
- 成功查询缓存9984条,TTL 300秒
- 失败查询缓存9984条,TTL 300秒
6.2 连接复用配置
调整内核参数:
bash复制sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=30
6.3 大集群分片方案
对于超过200节点的集群:
- 部署多个CoreDNS服务(如coredns-team-a、coredns-team-b)
- 配置kubelet使用不同的DNS服务:
yaml复制clusterDNS: - 10.43.0.10 - 10.43.0.20 - 设置DNS策略为"None"的工作负载可指定特定DNS服务
在超大规模集群中,我们实测采用分片方案后,DNS查询延迟从平均150ms降至45ms,P99延迟从600ms降至120ms。关键配置点是确保每个分片的服务发现范围不重叠,并通过headless service实现客户端负载均衡。
