五分钟k8s入门到实战-应用配置

背景
在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了。
现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发。
首先就是 ConfigMap,从它的名字也可以看出这是用于管理配置的对象。
ConfigMap
不管我们之前是做 Java、Go 还是 Python 开发都会使用到配置文件,而 ConfigMap 的作用可以将我们原本写在配置文件里的内容转存到 k8s 中,然后和我们的 Container 进行绑定。
存储到环境变量
绑定的第一种方式就是将配置直接写入到环境变量,这里我先定义一个 ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: k8s-combat-configmap
data:
PG_URL: "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable"
重点是 data 部分,存储的是一个 KV 结构的数据,这里存储的是一个数据库连接。
需要注意,KV 的大小不能超过 1MB
接着可以在容器定义中绑定这个 ConfigMap 的所有 KV 到容器的环境变量:
# Define all the ConfigMap's data as container environment variables
envFrom:
- configMapRef:
name: k8s-combat-configmap
我将 ConfigMap 的定义也放在了同一个 deployment 中,直接 apply:
❯ k apply -f deployment/deployment.yaml
deployment.apps/k8s-combat created
configmap/k8s-combat-configmap created
此时 ConfigMap 也会被创建,我们可以使用
❯ k get configmap
NAME DATA AGE
k8s-combat-configmap 1 3m17s
❯ k describe configmap k8s-combat-configmap
Data
====
PG_URL:
----
postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable
拿到刚才声明的配置信息。
同时我在代码中也读取了这个环境变量:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
name, _ := os.Hostname()
url := os.Getenv("PG_URL")
fmt.Fprint(w, fmt.Sprintf("%s-%s", name, url))
})
访问这个接口便能拿到这个环境变量:
root@k8s-combat-7b987bb496-pqt9s:/# curl http://127.0.0.1:8081
k8s-combat-7b987bb496-pqt9s-postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable
root@k8s-combat-7b987bb496-pqt9s:/# echo $PG_URL
postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable
存储到文件
有些时候我们也需要将这些配置存储到一个文件中,比如在 Java 中可以使用 spring 读取,Go 也可以使用 configor 这些第三方库来读取,所有配置都在一个文件中也更方便维护。

在 ConfigMap 中新增了一个 key:APP 存放了一个 yaml 格式的数据,然后在容器中使用 volumes 和 volumeMounts 将数据挂载到容器中的指定路径/go/bin/app.yaml
apply 之后我们可以在容器中查看这个文件是否存在:
root@k8s-combat-7b987bb496-pqt9s:/# cat /go/bin/app.yaml
name: k8s-combat
pulsar:
url: "pulsar://localhost:6650"
token: "abc"
配置已经成功挂载到了这个路径,我们便可以在代码中读取这些数据。
Secret
可以看到 ConfigMap 中是明文存储数据的;
k describe configmap k8s-combat-configmap
可以直接查看。
对一些敏感数据就不够用了,这时我们可以使用 Secret:
apiVersion: v1
kind: Secret
metadata:
name: k8s-combat-secret
type: Opaque
data:
PWD: YWJjCg==
---
env:
- name: PG_PWD
valueFrom:
secretKeyRef:
name: k8s-combat-secret
key: PWD
这里我新增了一个 Secret 用于存储密码,并在 container 中也将这个 key 写入到环境变量中。
❯ echo 'abc' | base64
YWJjCg==
Secret 中的数据需要使用 base64 进行编码,所以我这里存储的是 abc.
apply 之后我们再查看这个 Secret 是不能直接查看原始数据的。
❯ k describe secret k8s-combat-secret
Name: k8s-combat-secret
Type: Opaque
Data
====
PWD: 4 bytes
Secret 相比 ConfigMap 多了一个 Type 选项。

我们现阶段在应用中用的最多的就是这里的 Opaque,其他的暂时还用不上。
总结
在实际开发过程中研发人员基本上是不会直接接触 ConfigMap,一般会给开发者在管理台提供维护配置的页面进行 CRUD。
由于 ConfigMap 依赖于 k8s 与我们应用的语言无关,所以一些高级特性,比如实时更新就无法实现,每次修改后都得重启应用才能生效。
类似于 Java 中常见的配置中心:Apollo,Nacos 使用上会有不小的区别,但这些是应用语言强绑定的,如果业务对这些配置中心特性有强烈需求的话也是可以使用的。
但如果团队本身就是多语言研发,想要降低运维复杂度 ConfigMap 还是不二的选择。
下一章节会更新大家都很感兴趣的服务网格 Istio,感兴趣的朋友多多点赞转发。
本文的所有源码和资源文件在这里可以访问:
https://github.com/crossoverJie/k8s-combat
五分钟k8s入门到实战-应用配置的更多相关文章
- 前端 高级 (二十五)vue2.0项目实战一 配置简要说明、代码简要说明、Import/Export、轮播和列表例子
一.启动服务自动打开浏览器运行 二.配置简要说明 1.node_modules 安装好的依赖文件,中间件等,所在位置 2.package.jason 配置当前项目要安装的中间件和依赖文件 { &quo ...
- webpack入门和实战(一):webpack配置及技巧
一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...
- Sping Boot入门到实战之入门篇(三):Spring Boot属性配置
该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置. 传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...
- Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置
该篇为Sping Boot入门到实战系列入门篇的第四篇.介绍Spring Boot自动化配置的基本原理与实现. Spring Boot之所以受开发者欢迎, 其中最重要的一个因素就是其自动化配置特性 ...
- nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解
nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...
- Ionic 入门与实战之第三章:Ionic 项目结构以及路由配置
原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第三章,主要对 Ionic 的项目结构作了介绍,并讲解了Ionic 中的路由概念以及相关配置. 原文发表于我的技术博客 1. Ioni ...
- Ionic 入门与实战之第二章第一节:Ionic 环境搭建之开发环境配置
原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第一节,主要对 Ionic 的开发环境配置做了简要的介绍,本文介绍的开发环境为 Mac 系统,Windows 系统基本类似,少许 ...
- 五分钟搞定 HTTPS 配置,二哥手把手教
01.关于 FreeSSL.cn FreeSSL.cn 是一个免费提供 HTTPS 证书申请.HTTPS 证书管理和 HTTPS 证书到期提醒服务的网站,旨在推进 HTTPS 证书的普及与应用,简化证 ...
- 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF
1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载 链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...
- Nginx入门到实战
location 语法 location 有”定位”的意思, 根据Uri来进行不同的定位. 在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上. 比如, 碰 ...
随机推荐
- VUE路由传参的实用方式
本文讲解了VUE项目中路由之间的传值方式,涉及到的方法都是开发时常用的,希望对大家有多帮助. 1. 方式一:使用router-link标签 1.1 params 传参 首先定义好路由 const ro ...
- Vulhub靶场的搭建
Vulhub靶场的搭建(基于centos7) 1>简述 很多人在搭建Vulhub靶场的时候,可能也搜到过许多的文章,但是大多数的文章只是有一个流程,对其中的原理,步骤没有进行详细的说明,这也就导 ...
- 使用hashicorp Raft开发分布式服务
使用hashicorp Raft开发高可用服务 开发raft时用到的比较主流的两个库是Etcd Raft 和hashicorp Raft,网上也有一些关于这两个库的讨论.之前分析过etcd Raft, ...
- 尚医通day13【预约挂号】(内附源码)
页面预览 预约挂号 根据预约周期,展示可预约日期,根据有号.无号.约满等状态展示不同颜色,以示区分 可预约最后一个日期为即将放号日期 选择一个日期展示当天可预约列表 预约确认 第01章-预约挂号 接口 ...
- boot 项目启动:Error starting ApplicationContext. To display the conditions report re-run
Error starting ApplicationContext. To display the conditions report re-run 问题描述 boot 工程启动不了 原因分析: 以后 ...
- C#.NET Framework 使用BC库(BouncyCastle) RSA 公钥加密 私钥解密 ver:20230706
C#.NET Framework 使用BC库(BouncyCastle) RSA 公钥加密 私钥解密 ver:20230706 环境说明: .NET Framework 4.6 的控制台程序 . 20 ...
- 如何开发 RESTful、GraphQL 和 SOAP 等不同类型的 API ?
在软件开发中,API(应用程序编程接口)的重要性不言而喻.API已成为不可或缺的构建模块,使开发人员能够创建功能丰富.多样化和可扩展的应用程序.这是一篇综合指南,旨在深入探讨API开发,使初学者和有经 ...
- ZEGO全新语音聊天解决方案,4步搭建爆火的语音聊天室
最近,国外一款语音聊天软件成功火出圈. 与此同时,该类产品也引发了国内互联网的关注,除了争相下载试用之外,不少社交.泛娱乐行业从业者也表示要跟进对应玩法. 据了解,不少泛娱乐玩家已经在加班加点抢占先机 ...
- Linux下Oracle单实例配置多监听
Oracle单实例配置多监听 一.前言 有时候我们项目中需要使用Oracle数据库,同时要需要不同的数据源,而Oracle不像Mysql那样直接建个库即可,Oracle是以账号为单位,可以理解为一个账 ...
- Blazor中CSS隔离无法用在子组件内部
Blazor的CSS隔离是个很好的东西,如图,只需添加一个与Razor组件同名的CSS文件,这个文件中的CSS样式只会在同名的Razor组件中使用. 原理是通过在dom元素添加一个代表标识符的属性 在 ...