SREWorks云原生数智运维工程实践-Kubernetes资源编排之二:Helm篇(上)

本文涉及的产品
资源编排,不限时长
简介: SREWorks云原生数智运维工程实践-


作者:凌可彭兰舒)、雪尧郭耀星

 

这是我们的《Kubernetes资源编排系列》的第二篇——Helm篇,在上篇《Kubernetes资源编排系列之一Pod YAML篇》中,我们见识到了Pod YAML的强大能力,在k8s的集群中,所见之处皆是YAML。YAML多了之后,大家就希望有一种方案能将海量的YAML管理起来。于是本篇我们来介绍一下Helm。

 

一、 Helm是什么?

 

Helm是Kubernetes生态系统中的一个软件包管理工具,类似于类似于Ubuntu中的apt、CentOS中的yum等。它可以被用于自动创建、打包、配置和部署应用程序和服务到Kubernetes集群。

 

Kubernetes为用户提供了自动部署、扩展和管理容器化应用程序的能力,然而用户部署在Kubernetes集群上的应用可能会非常复杂,一个典型的应用(以SREWorks为例)通常会有一系列对象进行内部交互来使得程序正常运转。

 

首先我们需要Deployment用于部署我们想要运行的pods,例如Mysql数据库;StorageClass用于动态分配存储卷;Persistent Volume(PV)用于储存数据库;Service用于指定pod的访问策略使得外部可以访问pod的服务;Job用于执行任务保证指定数量的pods部署成功……

 

image.png 

 

在Helm出现之前,每个对象都需要一个单独的yaml文件来配置,然后通过kubeclt apply逐一创建这些对象。如果需要对其中的一些内容进行更改,必须找到对应的yaml文件并在其中找到对应的属性;而如果想要升级其中的一些组件,也要仔细地编辑多个文件,防止错误和遗漏;当要删除这个应用程序时,也要手动删除其对应的所有组件……

 

Kubernetes并不是从“应用程序”的层面来管理集群中的各个组件,它只是将用户提交上去的yaml保存在集群中并各自运行,实际上它并不知道用户声明的各个对象,例如Job、Service、StorageClass、Deployment等,是同一个应用程序下不同的组成成分。

 

当应用较为复杂的时候,要记住变量的位置并人工执行操作是一件冗余且复杂的事,并且会给多人协作开发应用增加难度。

 

在这样的基础上,Helm应运而生,为开发人员提供了模块化的应用管理工具,降低了Kubernetes用户的工作量和工作复杂度。

 

二、 Helm是怎么做的

 

Helm将上述对象都看作一个程序包内的部分,当我们想要对程序执行操作的时候,不需要告诉helm我们要对哪个对象进行变更,只用传入程序名称,Helm会帮助我们对程序下的每个对象执行相应的操作。

 

这个包含了一组yaml文件的程序包,就叫做Helm Chart。Chart是一个描述Kubernetes相关资源的文件集合,它的格式如下:

 

 

└── sreworks-chart/

      ├── Chart.yaml    # 文件包含了对该chart的描述

      ├── values.yaml   # 文件包含了导入模版中的chart的默认值,会在用户执行helm install或helm upgrade时被覆盖

      ├── charts/       # 目录包含依赖的其他chart

      ├── templates/    # 目录包括了模板文件

      └── ...

 

 

开发时通常不会将name硬编码在资源中,用户可以通过插入发布名称来生成name字段。

 

所以我们的job.yaml就变为了:

 

 

apiVersion: v1

kind: Job

metadata:

  name: {{ .Release.Name }}-init-job

 

 

模板命令{{.Release.Name}}将发布名称注入了模板。值作为一个命名空间对象传给了模板,用点(.)分隔每个命名空间的元素。

 

在执行helm install命令时,模版渲染引擎会将括在{{和}}之间的模版命令替换为values.yaml中定义的值或用户通过--set设置的值,并将渲染后的文件发送到templates/目录中,然后收集结果并发送给Kubernetes。

 

可以通过helm命令对chart执行相应的操作:

 

 

// 安装

$ helm install sreworks . -n sreworks

 

// 升级

$ helm upgrade sreworks . -n sreworks

 

// 回滚

$ helm rollback sreworks -n sreworks

 

// 卸载

$ helm uninstall sreworks -n sreworks

 

 

还能用Helm创建自己的charts,也可以从Helm仓库中下载。

 

社区的Helm Chart仓库位于Artifact Hub,可以下载其他人上传的chart到本地使用,也可以将自己制作的chart上传到仓库中。同时Helm也支持创建并运行私有仓库,供个人和组织内部使用。

 



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
存储 弹性计算 Cloud Native
云原生成本精细化管理实践:企迈科技的成本中心建设之路
企迈实施成本中心建设的项目核心目标不仅是实现云资源的优化配置,还要为管理层提供清晰、实时的成本数据分析,帮助管理层做出更加精准的决策。通过精细化的云成本管控,逐步实现成本降低、资源合理分配和更加高效的云产品使用。
云原生成本精细化管理实践:企迈科技的成本中心建设之路
|
3天前
|
存储 人工智能 缓存
AI变革药物研发:深势科技的云原生实践之路
近日,阿里云与深势科技联合推出创新的Bohrium®科研云平台和Hermite®药物计算设计平台,实现了分子模拟技术的飞跃。
|
5天前
|
弹性计算 运维 监控
基于进程热点分析与系统资源优化的智能运维实践
智能服务器管理平台提供直观的可视化界面,助力高效操作系统管理。核心功能包括运维监控、智能助手和扩展插件管理,支持系统健康监控、故障诊断等,确保集群稳定运行。首次使用需激活服务并安装管控组件。平台还提供进程热点追踪、性能观测与优化建议,帮助开发人员快速识别和解决性能瓶颈。定期分析和多维度监控可提前预警潜在问题,保障系统长期稳定运行。
45 17
|
12天前
|
运维 Kubernetes Cloud Native
云栖实录 | 智能运维:云原生大规模集群GitOps实践
云栖实录 | 智能运维:云原生大规模集群GitOps实践
|
12天前
|
运维 自然语言处理 Cloud Native
云栖实录 | 智能运维年度重磅发布及大模型实践解读
云栖实录 | 智能运维年度重磅发布及大模型实践解读
|
12天前
|
运维 自然语言处理 算法
云栖实录 | 大模型在大数据智能运维的应用实践
云栖实录 | 大模型在大数据智能运维的应用实践
|
2月前
|
运维 Cloud Native 开发工具
智能运维:云原生大规模集群GitOps实践
智能运维:云原生大规模集群GitOps实践,由阿里云运维专家钟炯恩分享。内容涵盖云原生运维挑战、管理实践、GitOps实践及智能运维体系。通过OAM模型和GitOps优化方案,解决大规模集群的发布效率与稳定性问题,推动智能运维工程演进。适用于云原生环境下的高效运维管理。
|
11天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
|
15天前
|
运维 分布式计算 Kubernetes
ACK One多集群Service帮助大批量应用跨集群无缝迁移
ACK One多集群Service可以帮助您,在无需关注服务间的依赖,和最小化迁移风险的前提下,完成跨集群无缝迁移大批量应用。
|
2月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。

热门文章

最新文章