这篇文章介绍一下云原生应用在 Kubernetes 上安装时,经常会用到的一个重要工具,Helm。

Helm 是 Kubernetes 的包管理软件。提到包管理软件,很多人都不陌生。Maven、Gradle、pip、RubyGems 和 npm 都是包管理软件。

作为一个包管理软件,核心是包和管理两个部分。


Helm Chart

第一个部分的要点是 Helm 的包中都包含什么?

我们都知道,Kubernetes 采用的是声明式的资源管理。以 YAML 文件的形式来声明资源的期望状态,而 Kubernetes 会确保资源的实际状态,满足声明所描述的期望。

比如,一个 Deployment 只需要声明 Pod 的数量即可,而不用去管运行时 Pod 可能会出现的由于 Pod 失败导致的 Pod 被重新创建等细节。

在部署一个应用到 Kubernetes 时,可能会需要声明多种不同的资源。比如,在安装 Postgres 时,我们可能会需要如下资源:

  • 实际运行 Postgres 的 Deployment 或 StatefulSet。

  • 允许其他应用访问的 Service。

  • 数据存储需要的 PersistenceVolumeClaim 或 PersitenceVolume。

  • 保存数据库配置的 ConfigMap。

  • 保存数据库密码的 Secret。

所有这些资源声明组成了应用的安装包,Helm 称之为 Chart。

使用软件包的一个重要目的是为了共享。Helm Chart 中的资源定义是通过模板生成的,包含了很多可以在安装时进行配置的选项。以Postgres来说,你可能会需要配置数据库的访问密码、存储空间的大小和数据库的初始化脚本等。

把Helm Chart与安装时的配置项结合起来,就得到了一个特定的release。

以Postgres Chart为例,我们可以创建对应于开发、测试和生产环境的3个不同的release。每个release基于同样的Chart,但是配置不同。配置项通常以YAML文件的形式来保存,也可以在命令行传递。

下面给出了的配置文件,对应于 Postgres 在开发环境上的release。

postgresqlUsername: devpostgresqlPassword: passwordpersistence:enabled: false

通过 helm install 命令可以安装Chart。在安装时需要指定Chart的名称、release的名称和配置文件。配置文件使用 -f 参数来传递,也可以使用 --set 来设置单个配置项的值。

下面的代码使用默认的配置来安装 Nginx。

helm install nginx bitnami/nginx

Release管理

之前说的是包的部分,下面介绍 Helm 对包的管理。每个 Helm Chart 有两个版本号,一个是所安装的应用的版本号,比如 Postgres 的版本号;另外一个是 Chart 自身的版本。使用语义化的版本号,可以保证应用的有序升级。

当创建了release之后,Helm可以对release进行管理,包括升级、回退和删除。对release的更新会产生不同的版本。比如,在首次安装了Nginx之后,release的版本为 1。可以通过 helm list 命令来查看。

之后我们接到一个需求,要求启用Nginx与Prometheus的集成功能。只需要使用 helm upgrade 命令更新当前的release,传递一个新的配置项 metrics.enable=true 即可。当更新完成之后,release的版本为 2

helm upgrade --set metrics.enable=true nginx bitnami/nginx

如果发现之前的更新产生了问题,可以通过 helm rollback 命令,回退到版本 1。需要注意的是,在执行 helm rollback 命令之后,release的版本号实际上变成了 3。可以使用 helm history 命令来查看release的全部版本历史记录。

在每次更新之前,还可以通过 helm diff 来查看新改动与当前release版本的差异。

helm diff upgrade --set metrics.enabled=true nginx bitnami/nginx

下面给出了 helm diff 命令的输出结果的示例。

当需要在Kubernetes上安装软件时,第一个选项是从 ArtifactHub 上查找,看是否已经有别人贡献的Chart。这样可以极大的降低开发的成本。比如,我之前安装 Postgres 和Nginx使用的都是 Bitnami 维护的Chart。

对于内部项目的应用,只能自己开发 Chart。我将在下一篇文章中介绍 Helm Chart 的开发。

helm安装postgres_Helm 入门介绍 Kubernetes 上的包管理软件相关推荐

  1. [Python爬虫] scrapy爬虫系列 一.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  2. helm安装postgres_Helm 安装使用

    简介 很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具.采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用:用户 ...

  3. 【Java基础教程】(一)入门介绍篇 · 上:快速掌握核心概念,开启Java世界的探索之旅!这篇Java入门宝典助你翱翔~

    Java基础教程之入门介绍 · 上 本节学习目标 1️⃣ Java发展简史 1.1 诞生 1.2 发展 1.3 分支 2️⃣ 特征 3️⃣ 代码执行过程

  4. 在Kubernetes上部署和管理PostgreSQL

    目录 有哪些选项可用于部署PostgreSQL? 选项 01 - 从头开始​​创建部署配置 选项 02 - 使用helm chart 什么是Helm? Helm架构 Helm由三个主要概念组成 如何安 ...

  5. linux在终端安装软件包失败,使用Apt-get和Synaptic包管理器来纠正Debian上的依赖错误...

    本文介绍使用终端中的Apt-get和Synaptic包管理器来纠正Debian上的依赖错误.当用户从Internet下载软件包时,Debian Linux上有时会出现依赖性错误,操作系统无法找到成功运 ...

  6. ubuntu安装portainer_如何在Ubuntu上使用Portainer管理Docker容器

    如何在Ubuntu上使用Portainer管理Docker容器 Portainer是Docker的开源管理UI,包括Docker Swarm环境. Portainer使您更容易管理Docker容器,它 ...

  7. 介绍下 Emacs 的包管理功能,感觉还是比较方便的

    2019独角兽企业重金招聘Python工程师标准>>> Emacs 24.2.1 自动带了这个包管理的功能,不过默认搜索的网站上包比较少,需要手工加一些,具体方法就是把下面这段代码加 ...

  8. 写论文第二步——管理文献 上(文献管理软件)

    管理文献是"阅读文献.记录笔记.提出问题.寻找方案.验证方案.撰写论文"几个步骤的基础 1.EndNote: 简介:一款被广泛使用的文献管理软件,是SCI(Thomson Scie ...

  9. 前端入门(二)npm包管理+模块化+bable转码器+webpack打包+vue-element-admin

    一.npm包管理工具 NPM全称Node Package Manager,是Node.js包管理工具,相当于前端的Maven .不需要单独安装,和nodejs一起 在命令提示符输入 npm -v 可查 ...

最新文章

  1. 从AlexNet到BERT:深度学习中那些最重要idea的最简单回顾
  2. 从sql中image类型字段中导出图片
  3. Blender 2.42
  4. ssldump编译及使用过程
  5. LeetCode 1753. 移除石子的最大得分(优先队列)
  6. 黑科技揭秘:阿里云如何做到从业务宕机到恢复业务运行只用一分半钟时间
  7. [Matlab]求解线性方程组
  8. 百度文本编辑器ueditor v1.2.3.0使用方法及配置(图片上传功能、目录更改)
  9. 面向对象的三大特性之三:封装
  10. iOS-CoreText的那些事【电子书的那些事】
  11. ITU-R BT.656 , 帧 , 场 === 模拟视频信号采集的处理,以及奇偶场
  12. 运筹学实验报告c语言,运筹学教案-实验.doc
  13. 高新计算机考试培训 ppt,全国计算机高新技术考试.ppt
  14. 幼儿园不同空间翻新设计注意事项
  15. 学习Python的三种境界,你现在是在什么境界?
  16. 随时随地开展绘图工作,还得靠CAD在线!
  17. [实践篇]13.12 教你读懂QNX座舱方案里的高频术语
  18. Cocos Creator转盘抽奖
  19. c语言while语句1阶层加到10阶层,用C++编程:1的阶层加到10的阶层,使用For语句,还有While和Do While语句编程!!...
  20. flex布局(弹性盒子三)

热门文章

  1. 企业实战_08_MyCat 搭建Mysql 一主二从复制环境
  2. Mysql8.0 的sql修改成 Mysql7.X的sql
  3. SpringBoot2 集成 xxl-job任务调度中心_路由策略
  4. SSM整合Druid数据库连接池
  5. 工作流实战_28_flowable 任务多实例
  6. 软件设计师 - 系统测试
  7. Node.js 入门详解(一)
  8. python获取视频时长方法
  9. .rdlc 文件设置方向_在Word里面怎么设置把字竖着打出来?
  10. matlab中的nlinfit,matlab中nlinfit问题!!!!!!!!!!!!