【云原生|K8s系列特别篇】:一文速通实战Helm管理工具

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 本期文章是K8s特别篇,主要是速通学习Helm之简介、仓库、实践应用等。通过本期文章:我们将学习Helm的基础知识、简介、仓库、实践应用等

本期文章是K8s特别篇,主要是速通学习Helm之简介、仓库、实践应用等。通过本期文章:我们将学习Helm的基础知识、简介、仓库、实践应用等

在前期的文章中,已经介绍了一些云原生入门的知识及简单实战,感兴趣的同学可以去我的云原生专栏中学习,任意门:云原生学习专栏

开山之词:Helm是什么?


用过Ubuntu和CentOS的同学都不陌生,Ubuntu下的ap-get或者CentOS下的yum,都是Linux系统下的包管理工具。采用这两个管理工具,开发者可以管理应用包之间的依赖关系,发布应用,同时用户可以以简单的方式查找、安装、升级、卸载应用程序。


那么通过类比,Helm就是Kubernetes的apt-get/yum。Helm是Deis开发的一个用于kubernetes的包管理器。每个包都称为一个Chart,一个Chart是一个目录。


应用发布者可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。


使用者可以使用Helm但是并不需要了解K8s的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。也就是通过Helm可以使用一条命令就能够将其部署安装在自己的Kubernetes集群中。Helm还可以提供软件部署、删除、升级、回滚应用等功能。

中流砥柱:为什么需要Helm?


先来看看直接应用Kubernetes部署云服务可能会遇到的困难?


Kubernetes使用yaml文件来描述和管理服务中各个组件的配置和部署需求,每个组件对应一个yaml文件。云服务通常都是由多个组件构成的,如何配置和处理好这些组件即多个yaml文件之间的关联关系,成为了Kubernetes应用的必须面对的。


当云服务升级只涉及其中一个或某几个模块时,升级模块的新yaml文件和已有yaml文件之间的关联关系会变得更加复杂,增加了使用Kubernetes来配置和管理升级的难度。


另外,Kubernetes把组件的配置信息也直接记录到yaml文件当中。从描述组件的角度来讲,这种方式确实比较清晰。但是,当云服务的部署面对多个环境,如不同的开发、测试、产品环境(当前比较常见的应用场景),要如何处理这些环境配置之间的差别呢?为每个环境都开发和维护一套不同的yaml文件?这显然增加了许多工作量。


并且,Kubernetes的yaml文件本身是没有版本的概念的。当某次部署失败,需要回滚到上一个稳定版本,该选择哪一套yaml文件来处理也成了需要解决的额外问题。


所以,Helm可以很好的解决这些问题。Helm是通过被称作Helm Chart的包来描述和管理云服务的。

以一敌百:深入了解Helm架构


Helm的架构由Helm客户端、Tiller服务器端和Chart仓库所组成;Tiller部署在Kubernetes中,Helm客户端从Chart仓库中获取Chart安装包,并将其安装部署到Kubernetes集群中。

1、Helm客户端

Helm客户端:这是一个供终端用户使用的命令行工具,客户端负责如下的工作:


本地chart开发、管理仓库

与Tiller服务器交互,如:发送需要被安装的charts、请求关于发布版本的信息、请求更新或者卸载已安装的发布版本

Helm客户端是使用Go语言编写的,它通过gRPC协议与Tiller服务器交互。

2、Tiller服务器

Tiller服务部署在Kubernetes集群中,Helm客户端通过与Tiller服务器进行交互,并最终与Kubernetes API服务器进行交互。 Tiller服务器负责如下的工作:


监听来自于Helm客户端的请求

组合chart和配置来构建一个发布

在Kubernetes中安装,并跟踪后续的发布

通过与Kubernetes交互,更新或者chart

Tiller服务器也是使用Go语言编写的,它使用Kubernetes客户端类库与Kubernetes进行通讯。

3、chart

先简单创建个chart:

helm create myapp
//chart的目录结构
# tree myapp/
    myapp/
    ├── charts
    ├── Chart.yaml
    ├── templates
    │   ├── deployment.yaml
    │   ├── _helpers.tpl
    │   ├── ingress.yaml
    │   ├── NOTES.txt
    │   ├── serviceaccount.yaml
    │   ├── service.yaml
    │   └── tests
    │       └── test-connection.yaml
    └── values.yaml


Chart.yaml 用于描述这个 Chart的相关信息,包括名字、描述信息以及版本等。

values.yaml 用于存储 templates 目录中模板文件中用到变量的值。

NOTES.txt 用于介绍 Chart 部署后的一些信息,例如:如何使用这个 Chart、列出

核心概念:Helm的三大法宝


在上面的功能中,有三个重要概念要理解:


chart:创建Kubernetes应用实例的信息集合,helm package,包含一个k8s app应用运行起来的所有要素,比如service, deployment, configmap, serviceaccount, rbac等,这些都是以template文件的形式存在,再结合values文件,最终渲染出能够被k8s执行的yaml文件;

repository:是charts的集合,方便进行分享和分发。

release:release是helm chart在kubernetes的一个运行实例,可以用不同的release name多次安装同一个chart,比如:当集群中需要多个redis实例,可以使用不同的配置文件安装redis chart。

那么,helm的运行流程如下:


首先,从chart仓库中获取chart,然后开发者配置自己的values文件,根据自己的运行环境对values进行修改,然后默认values文件和使用者values文件会进行一个merge,形成最终的values文件;使用最终的values文件,渲染chart的template,形成可以被kubernetes执行的yaml,最后调用kube apply提交yaml到kubernetes。


在上述的过程中,使用者只需要理解一点点配置的知识就可以完成操作,没有那么困难了。这也正是helm的核心设计理念。



如日中天:实战Helm Demo


1、安装helm

curl https://baltocdn.com/helm/signing.asc | sudo apt-key add – 
sudo apt-get install apt-transport-https --yes 
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list 
sudo apt-get update 
sudo apt-get install helm=3.4.2-1


2、添加仓库,找到redis chart

添加仓库:helm repo add stable https://charts.helm.sh/stable
查看已经添加的仓库:helm repo list
搜索仓库有哪些chart:helm search repo stable
更新仓库列表到本地:helm repo update
搜索redis:helm search repo redis
查看redis chart详情:helm show chart stable/redis
查看redis values(values:相当于chart的配置文件):helm show values stable/redis



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
17小时前
|
Kubernetes Cloud Native 容器
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
51 1
|
17小时前
|
运维 Kubernetes Cloud Native
构建高效云原生运维体系:Kubernetes最佳实践
【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
|
17小时前
|
监控 安全 Cloud Native
【云原生之Docker实战】使用Docker部署Ward服务器监控工具
【5月更文挑战第11天】使用Docker部署Ward服务器监控工具
11 3
|
17小时前
|
Kubernetes Cloud Native 持续交付
构建高效稳定的云原生应用:容器编排与微服务治理实践
【5月更文挑战第14天】 随着企业数字化转型的深入,云原生技术以其弹性、敏捷和可扩展的特性成为现代应用开发的首选模式。本文将探讨如何通过容器编排工具如Kubernetes以及微服务架构的有效治理,构建和维护高效且稳定的云原生应用。我们将分析容器化技术的优势,并结合案例讨论在多云环境下实现持续集成、持续部署(CI/CD)的最佳实践,同时解决微服务带来的分布式复杂性问题。通过本文的阐述,读者将获得一套提升系统可靠性和业务连续性的策略框架。
5 0
|
17小时前
|
Cloud Native 安全 Linux
【云原生之Docker实战】使用Docker部署mBlog微博系统
【5月更文挑战第10天】使用Docker部署mBlog微博系统
10 2
|
17小时前
|
监控 Cloud Native 测试技术
云原生之使用Docker部署ServerBee服务器监控工具
【5月更文挑战第6天】云原生之使用Docker部署ServerBee服务器监控工具
13 1
|
17小时前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
17小时前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
30 1
|
17小时前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
53 1
|
17小时前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:以Kubernetes为核心
【4月更文挑战第27天】 在当今数字化转型的浪潮中,企业急需构建灵活、可扩展的应用来应对不断变化的市场需求。云原生技术以其独特的优势应运而生,成为推动现代应用开发和部署的重要力量。本文深入探讨了云原生的核心组件之一——Kubernetes,解析其如何通过容器编排优化资源利用,提高应用的弹性和可维护性。同时,文章将展示如何在云平台上实现高效的服务发现、自动扩缩容以及持续集成和持续部署(CI/CD),进一步阐述云原生架构下的最佳实践和面临的挑战。