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月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
95 2
|
24天前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
1月前
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
29天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
1月前
|
边缘计算 运维 Cloud Native
云原生技术的崛起:重新定义软件开发与运维
云原生技术的崛起:重新定义软件开发与运维
|
1月前
|
Kubernetes 负载均衡 Cloud Native
探索Kubernetes:云原生应用的基石
探索Kubernetes:云原生应用的基石
|
1月前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
63 1
|
26天前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。
|
10天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
1月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
71 1
下一篇
DataWorks