云原生架构与 GitOps 实战
王炜
前腾讯云 CODING 架构师
5442 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
云原生架构与 GitOps 实战
15
15
1.0x
00:00/00:00
登录|注册

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
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 陈敏
    老师,如果我们用变量替换各环境 Manifest 里的差异配置,并在部署的时候根据部署参数使用 sed -s 替换为各环境对应的配置,这种做法您看怎么样呢?

    作者回复: 是一种方案。不过这样的话就失去了声明式应用定义优势了,正常情况下,Manifest 定义的应用就是最终的状态描述。

    归属地:福建
    2
  • ghostwritten
    如果是单纯、轻量的项目拉取、构建、推送、部署管理,用kustomize管理较好,如果项目包含代码、Docs、API说明、项目部署文件等等,kustomize 感觉更增加复杂混乱了,用分支感觉好。老师你觉得呢?

    作者回复: 我个人的意见是简单应用可以使用 Kustomize,复杂应用可以考虑用 Helm,但不推荐以分支的模型来管理应用,首先是多分支会导致分叉,后期很难相互 rebase。其次随着时间推移,分支差异往往会越来越大,不同的环境差异也越来越大。

    归属地:北京
    1
  • 橙汁
    “这三个环境部署的应用都是同一套,但在配置上所有不同。” 感觉应该是有所不同吧 另外想了下,helm和kustomize的区别 helm偏应用,deployment svc ingress hpa这四部分安装应用差异化通过单独value.yaml文件,有时需在通用yaml中进行大量判断,后续进行更改较复杂,可读性差 kustomize偏项目,适用于一个应用的整体 包含数据库应用等更加全面,差异化是两个文件的不同之处进行对比,无需在基准yaml中进行大量判断,后续好维护 学完各位可以在简历上加上,“熟悉使用helm和kustomize进行项目改造和快速部署”

    作者回复: 感谢指正。 很好的差异分析,的确如此。如果是复杂应用的话还是可以考虑 Helm 来封装。

    归属地:北京
    3
    1
  • 一位不愿透露姓名的王先生
    用目录区分环境跟用分支区分环境哪种好?

    作者回复: 从我的经验来看目录区比分支的管理成本更低,也更清晰。

    归属地:福建
  • 无名无姓
    环境的工具么?

    作者回复: 可以用来管理环境。

    归属地:北京
  • 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.3
    归属地:广东
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部