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搭建和管理企业级网站应用
相关文章
|
2天前
|
运维 监控 Cloud Native
云原生时代的运维策略:从反应式到自动化
在云计算的浪潮下,运维领域经历了翻天覆地的变化。本文将带你领略云原生时代下的运维新风貌,探索如何通过自动化和智能化手段,实现从传统的反应式运维向主动、智能的运维模式转变。我们将一起见证,这一变革如何助力企业提升效率,保障服务的连续性与安全性,以及运维人员如何适应这一角色的转变,成为云原生时代的引领者。
16 8
|
6天前
|
运维 Kubernetes Cloud Native
云原生时代的运维转型之路
在云原生技术日益成熟的今天,传统的运维模式正面临着前所未有的挑战与机遇。本文旨在探讨如何在云原生大潮中实现运维的平滑转型,通过分析当前运维面临的困境、介绍云原生的基本概念及其对运维的影响,以及提供转型实践的策略和案例,为运维人员指明方向,帮助他们拥抱变化,乘风破浪。
|
5天前
|
Kubernetes 监控 Cloud Native
云原生入门:Kubernetes 集群部署与管理
【8月更文挑战第38天】在数字化浪潮中,云原生技术如同翱翔的雄鹰,引领着企业飞向灵活高效的未来。本文将带你一探究竟,从Kubernetes的基础概念到实际操作,深入浅出地介绍如何在云端构建和管理你的容器化应用。我们将一步步搭建起一个小型的Kubernetes集群,并通过代码示例和图解,让你轻松掌握云原生世界的钥匙。让我们一起开启这趟技术之旅,探索云原生的秘密花园,找到那把打开创新之门的金钥匙。
|
9天前
|
弹性计算 Kubernetes Cloud Native
云原生时代的航标:Kubernetes的灯塔作用
在数字化浪潮中,云原生技术如同海上的灯塔,指引着企业航行。本文将深入探讨Kubernetes如何成为云原生技术的领航者,揭示其在容器编排、自动化部署等方面的优势,并分享实践案例,为读者提供实用的操作建议和未来趋势的展望。
|
11天前
|
Kubernetes Cloud Native 开发者
探索云原生技术:从Docker到Kubernetes的旅程
【8月更文挑战第31天】云原生技术正在改变软件开发、部署和运维的方式。本文将带你了解云原生的核心概念,并通过实际代码示例,展示如何使用Docker容器化应用,并进一步通过Kubernetes进行集群管理。我们将一起构建一个简单的微服务架构,体验云原生带来的高效与便捷。
|
10天前
|
运维 自然语言处理 安全
自动化运维的利器:Ansible入门与实践
【8月更文挑战第33天】在现代IT基础设施的管理中,自动化运维已成为提高效率、减少错误的关键技术。Ansible作为一款开源的自动化配置管理和应用部署工具,以其简洁性、易用性和强大的功能受到广泛欢迎。本文将介绍Ansible的基本概念、安装步骤和简单使用,通过实际案例展示其在自动化运维中的应用。
|
5天前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
55 35
|
3天前
|
存储 弹性计算 运维
自动化监控和响应ECS系统事件
阿里云提供的ECS系统事件用于记录云资源信息,如实例启停、到期通知等。为实现自动化运维,如故障处理与动态调度,可使用云助手插件`ecs-tool-event`。该插件定时获取并转化ECS事件为日志存储,便于监控与响应,无需额外开发,适用于大规模集群管理。详情及示例可见链接文档。
|
4天前
|
运维 监控 安全
自动化运维:提升效率与可靠性的现代策略
【9月更文挑战第6天】在数字化时代,自动化运维不再是可选项,而是企业保持竞争力的必需品。通过整合先进的技术和实践,自动化不仅提升了运维的效率,还增强了系统的稳定性和安全性。本文将探讨自动化运维的核心概念、实施步骤以及面临的挑战,同时提供实用的代码示例,帮助读者构建和优化自己的自动化运维体系。
12 2
|
7天前
|
运维 Prometheus 监控
自动化运维工具链的构建与实践
【9月更文挑战第4天】在现代IT运维管理中,自动化工具链的搭建是提升效率、保障稳定性的关键。本文将通过一个实际案例,展示如何从零开始构建一套高效的自动化运维体系,涵盖从监控、部署到故障处理的完整流程,并分享实践中的经验教训和成效分析。
20 4

热门文章

最新文章