Kunbernetes-容器云应用的安装部署工具Helm

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 1、Helm介绍 在Kubernetes中部署容器云的应用也是一项有挑战性的工作,Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。通过helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用,同时,也可以通过helm进行容器云应用的分享。

1Helm介绍


在Kubernetes中部署容器云的应用也是一项有挑战性的工作,Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。通过helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用,同时,也可以通过helm进行容器云应用的分享。在Kubeapps Hub中提供了包括Redis、MySQL和Jenkins等参见的应用,通过helm可以使用一条命令就能够将其部署安装在自己的Kubernetes集群中。

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

Helm是管理Kubernetes包的工具,Helm能提供下面的能力:

  • 创建新的charts
  • 将charts打包成tgz文件
  • 与chart仓库交互
  • 安装和卸载Kubernetes的应用
  • 管理使用Helm安装的charts的生命周期

在Helm中,有三个需要了解的重要概念:

  • chart:是创建Kubernetes应用实例的信息集合;
  • config:创建发布对象的chart的配置信息
  • release:chart的运行实例,包含特定的config

1.1 Helm组件

在Helm中有两个主要的组件,既Helm客户端和Tiller服务器:

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

  • 本地chart开发
  • 管理仓库
  • 与Tiller服务器交互
    • 发送需要被安装的charts
    • 请求关于发布版本的信息
    • 请求更新或者卸载已安装的发布版本

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

  • 监听来自于Helm客户端的请求
  • 组合chart和配置来构建一个发布
  • 在Kubernetes中安装,并跟踪后续的发布
  • 通过与Kubernetes交互,更新或者chart

客户端负责管理chart,服务器发展管理发布。

1.2 Helm技术实现

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

Tiller服务器也是使用Go语言编写的,它使用Kubernetes客户端类库(当前是哦那个REST+JSON)与Kubernetes进行通讯。

Tiller服务器通过Kubernetes的ConfigMap存储信息,因此本身没有用于存储数据库。

2、Helm安装部署

2.1 安装Helm客户端

在进行Helm客户端安装前,请确认已有可用的Kubernetes集群环境,并已安装了kubectl。

通过访问:https://github.com/kubernetes/helm/releases,下载Helm的合适的版本。

1)此文下载helm-v2.8.0-linux-amd64.tgz版本;

2)解压缩文件:tar -zxvf helm-v2.8.0-linux-amd64.tgz

3)将解压缩后的helm移至/usr/local/bin目录下:mv linux-amd64/helm /usr/local/bin/helm

注意

  • 本文使用的操作系统为Centos 7.3;
  • 最好在安装kubectl命令行工具的机器上安装Helm客户端;或者将安装kubectl命令行工具生成的配置文件($HOME/.kube/config)复制到Helm客户端所安装的机器上($HOME/.kube/config)。

2.2 安装Tiller服务器

2.2.1 使用默认配置文件安装

通过在Helm客户端中执行如下的命令来安装Tiller服务器:

$ helm init

注意:

  • helm init命令通过$HOME/.kube/config配置文件确定在哪个Kubernetes集群中按照Tiller服务器。
  • 此命令会将Tiller服务器安装Kubernetes的kube-system命名空间中。

2.2.2 使用Service Account安装

1)创建一个名为tiller的Service Account

$ kubectl create serviceaccount tiller --namespace kube-system

2)授予名为tiller的Service Account集群管理员角色cluster-admin:

将tiller绑定至集群管理员角色的的yaml文件如下所示:

apiVersion: rbac.authorization.k8s.io/v1beta1 
kind: ClusterRoleBinding 
metadata: 
 name: tiller 
roleRef: 
 apiGroup: rbac.authorization.k8s.io 
 kind: ClusterRole 
 name: cluster-admin 
subjects: - kind: ServiceAccount 
 name: tiller 
 namespace: kube-system

通过执行kubectl create -f将授予tiller集群管理员角色:

$ kubectl create -f rbac-config.yaml

3)安装Tiller服务器

$ helm init --service-account tiller

2.3 验证安装

在安装完成后,可以通过执行如下命令来检查是安装成功:

$ helm version

如果正确显示Helm客户端和Tiller服务器的版本,这表示安装成功。

或者通过执行kubectl的如下命令来查看是否已正常按照Tiller服务器:

$ kubectl get pods -n kube-system

3、使用Helm

Helm所使用的包格式为chart,chart是描述Kubernetes资源的文件集合。通过chart能够部署类似于memcache等简单的应用,或者能够部署类似于Http服务器、数据库等复杂的应用。此文主要就chart目录、chart.yaml文件和values.yaml文件进行介绍。

3.1 Chart目录结构

在使用Helm之前,先以wordpress为例来看一下一个Chart都包含哪些内容:

wordpress/ Chart.yaml # 必需::包含关于chart信息的YAML文件 LICENSE # 可选: chart的license描述文件 README.md # 可选:可读的说明文件 requirements.yaml # 可选:列示chart依赖的YAML文件 values.yaml # 必需:chart默认的配置值文件 charts/ # 可选:包含chart所有依赖的目录 templates/ # 可选:包含模板文件的目录 templates/NOTES.txt # 可选:部署后的使用说明

3.2 chart.yaml文件介绍

对于chart来说,chart.yaml文件是必需的文件,此文件的内容如下:

name: 必需,chart的名称 version: 必需,SemVer 2的版本 description: 可选,此项目的一句话描述 keywords: – 可选,此项目的关键词列表 home: 可选,此项目主页面的URL sources: – 可选,此项目的源代码URL列表 maintainers: # 可选 – name: 维护者的名字

email: 维护者的email地址 url: 维护者的URL engine: gotpl # 可选,模板引擎的名称 icon: 可选,被使用的SVG或者PNG格式图标的URL appVersion: 可选,应用的版本 deprecated: 可选,标识吃chart是否将要被废弃 tillerVersion: chart所要求的Tiller服务器的版本

3.3 values.yaml文件介绍

chart的配置文件values.yaml所包含的内容如下例子所示:

imageRegistry: "quay.io/deis" 
dockerTag: "latest" 
pullPolicy: "Always" storage: "s3"

在chart中可以包含一个默认的values.yaml文件,Helm安装命令也允许通过–values参数指定应该YAML文件:

$ helm install --values=myvals.yaml wordpress

通过给定–values参数的方式,helm会将此参数给定的YAML文件的内容与默认values.yaml文件的内容进行合并,例如在myvals.yaml文件的内容是:

storage: "gcs"

合并后的文件内容将如下所示:

imageRegistry: "quay.io/deis" 
dockerTag: "latest" 
pullPolicy: "Always" storage: "gcs"

注意:默认的值文件必需被命名为values.yaml。在Kubernetes中,对于如何使用helm安装部署容器化应用,请参考《基于Helm安装部署高可用的Redis》。

4 Chart应用仓库

Kubeapps Hub(https://hub.kubeapps.com)作为公共的chart应用仓库,目前在上面已经以chart的格式提供Nginx、Jenkins、Redis等常用应用。在此仓库中可以发现符合自己需要的Kubernetes应用,或者发布自己以chart格式构建的Kubernetes应用。

参考资料

  1. 《The package manager for Kubernetes》,作者:Microsoft,地址:https://docs.helm.sh/
  2. 《private Ethereum network Helm chart for Kubernetes》,作者:jpoon,地址:https://hub.kubeapps.com/charts/stable/ethereum
  3. 《简化Kubernetes应用部署工具-Helm简介》,作者:frognew,地址:https://www.kubernetes.org.cn/3435.html

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
15天前
|
运维 Java Go
Go语言基础及其在容器化应用中的优势
【2月更文挑战第23天】本文首先介绍了Go语言的基本特性和优势,然后详细阐述了Go语言在容器化应用中的重要作用和独特优势。通过深入分析Go语言的语法简洁性、并发处理能力和内存管理特性,以及Docker容器技术的轻量级、可移植性和版本控制特点,本文旨在说明Go语言与Docker容器技术的结合能够显著提升应用的开发效率和部署灵活性,为现代软件开发和运维带来革命性的变革。
|
1月前
|
消息中间件 监控 NoSQL
容器化应用系统上生产的最佳实践
容器化应用系统上生产的最佳实践
|
4天前
|
存储 安全 算法
【C++ 17 包裹类 泛型容器 std::any】深入理解与应用C++ std::any:从泛型编程到多态设计
【C++ 17 包裹类 泛型容器 std::any】深入理解与应用C++ std::any:从泛型编程到多态设计
38 1
|
7天前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
15天前
|
Kubernetes Go 开发者
Go语言与Docker容器结合的实践应用与案例分析
【2月更文挑战第23天】本文通过分析实际案例,探讨了Go语言与Docker容器技术结合的实践应用。通过详细阐述Go语言在容器化环境中的开发优势,以及Docker容器技术在Go应用部署中的重要作用,本文旨在为读者提供Go语言与Docker容器结合的具体实现方法和实际应用场景。
|
17天前
|
存储 Kubernetes 云计算
云计算基础与实战:从虚拟机到容器化应用
云计算基础与实战:从虚拟机到容器化应用
19 0
|
1月前
|
NoSQL Redis Docker
深入浅出:使用Docker容器化改进Python应用部署
在快速演进的软件开发领域,持续集成和持续部署(CI/CD)已成为加速产品上市的关键。本文将探索如何利用Docker,一种流行的容器化技术,来容器化Python应用,实现高效、可靠的部署流程。我们将从Docker的基本概念入手,详细讨论如何创建轻量级、可移植的Python应用容器,并展示如何通过Docker Compose管理多容器应用。此外,文章还将介绍使用Docker的最佳实践,帮助开发者避免常见陷阱,优化部署策略。无论是初学者还是有经验的开发人员,本文都将提供有价值的见解,助力读者在自己的项目中实现容器化部署的转型。
|
1月前
|
运维 Java 开发者
深入浅出:使用Docker容器化改善Java应用的部署与运维
在当今快速迭代的软件开发周期中,确保应用的一致性、可移植性与易于管理成为了开发与运维团队面临的重大挑战。本文旨在介绍如何通过Docker容器技术,有效地解决这些问题,特别是针对Java应用。我们将从Docker的基本概念出发,逐步深入到实际操作,展示如何将传统的Java应用容器化,以及这一过程如何帮助简化部署流程、提高应用的可靠性和可伸缩性。不同于常规的技术文章,本文试图以一种更加易于理解和实践的方式,让读者能够快速掌握容器化技术,并将其应用于日常的开发与运维工作中。
87 0
|
1月前
|
JavaScript NoSQL Redis
深入浅出:使用 Docker 容器化部署 Node.js 应用
在当今快速发展的软件开发领域,Docker 作为一种开源的容器化技术,已经成为了提高应用部署效率、实现环境一致性和便于维护的关键工具。本文将通过一个简单的 Node.js 应用示例,引导读者从零开始学习如何使用 Docker 容器化技术来部署应用。我们不仅会介绍 Docker 的基本概念和操作,还会探讨如何构建高效的 Docker 镜像,并通过 Docker Compose 管理多容器应用。此外,文章还将涉及到一些最佳实践,帮助读者更好地理解和应用 Docker 在日常开发和部署中的强大功能。
30 0
|
1月前
|
运维 Java Linux
深入解析:使用Docker容器化技术提升Java应用的部署效率
在快速迭代的软件开发周期中,如何保证应用的快速、一致和可靠部署成为了开发团队需要面对的重大挑战。本文将探讨如何利用Docker容器化技术,结合Java应用,实现高效、一致的部署流程。我们将从Docker的基本概念出发,详细介绍将Java应用容器化的步骤,包括创建Dockerfile、构建镜像以及运行容器等关键环节,并通过示例代码加以说明。此外,本文还将讨论在使用Docker部署Java应用时可能遇到的常见问题及其解决策略,旨在为读者提供一种提升部署效率、优化开发流程的有效方法。
295 2

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版