在 spring 引导应用程序中获取 k8s 命名空间?
Get k8s namespace inside spring boot application?
我在 k8s 集群中部署了一个 spring 启动应用程序(服务集)。对于 micromter 指标,我需要动态获取此应用程序运行的名称空间,以便我可以将其作为标签添加到指标中。以下是我的自定义标签创建 bean
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return registry -> {
String hostname = getHostName();
registry.config().commonTags(TAG_NAME_INSTANCE,hostname);
final String applicationName = environment.getProperty(SPRING_BOOT_APPLICATION_NAME_PROPERTY_KEY);
registry.config().commonTags(TAG_NAME_APPLICATION, applicationName);
registry.config().commonTags(TAG_NAME_APP, applicationName);
registry.config().commonTags(TAG_NAME_KUBE_NAME_SPACE, getKubeNamespace());
};
}
当前 getKubeNamespace
return 硬编码值。我怎样才能得到这个 pod 是哪个命名空间 运行?
Kubernetes 具有访问此类字段的功能,称为 Downward API 。
在 Downward API 的帮助下,可以通过在 pod 的定义中定义环境变量来访问 pod 的命名空间,如下所示:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
之后可以读取环境变量Spring:
@Value("${NAMESPACE}")
private String namespace;
我在 k8s 集群中部署了一个 spring 启动应用程序(服务集)。对于 micromter 指标,我需要动态获取此应用程序运行的名称空间,以便我可以将其作为标签添加到指标中。以下是我的自定义标签创建 bean
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return registry -> {
String hostname = getHostName();
registry.config().commonTags(TAG_NAME_INSTANCE,hostname);
final String applicationName = environment.getProperty(SPRING_BOOT_APPLICATION_NAME_PROPERTY_KEY);
registry.config().commonTags(TAG_NAME_APPLICATION, applicationName);
registry.config().commonTags(TAG_NAME_APP, applicationName);
registry.config().commonTags(TAG_NAME_KUBE_NAME_SPACE, getKubeNamespace());
};
}
当前 getKubeNamespace
return 硬编码值。我怎样才能得到这个 pod 是哪个命名空间 运行?
Kubernetes 具有访问此类字段的功能,称为 Downward API 。
在 Downward API 的帮助下,可以通过在 pod 的定义中定义环境变量来访问 pod 的命名空间,如下所示:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
之后可以读取环境变量Spring:
@Value("${NAMESPACE}")
private String namespace;