当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-09-28 10:08:10 182观看
导读背景在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了。现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发。首先就是 ConfigMap,从

背景

在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了。4la28资讯网——每日最新资讯28at.com

现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发。首先就是 ConfigMap,从它的名字也可以看出这是用于管理配置的对象。4la28资讯网——每日最新资讯28at.com

ConfigMap

不管我们之前是做 Java、Go 还是 Python 开发都会使用到配置文件,而 ConfigMap 的作用可以将我们原本写在配置文件里的内容转存到 k8s 中,然后和我们的 Container 进行绑定。4la28资讯网——每日最新资讯28at.com

存储到环境变量

绑定的第一种方式就是将配置直接写入到环境变量,这里我先定义一个 ConfigMap:4la28资讯网——每日最新资讯28at.com

apiVersion: v1  kind: ConfigMap  metadata:    name: k8s-combat-configmap  data:    PG_URL: "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable"

重点是 data 部分,存储的是一个 KV 结构的数据,这里存储的是一个数据库连接。4la28资讯网——每日最新资讯28at.com

需要注意,KV 的大小不能超过 1MB4la28资讯网——每日最新资讯28at.com

接着可以在容器定义中绑定这个 ConfigMap 的所有 KV 到容器的环境变量:4la28资讯网——每日最新资讯28at.com

# Define all the ConfigMap's data as container environment variables envFrom:    - configMapRef:        name: k8s-combat-configmap

我将 ConfigMap 的定义也放在了同一个 deployment 中,直接 apply:4la28资讯网——每日最新资讯28at.com

❯ k apply -f deployment/deployment.yamldeployment.apps/k8s-combat createdconfigmap/k8s-combat-configmap created

此时 ConfigMap 也会被创建,我们可以使用4la28资讯网——每日最新资讯28at.com

❯ k get configmapNAME                   DATA   AGEk8s-combat-configmap   1      3m17s❯ k describe configmap k8s-combat-configmapData====PG_URL:----postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable

拿到刚才声明的配置信息。4la28资讯网——每日最新资讯28at.com


同时我在代码中也读取了这个环境变量:4la28资讯网——每日最新资讯28at.com

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))  })

访问这个接口便能拿到这个环境变量:4la28资讯网——每日最新资讯28at.com

root@k8s-combat-7b987bb496-pqt9s:/# curl http://127.0.0.1:8081k8s-combat-7b987bb496-pqt9s-postgres://postgres:postgres@localhost:5432/postgres?sslmode=disableroot@k8s-combat-7b987bb496-pqt9s:/# echo $PG_URLpostgres://postgres:postgres@localhost:5432/postgres?sslmode=disable

存储到文件

有些时候我们也需要将这些配置存储到一个文件中,比如在 Java 中可以使用 spring 读取,Go 也可以使用 configor 这些第三方库来读取,所有配置都在一个文件中也更方便维护。4la28资讯网——每日最新资讯28at.com

图片在 ConfigMap 中新增了一个 key:APP 存放了一个 yaml 格式的数据,然后在容器中使用 volumes 和 volumeMounts 将数据挂载到容器中的指定路径/go/bin/app.yaml4la28资讯网——每日最新资讯28at.com

apply 之后我们可以在容器中查看这个文件是否存在:4la28资讯网——每日最新资讯28at.com

root@k8s-combat-7b987bb496-pqt9s:/# cat /go/bin/app.yamlname: k8s-combatpulsar:  url: "pulsar://localhost:6650"  token: "abc"

配置已经成功挂载到了这个路径,我们便可以在代码中读取这些数据。4la28资讯网——每日最新资讯28at.com

Secret

可以看到 ConfigMap 中是明文存储数据的;4la28资讯网——每日最新资讯28at.com

k describe configmap k8s-combat-configmap

可以直接查看。4la28资讯网——每日最新资讯28at.com

对一些敏感数据就不够用了,这时我们可以使用 Secret:4la28资讯网——每日最新资讯28at.com

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 写入到环境变量中。4la28资讯网——每日最新资讯28at.com

❯ echo 'abc' | base64YWJjCg==

Secret 中的数据需要使用 base64 进行编码,所以我这里存储的是 abc.4la28资讯网——每日最新资讯28at.com

apply 之后我们再查看这个 Secret 是不能直接查看原始数据的。4la28资讯网——每日最新资讯28at.com

❯ k describe secret k8s-combat-secretName:         k8s-combat-secretType:  OpaqueData====PWD:  4 bytes

Secret 相比 ConfigMap 多了一个 Type 选项。图片4la28资讯网——每日最新资讯28at.com

我们现阶段在应用中用的最多的就是这里的 Opaque,其他的暂时还用不上。4la28资讯网——每日最新资讯28at.com

总结

在实际开发过程中研发人员基本上是不会直接接触 ConfigMap,一般会给开发者在管理台提供维护配置的页面进行 CRUD。4la28资讯网——每日最新资讯28at.com

由于 ConfigMap 依赖于 k8s 与我们应用的语言无关,所以一些高级特性,比如实时更新就无法实现,每次修改后都得重启应用才能生效。4la28资讯网——每日最新资讯28at.com

类似于 Java 中常见的配置中心:Apollo,Nacos 使用上会有不小的区别,但这些是应用语言强绑定的,如果业务对这些配置中心特性有强烈需求的话也是可以使用的。4la28资讯网——每日最新资讯28at.com

但如果团队本身就是多语言研发,想要降低运维复杂度 ConfigMap 还是不二的选择。4la28资讯网——每日最新资讯28at.com

下一章节会更新大家都很感兴趣的服务网格 Istio,感兴趣的朋友多多点赞转发

本文链接:http://www.28at.com/showinfo-26-11853-0.html五分钟k8s入门到实战-应用配置

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Spring BOOT 启动参数

下一篇: 实时数据推送并非只有WebSocket一种选择

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 摸鱼心法第一章——和配置文件说拜拜

    摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 一文看懂为苹果Vision Pro开发应用程序

    一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 如何正确使用:Has和:Nth-Last-Child

    如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 学习JavaScript的10个理由...

    学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 2天涨粉255万,又一赛道在抖音爆火

    2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了——贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
Top