fabric8 API操作ConfigMap

简介:         ConfigMap用来保存key-value pair配置数据,数据可以在pod容器中挂载. 可以简单理解为Linux系统中的/etc目录,用来存储配置文件的目录。这里以将ConfigMap数据作为容器内配置文件举例.
        ConfigMap用来保存key-value pair配置数据,数据可以在pod容器中挂载. 可以简单理解为Linux系统中的/etc目录,用来存储配置文件的目录。这里以将ConfigMap数据作为容器内配置文件举例. 本例中,  ConfigMap挂载到容器后, 其每一个item会成为挂载目录下的一个文件, key为文件名, 文件内容是key对应的值. 

          前台UI如下:
5b4d5d3e8587a5a98d17783cfdddb1121a9d6570
          添加ConfigMap内容:
8ed019387446025320cdb62c6ff0e7bccdd642ed
          点击保存, 将键值对数据以map方式传入后台, 构建ConfigMap对象并进行创建:
          构建对象:
	/**
	 * 构建ConfigMap对象
	 * @param ku8ConfigMap
	 */
	public void createConfigMap(Ku8ConfigMap ku8ConfigMap) {
		k8sAPIService.createConfigMap(
				ku8ConfigMap.getNamespace(), 
				new ConfigMapBuilder()
					.withKind("ConfigMap")
					.withApiVersion("v1")
					.withNewMetadata()
						.withName(ku8ConfigMap.getName())
						.withNamespace(ku8ConfigMap.getNamespace())
					.endMetadata()
					.withData(ku8ConfigMap.getData())
					.build()
		);
	}

          创建对象:
	/**
	 * 创建ConfigMap
	 * @param namespace
	 * @param configMap
	 * @return
	 */
	public ConfigMap createConfigMap(String namespace, ConfigMap configMap) {
		return getClient().configMaps().inNamespace(namespace).create(configMap);
	}

          Ku8ConfigMap实体如下:
package com.***.entity;

import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;

@XmlRootElement
public class Ku8ConfigMap implements Serializable {

	private static final long serialVersionUID = -2929072646302058679L;

	private Integer configMapId;
	private String name;
	private Integer namespaceId;
	private Date createTime;
	private Date updateTime;
	private Map<String, String> data;
	private String namespace;
	
	public Integer getConfigMapId() {
		return configMapId;
	}

	public void setConfigMapId(Integer configMapId) {
		this.configMapId = configMapId;
	}

	public Integer getNamespaceId() {
		return namespaceId;
	}

	public void setNamespaceId(Integer namespaceId) {
		this.namespaceId = namespaceId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public Date getUpdateTime() {
		return updateTime;
	}

	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}

	public Map<String, String> getData() {
		return data;
	}

	public void setData(Map<String, String> data) {
		this.data = data;
	}

	public String getNamespace() {
		return namespace;
	}

	public void setNamespace(String namespace) {
		this.namespace = namespace;
	}
}

         在kubernetes集群查看ConfigMap创建结果:
d872759f8ccc9776a0161e178b993a5aca814e6c

          创建Deployment时, 挂载ConfigMap:

c673f007c4ab8ef00c2609067cb272b9666dac8c

          后端操作:
		   // 遍历需要挂载的ConfigMap列表
                   for (VolumeDto confMap : ku8ConfMapArray) {
			ConfigMap f8ConfigMap = k8sAPIService.getConfigMapByName(namespace, confMap.getName());

			if (f8ConfigMap == null) {
				throw new BusinessException("cant find configMap:" + confMap.getName());
			}

			for (Container f8Container : f8Containers) { // 遍历需要创建的容器
				List<VolumeMount> f8VolumeMounts = f8Container.getVolumeMounts();

				if (f8VolumeMounts == null) {
					f8VolumeMounts = new ArrayList<VolumeMount>();
				}
                               // 在容器中挂载ConfigMap
				VolumeMount f8VolumeMount = new VolumeMountBuilder().withName(confMap.getName()).withMountPath(confMap.getPath()).build();

				f8VolumeMounts.add(f8VolumeMount);
				f8Container.setVolumeMounts(f8VolumeMounts);
			}

			// 将ConfigMap挂载为pod的一个volume
			List<KeyToPath> f8KeyToPathList = new ArrayList<KeyToPath>();
			f8ConfigMap.getData().forEach((k, v) -> f8KeyToPathList.add(new KeyToPathBuilder().withKey(k).withPath(k).build())); // key既为键名称又作为挂载结果的文件名称
			Volume f8Volume = new VolumeBuilder().withName(confMap.getName()).withNewConfigMap().withName(confMap.getName()).withItems(f8KeyToPathList).endConfigMap().build();
			
			f8Volumes.add(f8Volume);
		}

         查看创建成功的pod:

46bc4457e0a1ff6fbeb27a2ad910fcc1b76849ae

          查看 ConfigMap 挂载结果:
d15085b2218965bb90cfc0a0dda16ec81ee3f460

目录
相关文章
|
28天前
|
Java API Maven
HDFS的API操作
HDFS的API操作
25 0
|
2月前
|
API
Poi 中文API文档 「40种操作 Excel文件的姿势」
Poi 中文API文档 「40种操作 Excel文件的姿势」
116 0
|
3月前
|
JSON API 数据格式
在钉钉开放平台中,创建或更新OA审批表单模板需要通过API接口进行操作
在钉钉开放平台中,创建或更新OA审批表单模板需要通过API接口进行操作【1月更文挑战第20天】【1月更文挑战第97篇】
47 1
|
4月前
|
Java API
java 操作es api
java 操作es api
42 0
|
4月前
|
SQL Java API
Java 8:Stream API 流式操作
Java 8:Stream API 流式操作
52 0
|
5月前
|
Linux 程序员 API
LINUX系统API---操作目录
LINUX系统API---操作目录
49 0
|
4月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
82 0
|
4月前
|
XML Java 数据库连接
MyBatis深入探索:原生API与注解方式实现CRUD操作
MyBatis深入探索:原生API与注解方式实现CRUD操作
66 0
|
4月前
|
安全 大数据 API
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
62 0
|
3月前
|
测试技术 API 数据安全/隐私保护
『App自动化测试之Appium应用篇』| Appium常用API及操作
『App自动化测试之Appium应用篇』| Appium常用API及操作
72 1