springcloud版本:2024.0.2

当从k8s的configMap加载属性时,出现告警:

WARN [gateway] 73783 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : The current number of PropertySources does not match the ones loaded from Kubernetes - No reload will take place

对应的源码:
类:org.springframework.cloud.kubernetes.commons.config.reload.ConfigReloadUtil.java:183

static boolean changed(List<? extends MapPropertySource> k8sSources, List<? extends MapPropertySource> appSources) {

		if (k8sSources.size() != appSources.size()) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("k8s property sources size: " + k8sSources.size());
				k8sSources.forEach(item -> LOG.debug(item.toString()));

				LOG.debug("app property sources size size: " + appSources.size());
				appSources.forEach(item -> LOG.debug(item.toString()));
			}
			LOG.warn(() -> "The current number of PropertySources does not match "
					+ "the ones loaded from Kubernetes - No reload will take place");
			return false;
		}
		...
}

从代码可以看出,k8s上配置和属性和app上对应的属性数量不一致。
也可以看出,把日志级别改为“DEBUG”,会打印详细属性列表。

在application.yml中添加日志配置:

spring:
  logging:
    level:
      org.springframework.cloud.kubernetes.commons.config.reload.ConfigReloadUtil: debug

重新启动app,出现日志:

2025-12-09T10:58:16.581+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : sources from locateMapPropertySources : [KubernetesClientConfigMapPropertySource {name='configmap.gateway-route-config.dev'}, KubernetesClientConfigMapPropertySource {name='configmap.gateway-config.dev'}]
2025-12-09T10:58:16.581+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : k8s property sources size: 2
2025-12-09T10:58:16.581+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : KubernetesClientConfigMapPropertySource {name='configmap.gateway-route-config.dev'}
2025-12-09T10:58:16.581+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : KubernetesClientConfigMapPropertySource {name='configmap.gateway-config.dev'}
2025-12-09T10:58:16.582+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : app property sources size size: 4
2025-12-09T10:58:16.582+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : KubernetesClientSecretsPropertySource {name='secret.db-secret.dev'}
2025-12-09T10:58:16.582+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : KubernetesClientSecretsPropertySource {name='secret.token-secrets.dev'}
2025-12-09T10:58:16.582+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : KubernetesClientConfigMapPropertySource {name='configmap.gateway-route-config.dev'}
2025-12-09T10:58:16.582+08:00 DEBUG [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : KubernetesClientConfigMapPropertySource {name='configmap.gateway-config.dev'}
2025-12-09T10:58:16.582+08:00  WARN [gateway] 74651 --- [gateway] [ool-15-thread-1] o.s.c.k.c.c.reload.ConfigReloadUtil      : The current number of PropertySources does not match the ones loaded from Kubernetes - No reload will take place

对比可知,代码中的“k8sSources”是指从k8s上获取到配置文件,“appSources”是指在微服务中的yml文件中配置了文件,而微服务上配置的数量比k8s上能获取到的多,故而出现这个告警。

解决方法:

  1. 在k8s上配置上缺少的配置文件。
  2. 删除微服务上多余的配置

更多推荐