20|应用定义:如何使用 Kustomize 定义应用?
王炜
你好,我是王炜。
从这节课起,我们开始学习 Kubernetes 的应用定义。
在之前部署“示例应用”时,我们通过 YAML 来编写 Kubernetes Manifest,并使用 kubectl apply 命令来部署 Kubernetes 对象。如果把 Kubernetes 比作是操作系统,那么要在系统上运行应用就需要标准的应用格式,例如 Windows EXE 或 Linux Binary 可执行文件。而在 Kubernetes 中,标准的应用定义格式则是 YAML 编写的 Manifest 文件。
但是,在实际使用 Kubernetes 时,我们一般都会面临多环境的问题。例如通常我们会把环境分为开发、测试、预发布和生产环境。由于 YAML 是一种“静态”的配置语言,它并不像编程语言一样使用变量来计算最终结果,所以在多环境的情况下,常规方式需要我们编写多套应用定义。
显然,这种直接把多套应用部署到不同环境的方式并不优雅。一是因为多套应用定义很难维护和统一,最后会导致环境之间的差异越来越大;二是因为在大部分情况下,不同环境的 Kubernetes 对象都是相同的,只在一些和环境相关的配置上有差异,编写多套应用定义会导致维护成本增加。
而 Kustomize 正是针对这种场景而设计的应用定义模型。我们只需要定义一套 Kustomize 应用就能够实现对多环境的适配。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Kustomize是一种应用定义模型,可以帮助解决多环境部署的问题。本文详细介绍了如何使用Kustomize对示例应用进行改造,包括创建基准和多环境目录、分析环境差异、创建通用Manifest和为不同环境创建差异Manifest。通过实际操作演示了如何使用Kustomize来管理多环境的Kubernetes应用部署,以及如何利用Kustomize的覆写功能来实现不同环境的差异化配置。文章还介绍了如何使用Kustomize部署开发环境和生产环境,并提供了思考题供读者进一步探索Kustomize的其他应用方式。整体而言,本文内容详实,适合想要学习Kubernetes应用定义的读者阅读。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- 陈敏老师,如果我们用变量替换各环境 Manifest 里的差异配置,并在部署的时候根据部署参数使用 sed -s 替换为各环境对应的配置,这种做法您看怎么样呢?
作者回复: 是一种方案。不过这样的话就失去了声明式应用定义优势了,正常情况下,Manifest 定义的应用就是最终的状态描述。
2023-03-12归属地:福建3 - ghostwritten如果是单纯、轻量的项目拉取、构建、推送、部署管理,用kustomize管理较好,如果项目包含代码、Docs、API说明、项目部署文件等等,kustomize 感觉更增加复杂混乱了,用分支感觉好。老师你觉得呢?
作者回复: 我个人的意见是简单应用可以使用 Kustomize,复杂应用可以考虑用 Helm,但不推荐以分支的模型来管理应用,首先是多分支会导致分叉,后期很难相互 rebase。其次随着时间推移,分支差异往往会越来越大,不同的环境差异也越来越大。
2023-02-02归属地:北京1 - 橙汁“这三个环境部署的应用都是同一套,但在配置上所有不同。” 感觉应该是有所不同吧 另外想了下,helm和kustomize的区别 helm偏应用,deployment svc ingress hpa这四部分安装应用差异化通过单独value.yaml文件,有时需在通用yaml中进行大量判断,后续进行更改较复杂,可读性差 kustomize偏项目,适用于一个应用的整体 包含数据库应用等更加全面,差异化是两个文件的不同之处进行对比,无需在基准yaml中进行大量判断,后续好维护 学完各位可以在简历上加上,“熟悉使用helm和kustomize进行项目改造和快速部署”
作者回复: 感谢指正。 很好的差异分析,的确如此。如果是复杂应用的话还是可以考虑 Helm 来封装。
2023-01-28归属地:北京31 - 一位不愿透露姓名的王先生用目录区分环境跟用分支区分环境哪种好?
作者回复: 从我的经验来看目录区比分支的管理成本更低,也更清晰。
2023-01-30归属地:福建 - 无名无姓环境的工具么?
作者回复: 可以用来管理环境。
2023-01-23归属地:北京 - m1k3第一:kustomize文件配置 apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: - ../../base - database.yaml patchesStrategicMerge: - hpa.yaml - deployment.yaml 第二:deployment配置 apiVersion: apps/v1 kind: Deployment metadata: name: backend spec: template: spec: containers: - name: flask-backend image: lyzhang1999/backend:v1.2.3 --- apiVersion: apps/v1 kind: Deployment metadata: name: frontend spec: template: spec: containers: - name: react-frontend image: lyzhang1999/frontend:v1.2.32023-01-28归属地:广东
收起评论