SREWorks云原生数智运维工程实践-Kubernetes资源编排之三:Kustomize篇(下)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
资源编排,不限时长
简介: SREWorks云原生数智运维工程实践-

三、 Kustomize的特点

 

Kustomize的Overlay可以在Base的基础上,通过对resource/generator/transformer等的定义,形成新的应用定义,不管是Base还是Overlay,都可以通过kustomize build生成有效的YAML。

 

功能简单清晰,kubectl直接内部支持

不考虑派生,仅仅作为组件的YAML组织方式也很有帮助

也有自己的插件系统,例如可以用简单的YAML定义,使用文件生成ConfigMap/Secret等

允许注入K8S运行时数据

 

 

四、 Kustomize和Helm的对比

 

Kustomize相对于Helm而言,更加的轻量,只有一个CLI工具。也集成到了kubectl自身,使用及配置成本接近于0。Kustomize放弃了对模板的要求,改为参考Docker镜像的形式,通过Base+Overlay的方式对应用的原始YAML进行派生。

 

Base YAML管控:Helm最大的特点是定制仅限于预先存在的配置选项。不仅如此,Chart作者还必须用有点麻烦的模板化方式实现这些定制选项。这个时候Kustomize不受限制的Overlay会更加灵活,想怎么覆盖就怎么覆盖。所以Helm对Base YAML强管控;而Kustomize虽然也有Base,但Overlay的存在让这个限制几乎不存在。

模板语法层面:Kustomize相较于Helm去掉了模板语法,入门门槛更低,更易使用。当然如果玩的高阶,两者都要学习很多东西。

部署层面:虽然Kustomize最为轻量,但因为Helm3取消了Tiller依赖,所以差别也不是很大,两者都是二进制命令工具生成YAML后直接下发。

工作流程上:

 

Helm定义Chart->填充->运行。在Chart中没有定义的内容是无法更改的

KustomizeBase和Overlay都是可以独立运作的,增加新对象,或者对编写Base时未预料到的内容进行变更,都非常简单

 

基于上述工作流程的对比,如果是要公开发布一个复杂的组件,编写一个复杂而设计良好的Helm Chart可以给用户很大帮助。用户在缺失了自由性之下,仅仅通过values.yaml的阅读和配置就可以对这种复杂的部署产生一个较为深入的认知。

 

如果是常见的业务应用,虽然不同的部署之间差异不大(比如日常预发生产),但是因为快速迭代及需求变化,未必可以一开始就做好相关的变化限制,用Kustomize是更好的选择。

 

对于承载应用Application这个概念而言Kustomize和Helm的短板是一致的,都没有进一步提供包之间的依赖处理、外部资源申请及维护、变量间传递等能力。

 

对于承载组件Component这个概念而言,Kustomize和Helm类似,都是合适的工具。虽然Helm和Kustomize在自身的能力和流程上有着很多区别,但最终流程都是:开发者一堆YAML->合适的参数映射及渲染方式->使用者填参/覆盖->apply到目标K8S中。萝卜青菜,各有所爱。

 

五、 SREWorks的Kustomize组件实践

 

在SREWorks的appmanager中,将Kustomize与Helm并列放在一起成为一种组件类型,当前这种组件类型还未内置到出厂组件中,后续会上架到云端市场,供用户插拔安装。

 

 

- revisionName: "CHART|sreworks@management-controlplane@1.0|_"

  parameterValues:

    - name: Map

      value:

        clusterId: "{{ Global.clusterId }}"

        product: es

        userID: "{{ Global.uid }}"

        vpcID: "{{ Global.vpcID }}"

        vswitchID: "{{ Global.vswitchID }}"

        namespaceRegexes: "^(essen|es)$"

- revisionName: KUSTOMIZE|elasticsearch-repos@2.0.1@test|_

  parameterValues:

    - name: kubeconfig

      value: "{{ Global.kubeconfig }}"

      toFieldPaths:

        - spec.base64Kubeconfig

    - name: path

      value: "./"

      toFieldPaths:

        - spec.path

  dependencies:

    - component: "CHART|sreworks@management-controlplane@1.0"

- revisionName: "STATUS|KUSTOMIZE@esonack-cluster-baselines|_"

  dependencies:

    - component: KUSTOMIZE|es-cluster-baselines@3.1.0@test

  parameterValues:

    - name: kubeconfig

      value: "{{ Global.kubeconfig }}"

      toFieldPaths:

        - spec.base64Kubeconfig

    - name: options

      value:

        groups:

          - namespace: sreworks-system

            labels:

              app: sreworks

            resources:

              - v1/pods

      toFieldPaths:

        - spec.options

 

 

如上面所示,在appmanager中的OAM YAML中,插入Helm和Kustomize两种组件,并且设置依赖关系,在Helm组件下发完成后,再进行Kustomize组件的下发;在Kustomize组件下发完成后,对核心Pod进行状态探测,待Pod正常之后才算作部署完成。

 

六、 总结

 

Kustomize是一个通用工具,它的作用是对Kubernetes资源进行定制后产生新的YAML文件,并保持原始的YAML文件不变。从这个意义上来说,你可以把Kustomize看成是Kubernetes YAML文件的转换工具,类似XML和XSLT的关系。

 

Kustomize的一个重要特征是不使用模板,而是直接工作在原始的YAML文件上。这一点与Helm是不同的。不使用模板好处在于简单易懂,不需要掌握复杂的模板语法,而Helm的YAML文件基本都被预置变量抠得毫无可读性。

 

Kustomize的另外一个优势是集成在kubectl中,这就意味着不需要安装额外的工具就可以进行定制。需要注意的是,由于实现上的原因,kubectl自带的Kustomize的版本比较低,目前仍然需要安装单独的Kustomize工具。这个问题要到1.20版本才会解决。

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
设计模式 Cloud Native API
云原生时代的微服务架构实践
【9月更文挑战第23天】在这篇文章中,我们将深入探讨云原生环境下的微服务架构设计原则、优势以及实施策略。文章不仅涉及理论概念,还结合具体的代码示例,帮助读者理解如何在实际项目中应用微服务架构。通过阅读本文,你将获得构建、部署和管理微服务的实用知识,为你的云原生项目奠定坚实的基础。
|
5天前
|
运维 Kubernetes Cloud Native
云原生技术在现代企业中的应用与实践
【9月更文挑战第22天】 在数字化浪潮的推动下,云原生技术已经成为企业IT架构转型的重要方向。本文将深入探讨云原生技术的核心概念、优势以及如何在企业中实施云原生策略。我们将从容器化技术的基本原理出发,逐步引导读者理解服务网格和微服务架构的设计思路,并通过实际案例分析,展示云原生技术如何助力企业实现敏捷开发和高效运维。文章旨在为技术人员提供云原生实践的参考,并启发企业决策者对于云原生转型的深度思考。
|
2天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
12 4
|
4天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与思考
【9月更文挑战第23天】本文将深入探讨云原生技术如何革新现代应用的开发流程。通过分析云原生的核心概念、优势以及实际应用案例,我们旨在揭示这一新兴技术范式如何助力开发者和企业更高效、灵活地构建和部署应用程序。文章还将提供具体代码示例,展示云原生技术在实际项目中的应用,帮助读者更好地理解和掌握该技术。
|
5天前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第22天】本文将深入探讨云原生技术如何革新现代应用开发,通过实际案例分析其对提高开发效率、促进持续集成与交付的显著影响。我们将从云原生的基本概念出发,逐步展开到容器化、微服务架构、自动化管理的实践操作,以及这些技术如何协同工作以支持复杂应用的快速迭代和扩展。文章旨在为开发者提供一套云原生技术的实践框架,帮助他们构建更加灵活、可维护的应用系统。
|
3天前
|
Kubernetes 负载均衡 Cloud Native
探索云原生技术:Kubernetes的魔法
【9月更文挑战第24天】 在数字化浪潮中,云原生技术如同现代航海的罗盘,指引着企业航向灵活、高效的未来。本文将深入剖析云原生世界的璀璨明星——Kubernetes,揭秘其如何在容器化的基础上,实现复杂应用的自动化部署、扩展和管理。从概念到实践,我们将一同领略Kubernetes如何简化运维、提高资源利用率,并推动微服务架构的发展。通过实际的代码示例,我们将手把手教你如何在云上构建和运行第一个Kubernetes集群,让理论与实践相结合,开启云原生之旅。
|
5天前
|
Kubernetes Cloud Native 云计算
云原生技术入门与实践
【9月更文挑战第22天】本文将带你了解云原生技术,并探讨如何利用它来构建高效、可扩展的应用。我们将从基础概念开始,逐步深入到实际应用,最后通过一个简单的示例展示如何在Kubernetes上部署一个容器化应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
|
8天前
|
运维 Cloud Native 安全
云原生技术:重塑现代IT架构的引擎
在当今数字化时代,企业正面临着前所未有的挑战与机遇。随着云计算技术的不断发展,云原生技术作为其核心驱动力之一,正在彻底改变企业的IT架构和运营模式。本文将深入探讨云原生技术的内涵、特点及其对企业数字化转型的影响,揭示其在现代IT架构中的核心地位和作用。同时,我们还将分析云原生技术面临的安全挑战,并展望未来的发展趋势,为企业在云原生领域的实践提供有益的参考。
|
5天前
|
监控 Cloud Native Devops
云原生时代的微服务架构:挑战与机遇
在云计算迅速发展的背景下,云原生技术日益受到关注,而微服务架构作为其核心组件之一,正逐步成为构建现代应用的首选方案。本文探讨了微服务架构在云原生时代所面临的挑战与机遇,分析了其灵活性、可扩展性和容错性的优势,以及服务间复杂交互、数据一致性、监控管理和安全性等挑战,并指出了与DevOps文化结合、容器化技术、云服务集成及业务敏捷性等方面的机遇,强调了其在软件开发中的重要角色。
|
2天前
|
Cloud Native 持续交付 云计算
探索云原生架构:构建现代应用的新范式
在当今数字化浪潮中,云原生架构以其敏捷性、弹性和可扩展性成为企业技术转型的核心驱动力。本文将引领读者深入理解云原生的概念,剖析其关键技术组件——微服务、容器化、DevOps实践及持续交付/持续部署流程,并揭示这些技术如何相互协作,共同构建高效、可靠且易于管理的现代软件系统。通过对云原生架构的全面解读,我们旨在为开发者、架构师乃至企业决策者提供有价值的见解与指导,助力其在快速变化的市场环境中保持竞争力。

热门文章

最新文章