fabric8 API操作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

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/610129

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。