求助:如何使用K8s Client从properties文件创建ConfigMap
解决方案
1. 将Properties文件转换为Map<String, String>
先把你的application.properties文件内容加载成Map<String, String>,用Java原生Properties类就能实现:
import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import java.util.Map; import java.util.stream.Collectors; // 加载文件到Properties实例 Properties properties = new Properties(); try (FileInputStream fis = new FileInputStream(yourFileObject)) { properties.load(fis); } catch (IOException e) { // 按需处理IO异常,比如打印日志或抛出自定义异常 e.printStackTrace(); } // 转换为ConfigMap需要的Map格式 Map<String, String> configData = properties.entrySet().stream() .collect(Collectors.toMap( entry -> entry.getKey().toString(), entry -> entry.getValue().toString() ));
2. 使用ConfigMapBuilder创建ConfigMap
拿到转换后的Map后,直接传入ConfigMapBuilder即可构建ConfigMap对象:
import io.kubernetes.client.openapi.models.V1ConfigMap; import io.kubernetes.client.openapi.models.V1ConfigMapBuilder; import io.kubernetes.client.openapi.models.V1ObjectMeta; V1ConfigMap configMap = new V1ConfigMapBuilder() .withMetadata(new V1ObjectMeta() .name("app-config") // 自定义ConfigMap名称 .namespace("default")) // 指定所属命名空间 .withData(configData) // 传入配置Map .build();
如果需要逐个添加配置项,也可以用addToData方法:
new V1ConfigMapBuilder() .withMetadata(...) .addToData("propertyOne", "Something_One") .addToData("propertyTwo", "Something_Two") .build();
3. 将ConfigMap关联到Pod的环境变量
用EnvFromSourceBuilder把ConfigMap关联到容器的环境变量来源:
import io.kubernetes.client.openapi.models.V1Container; import io.kubernetes.client.openapi.models.V1ContainerBuilder; import io.kubernetes.client.openapi.models.V1EnvFromSource; import io.kubernetes.client.openapi.models.V1EnvFromSourceBuilder; import io.kubernetes.client.openapi.models.V1PodSpec; import io.kubernetes.client.openapi.models.V1PodSpecBuilder; // 构建指向目标ConfigMap的环境变量来源 V1EnvFromSource configMapEnvSource = new V1EnvFromSourceBuilder() .withConfigMapRef(new V1ConfigMapEnvSourceBuilder() .withName("app-config") // 对应之前创建的ConfigMap名称 .build()) .build(); // 构建容器并关联ConfigMap V1Container container = new V1ContainerBuilder() .name("your-app-container") .image("your-app-image") .addEnvFromItem(configMapEnvSource) // 将ConfigMap配置注入容器环境变量 .build(); // 整合到PodSpec中 V1PodSpec podSpec = new V1PodSpecBuilder() .addContainersItem(container) .build();
内容的提问来源于stack exchange,提问作者Parneet Raghuvanshi
相关产品推荐
相关产品推荐

