K8s运行SCDF任务时如何挂载keystore并注入配置
SCDF K8s环境下ConfigMap/Secret注入支持说明
Spring Cloud Data Flow(SCDF)在Kubernetes运行时完全支持从ConfigMap、Secret注入配置,也支持将其中存储的文件(如PKCS12格式的Kafka keystore)挂载到任务Pod内,无需修改业务应用代码,通过SCDF标准的部署属性配置即可实现。
配置方式说明
你之前使用的app.<应用名>.*前缀是用来传递Spring Boot应用配置的,涉及K8s层的卷、环境变量注入,需要使用deployer.<应用名>.kubernetes.*前缀的部署属性。
1. 挂载Secret/ConfigMap中的文件(适用于keystore证书场景)
如果需要把Secret中存储的keystore文件挂载到容器内指定路径,配置示例如下:
# 声明关联K8s中的Secret作为存储卷 deployer.my-app-name.kubernetes.volumes=[{name: kafka-certs-vol, secret: {secretName: kafka-client-keystore}}] # 将存储卷挂载到容器内目标路径 deployer.my-app-name.kubernetes.volumeMounts=[{name: kafka-certs-vol, mountPath: /etc/kafka/ssl}]
如果要挂载ConfigMap中的文件,只需将卷定义中的secret字段替换为configMap即可:
deployer.my-app-name.kubernetes.volumes=[{name: app-conf-vol, configMap: {name: my-app-config-files}}] deployer.my-app-name.kubernetes.volumeMounts=[{name: app-conf-vol, mountPath: /etc/app/config}]
挂载完成后,你可以直接在原有应用配置中补全keystore的容器内路径,完整配置参考:
app.my-app-name.spring.kafka.bootstrap-servers=kafka-host:443 app.my-app-name.spring.kafka.security.protocol=SSL app.my-app-name.spring.kafka.ssl.keystore.location=/etc/kafka/ssl/keystore.p12 app.my-app-name.spring.kafka.ssl.keystore.password=password app.my-app-name.spring.kafka.ssl.key.password=password
2. 直接注入键值对配置为环境变量
如果不需要挂载文件,仅需要把Secret/ConfigMap中的键值对注入为容器环境变量(可被Spring Boot自动识别绑定),可以使用更简化的配置:
# 注入Secret中所有键值对为环境变量 deployer.my-app-name.kubernetes.envVarsSecret=kafka-client-keystore # 注入ConfigMap中所有键值对为环境变量 deployer.my-app-name.kubernetes.configMapName=my-app-config
注意事项
- 上述配置对SCDF的Task(任务)、Stream应用均生效,无需修改SCDF服务端全局配置,在单任务启动时按需传递即可。
- 卷挂载规则和原生K8s完全一致,如果需要避免覆盖挂载路径下的原有文件,可以在
volumeMounts配置中增加subPath字段指定单个文件的挂载路径。
内容的提问来源于stack exchange,提问作者Rens Verhage
相关产品推荐
相关产品推荐

