写点什么

Kubernetes 1.2 新功能解析:ConfigMap (下)

  • 2020-03-13
  • 本文字数:2053 字

    阅读完需:约 7 分钟

Kubernetes 1.2 新功能解析:ConfigMap (下)

Kubernetes 1.2 版本添加了一个叫 ConfigMap 的新功能。这个功能提供给容器注入应用程序数据的方式。注入配置文件对于大部分应用程序来说很强大,但是新的 ConfigMap 功能不仅可以在容器开启时提供初始配置功能,还有在容器运行时更新自身配置的功能。在这篇帖子里,我将会给大家展示如何编写微服务来利用更新好的配置,并且在 fly 上面重构你的 service。


让我们来看看监控配置文件变化的简单网页 app 是怎么样的。




这个 app 有趣部分是 ConfigManager 和 WatchFile.


ConfigManager 的工作就是提供访问我们的 Config{}的路径结构,这样的话当 Kubernetes ConfigMap 给我们一个新的配置文件版本或者我们更新 Config{} 对象时候,竞争冲突不存在。


WatchFile 的工作就是为作出的修改查看我们的配置文件,并且运行读取配置文件的新版本回调函数,使用 ConfigManager 设置新的 Config{} 。


让我们看一下 ConfigManager 的安装启用。



这里是我们使用一个简单的 Mutex 用来避免竞争冲突的例子。通常你想要避免使用 Mutex,然后使用建立在 channel 里面的 golang。但是既然管理员的工作是保护配置对象的实例,那么使用 Mutex 也还是可以接受的。


怀着好奇心,我创建了一个这个对象的 golang channel 安装启用,然后运行一些基准点。你可以点击找到代码和基准点测试。



Mutex 版本没有死锁的风险,很高效。


而 FileWatcher 的实施会较复杂一点。它的目标是使任意额外的 fsnotify events 成为一个单独更新的 event,这样我们只要执行一次回调函数。查看完整代码请点击这里


有意思的部分是 run()函数执行在线程中,然后运行回调函数。



你可能会觉得代码应该寻找 fsnotify.Writeevents 而不是 fsnotify.Remove,然而……ConfigMap 所呈现给应用程序的配置文件事实上是一个连接到我们配置文件的符号链接,而不是一个文件。当 ConfigMap 更新时,Kubernetes AtomicWriter()就可以实现强大的 ConfigMap 更新。


为了做到这样,AtomicWriter()创建了一个新的目录;编写更新好的 ConfigMap 内容到新的目录。一旦编写完成,那么它就会移动原始配置文件符号链接,然后用新的指向最新创建目录符号链接替换它。


我们的代码处理方式理论上应该是监控我们的配置文件符号链接,而不是为 events 的真实文件。然而,fsnotify.v1 并不允许我们提交 IN_DONT_FOLLOW 标志到 inotify,inotify 允许我们为修改监控符号链接。但是 fsnotify 取消引用符号链接,然后为 events 监控真实文件。这不太可能作出修改,因为 fsnotify 是为跨平台设计的,而且不是所有的平台都支持符号链接。


我继续使用 fsnotify 函数库,因为对于我来说,用它在 osx 上开发,在容器上部署都比较方便。以 Linux 为中心的实施应该直接使用"golang.org/x/exp/inotify"数据库。


现在我们有了我们的代码,我们可以创建一个 Docker 镜像然后更新到 Docker hub,为部署在我们 Kubernetes 集群做好准备。



假设你已经建立起了一个 Kubernetes 集群;让我们来创建一个 ConfigMap 配置,然后用我们的容器来使用它。

创建 ConfigMap

首先,我们创建一个密钥清单文件



这个定义了一个新的叫做 configmap-microservice-demo 的 ConfigMap,它包括了 data:配置文件名字叫做 configmap-microservice-demo.yaml


它的内容是 message: Hello World。


使用 kubectl 来创建 ConfigMap。



你可以检测到最新的创建好的 ConfigMap



接下来我们来定义一个 Replication Controller 密钥清单来运行我们的应用程序容器。



有趣的地方就是 volumes:和 volumeMounts:,这两者告诉运行在节点上的 kubelet 哪里可以安装我们的配置文件。当我们的容器运行的时候;数据卷插件会在我们的容器中安装一个叫做/etc/config 的目录,然后在这里面替换我们的配置文件 configmap-microservice-demo.yaml。


从我们的容器观点角度看,我们的配置文件完整途径将会是:/etc/config/configmap-microservice-demo.yaml


现在让我们来创建 Replication Controller。



我们现在可以检查我们正在运行的 pods 来寻找我们新 pod 的 IP 地址。



现在如果你登录到我们集群中的一个节点,我们在集群里可以用 pod 的 IP 地址从任何地方来访问应用程序。



如果这个部分让你很困惑,你可以点击这篇博客(http://www.dasblinkenlichten.com/kubernetes-101-networking/),它对于Kubernetes网络是如何运行的有很深层次的指导意义。这个是官方文档(http://kubernetes.io/docs/admin/networking/)。

更新 ConfigMap

现在为了有趣的部分,让我们来更新我们的配置,部署修改到 ConfigMap。


让我们打开原始的 ConfigMap 密钥清单文件,然后修改我们的 message: Hello World 到 message:Hello Grandma。



用我们更新的版本替代目前的 ConfigMap



我们可以验证到,通过在 configmap 资源上执行 get,更新很成功。



我们的应用程序很快得到了更新后的配置,我们可以通过看日志就来验证。



现在我们可以在集群里面 curl 我们的应用程序,我们应该看到更新的配置反应在我们的应用程序里。



本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/GXia-Lyc7NdfZJTCGU7iQg


2020-03-13 17:25770

评论

发布
暂无评论
发现更多内容

小微企业是什么意思?如何认定?

行云管家

信息安全 小微企业 小微企业认定

技术同学如何提高职场话语权

老张

话语权 职场影响力

面对本地缓存和分布式缓存,我们该如何选择?

鬼知道我经历什么,从Java外包到了阿里P7,没想到我也有今天

Java你猿哥

Java Spring Boot JVM java面试 Java八股文

低代码为什么需要专业代码

牛刀专业低代码

精品!阿里P8爆款《SpringBoot+vue全栈开发实战项目》笔记太香了

Java 架构 Spring Boot Vue 前后端分离

行走的Offer收割机!首次公布Java10W字面经,Github访问量破百万

Java java面试 Java八股文 Java面试题 Java面试八股文

真香! GitHub大牛呕心沥血整理的5000页Java学习手册

Java你猿哥

Java MySQL redis Spring Boot java基础

KubeEdge在边缘计算领域的安全防护及洞察

华为云开发者联盟

开源 边缘计算 华为云 华为云开发者联盟 企业号 5 月 PK 榜

学习java没规划?2023最新路线图,大堆资源秒变大神

Java你猿哥

Java 数据库 前端 后端 java基础

QUIC在京东直播的应用与实践 | 京东云技术团队

京东科技开发者

直播 直播技术 QUIC 企业号 5 月 PK 榜

走进南京邮电大学!龙蜥导师面对面分享如何通过开源经历获得实习/工作机会?| 开源之夏 2023

OpenAnolis小助手

操作系统 实习 龙蜥社区 开源之夏 南京邮电大学

面对职业焦虑,我们能做些什么?| 社区征文

三掌柜

三周年征文

项目终于用上了 DDD 领域驱动,太强了!

Java 架构 DDD

一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器 | 京东云技术团队

京东科技开发者

Spring Boot 处理器 企业号 5 月 PK 榜 Graceful Response web接口开发

Istio权威指南,华为云云原生团队倾情巨献!

博文视点Broadview

2023年西藏自治区等级保护测评机构名单看这里!

行云管家

等保 等级保护 西藏

如何选择合适的共享电动车厂商

共享电单车厂家

共享电动车厂家 共享电单车厂商 景区共享电单车 校园共享电动车 共享电动车生产

HTAP for MySQL 在腾讯云数据库的演进

NineData

MySQL 腾讯云 NineData HTAP for MySQL 2023云数据库技术沙龙

华为云数据库首席专家谈分布式数据应用挑战和发展建议

华为云开发者联盟

数据库 华为云 华为云开发者联盟 企业号 5 月 PK 榜

统一门户的快速构建--基于小程序技术的一种可能

FinFish

统一门户 小程序容器 小程序化 小程序技术

看火山引擎DataLeap如何做好电商治理(二):案例分析与解决方案

字节跳动数据平台

短视频 DataLeap 电商治理 达人治理 商品安全

前方高能!融云《社交泛娱乐出海作战地图》来袭,前 100 位免费领

融云 RongCloud

图片 社交 融云 泛娱乐 出海

主网NFT铸造交易商城dapp系统开发搭建

开发v-hkkf5566

深入理解 MySQL 索引底层数据结构

Java你猿哥

Java MySQL 算法 ssm sql

LinkFlow发布会实录|食品饮料品牌洞察应用实践分享

游读分享

假期充电,用阿里云 Serverless K8s + AIGC 搭建私人代码助理

阿里巴巴云原生

阿里云 Serverless Kubernetes 云原生 AIGC

mosn基于延迟负载均衡算法 -- 走得更快,期待走得更稳

Java你猿哥

Java 负载均衡 ssm 架构师

SaaS化开源项目之HouseKeeper云上部署实践

华为云开发者联盟

开源 微服务 华为云 华为云开发者联盟 企业号 5 月 PK 榜

关于并发编程与线程安全的思考与实践 | 京东云技术团队

京东科技开发者

并发编程 线程安全 java 并发 企业号 5 月 PK 榜

研发效能治理:复杂性

码猿外

研发效能 工程效能

Kubernetes 1.2 新功能解析:ConfigMap (下)_语言 & 开发_才云科技_InfoQ精选文章