首页 > 其他分享 >五分钟k8s入门到实战-应用配置

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

时间:2023-09-27 09:35:13浏览次数:41  
标签:ConfigMap 入门 combat configmap name 五分钟 k8s postgres

ConfigMap.png

背景

在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了。

现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发。
首先就是 ConfigMap,从它的名字也可以看出这是用于管理配置的对象。

ConfigMap

不管我们之前是做 JavaGo 还是 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 这些第三方库来读取,所有配置都在一个文件中也更方便维护。

image.png
ConfigMap 中新增了一个 key:APP 存放了一个 yaml 格式的数据,然后在容器中使用 volumesvolumeMounts 将数据挂载到容器中的指定路径/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,感兴趣的朋友多多点赞转发

标签:ConfigMap,入门,combat,configmap,name,五分钟,k8s,postgres
From: https://www.cnblogs.com/crossoverJie/p/17731906.html

相关文章

  • C++引用10分钟入门教程
    C++引用10分钟入门教程< C++引用C++引用在本质上是什么,它和指针到底有什么区别? > 我们知道,参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。所谓内存拷贝,是指将一块内存上的数据复制到另一块内存上。对于像char、bool、int、float等基本类型的数据,它们占用的内......
  • 使用sealos按照k8s
    #获取sealos命令行工具wgethttps://github.com/labring/sealos/releases/download/v4.3.3/sealos_4.3.3_linux_amd64.tar.gz\&&tarzxvfsealos_4.3.3_linux_amd64.tar.gzsealos&&chmod+xsealos&&mvsealos/usr/bin#使用sealos安装k8s,helm,c......
  • K8s学习整理(初级)
    1、服务器基础管理修改主机名称:hostnamectlset-hostnamedock02_120&&bash2、修改服务器内核参数sysctl用于动态修改内核运行参数sysctl-a显示所有内核运行参数sysctl-p从指定的文件加载系统参数,而不是从默认配置文件/etc/sysctl.conf中加载3、查看CPU数......
  • CSS 入门 - Box Model 盒模型
    CSS入门-BoxModel盒模型网页布局:先学习BoxModel,然后Flexbox/Grid/Float三选一即可搞定网页布局,推荐Flexbox!BOXModel四大属性:Content、Padding、Border、MarginContent:内容Border:边框线padding:内容与边框的距离margin:边框与其他元素的距离margin与padding......
  • k8s笔记15
    摘要:CephOSDStatusoutdown;k8s笔记1(知识图谱,添加节点,ceph存储)_ATCtoK8s空管智能运维的技术博客_51CTO博客【ceph】cephOSD状态及常用命令-bdy-博客园(cnblogs.com)ceph集群磁盘故障,更换磁盘流程-腾讯云开发者社区-腾讯云(tencent.com)1、CephDashboard的Cluster>>OSD......
  • CNN --入门MNIST识别
    Smiling&Weeping----下次你撑伞低头看水洼,就会想起我说雨是神的烟花。 简介:主要是看刘二大人的视频讲解:https://www.bilibili.com/video/BV1Y7411d7Ys/?spm_id_from=333.337.search-card.all.click题目及提......
  • neovim入门指南(二):常用插件
    文章首发https://youngxhui.top常用插件配置经过前面章节的介绍,当前的neovim已经可以开始基本的使用了。下面会推荐一下常见的插件,让我们快速的开始。......
  • neovim入门指南(一):基础配置
    文章首发https://youngxhui.top在编程的世界中,有两个上古神器。一个叫做“神之编辑器Emacs”,另一个叫做“编辑器之神vim”。这两个编辑器从诞生到现在,圣战从未结束。无论是vim还是emacs都在不断的进化和发展,渐渐的vim的分支上出现了一颗夺目的新星,他就是neovim。什......
  • MySQL——个人入门到入土
    SQLSQL:结构化查询语言,全称是StructuredQueryLanguage通常分为四类(括号内为他们的一些关键字):DDL:数据定义语言(create,drop,alter,truncate等)——定义数据库对象(库、表、列这些)DML:数据操作语言(insert,update,delete,call等)——用于CUD(增删改)DQL:数据查询语言(select,where等)——用于......
  • 云原生周刊:K8s 的 13 个最佳开源监控工具
    开源项目推荐SilverSurfer该项目旨在检查Kubernetes对象的API版本兼容性,并为其提供迁移路径,以便为集群升级做好准备。ActionsRunnerControllerActionsRunnerController(ARC)是一个Kubernetes操作器,可为GitHubActions编排和扩展自托管运行器。使用ARC,您可以......