当前位置: 首页 > news >正文

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

相关文章:

  • iview Table组件渲染操作按钮, render 渲染icon图标更改方法
  • Day4Linux命令规则
  • 大聊Python----IO口多路复用
  • Odoo 自定义Widgets 基础教程(章节2)
  • 线程、对称多处理和微内核(OS 笔记三)
  • js中写文档write和innerHTML的区别
  • React 16 Jest ES6 Class Mocks(使用ES6语法类的模拟) 实例二
  • 拉格朗日乘子
  • FE协同中流程无法提交
  • 《大道至简》读后感
  • mui集成微信H5支付(返回白屏问题已经解决)
  • JVM学习笔记二:内存结构规范
  • React Native中获取屏幕的宽高、分辨率
  • POI技术
  • 微信公众号之模板消息使用
  • ECMAScript入门(七)--Module语法
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java面向对象及其三大特征
  • Java应用性能调优
  • js ES6 求数组的交集,并集,还有差集
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python爬虫--- 1.3 BS4库的解析器
  • Service Worker
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • uva 10370 Above Average
  • Vue官网教程学习过程中值得记录的一些事情
  • 简单易用的leetcode开发测试工具(npm)
  • 解决iview多表头动态更改列元素发生的错误
  • 使用Gradle第一次构建Java程序
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​用户画像从0到100的构建思路
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #QT(智能家居界面-界面切换)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (篇九)MySQL常用内置函数
  • (算法)Game
  • (转)【Hibernate总结系列】使用举例
  • (转载)hibernate缓存
  • *2 echo、printf、mkdir命令的应用
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net FrameWork简介,数组,枚举
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET命令行(CLI)常用命令
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /proc/stat文件详解(翻译)
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [Android] Amazon 的 android 音视频开发文档
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [AR]Vumark(下一代条形码)