问题
更改为 后quarkus.package.type
,fast-jar
我们 Kubernetes 集群上的应用程序实例无法再读取已挂载的 ConfigMap。
2022-02-17 14:39:45,155 WARN [com.example.MyStartupService] (main)
Config param is not defined and might be missing: foo.bars
本地配置没有问题,但我们也没有挂载它 - 只是有一个 static application.yml
。在此更改之前一切正常,我们可以直接将其跟踪到quarkus.package.type
.
我们的设置
首先也是最重要的:我们不使用 a application.properties
,而是使用 a application.yml
(利用quarkus-config-yaml
)。
我们正在使用 Quarkus 2.7.1.Final
。
Java 代码
@ConfigMapping(prefix = CONFIG_PREFIX)
public interface FooBarConfigMapping {
String CONFIG_PREFIX = "foo";
String CONFIG_NAME = "bars";
String CONFIG_PARAM = String.join(".", CONFIG_PREFIX, CONFIG_NAME);
@WithName(CONFIG_NAME)
List<BarConfig> barConfigurations();
interface BarConfig {
@WithName("name")
String name();
}
}
@ApplicationScoped
public class MyStartupService {
@Inject
FooBarConfigMapping fooBarConfigMapping;
@Transactional
void startup(@Observes @Priority(2501) StartupEvent event) {
if (fooBarConfigMapping.barConfigurations().isEmpty()) {
LOGGER.debug("Config param is not defined and might be missing: " + FooBarConfigMapping.CONFIG_PARAM);
}
// do something with fooBarConfigMapping.barConfigurations()
}
}
部署
我们的 application-config.yaml (ConfigMap):
apiVersion: v1
kind: ConfigMap
metadata:
name: application-configmap
# ...
data:
application.yml: |
foo:
bars:
-
name: A
-
name: B
-
name: C
我们的 deployment.yaml(部署):
apiVersion: apps/v1
kind: Deployment
metadata:
# ...
spec:
# ...
template:
# ...
spec:
# ...
containers:
# ...
volumeMounts:
- name: application-config
mountPath: /config
volumes:
- name: application-config
configMap:
name: application-configmap
杂项
我找不到任何好的信息,在读取配置之间可能发生了什么
legacy-jar
变化fast-jar
。也许它与不同的结构有关(如此处所示)。对我来说,这可能是最可能的错误来源。1.1。我尝试将挂载路径从更改
/config
为/usr/local/apps/config
(遵循此SmallRye ConfigMap 示例),但无济于事。1.2. 我也尝试将挂载的文件从 to 重命名
application.yml
,application.yaml
但结果相同。